Les builds reproductibles et Citadel
Quand vous installez un binaire, vous vous fiez aux personnes et aux machines qui l’ont compilé. En général, vous ne voyez pas le serveur de build, et le binaire seul ne permet pas de savoir s’il correspond aux sources publiées.
Un binaire peut être modifié à plusieurs endroits : dans le dépôt de sources, sur la machine de build ou dans la chaîne d’outils. Sans builds reproductibles, pour le vérifier, il faut soit croire le fournisseur sur parole, soit faire de la rétro-ingénierie sur l’artefact.
Comment fonctionne la reproductibilité
Un build est reproductible quand les mêmes sources, compilées avec la même chaîne d’outils et les mêmes paramètres, produisent un résultat identique bit pour bit sur n’importe quelle machine.
Dans ce cas, des personnes extérieures au projet peuvent vérifier une version :
- Quelqu’un recompile les sources publiées et compare l’empreinte de son résultat avec celle de l’artefact officiel.
- Un auditeur qui a examiné une révision des sources peut confirmer qu’une version a été compilée à partir de cette révision.
- Si un serveur de build est compromis, ou si un fournisseur est contraint de livrer un binaire modifié, l’artefact officiel ne correspond plus aux recompilations indépendantes. L’écart apparaît dès que quelqu’un compare les empreintes.
Ce que cela exige
La plupart des systèmes de build laissent passer des détails de l’environnement dans le résultat. Pour obtenir un résultat identique, le build doit les contrôler :
- Horodatages. Les dates de compilation intégrées sont fixées à une valeur connue.
- Chemins. Les chemins absolus du répertoire de build sont retirés ou normalisés.
- Ordre et paramètres régionaux. L’ordre des fichiers dans les archives et les paramètres régionaux sont fixés pour ne pas varier d’une machine à l’autre.
- Chaîne d’outils. Les versions du compilateur et les options de compilation sont figées dans la définition du build.
Limites
La reproductibilité montre qu’un binaire a été compilé à partir de sources données. Elle ne montre pas que ces sources sont sûres. Du code malveillant se compile aussi de façon reproductible, donc la revue des sources reste nécessaire.
Citadel
Citadel est compilé à partir des sources avec OpenEmbedded, et le système de base est livré sous forme d’une seule image signée. Les sources seront publiées. Les versions incluront des sommes de contrôle de build reproductible et un manifeste signé, pour que n’importe qui puisse recompiler une image et la comparer avec celle que nous distribuons.
De prochains articles décriront le pipeline de build plus en détail, y compris la façon dont les sommes de contrôle de la page de téléchargement sont produites.