reproducible.debian.net Système de tests en continu piloté par Jenkins Grosse machine sponsorisée par ProfitBricks Vérifie en moyenne autour de 1300 paquets Debian par jour Résultats accessibles via la web Ajoutés récemment : Coreboot et OpenWrt Lunar (Debian) Compilations reproductibles 28 / 101
Variations testées pour les paquets Debian La deuxième compilation est différente sur : l’heure le fuseau horaire l’ordre des fichiers l’ordre des processus le nombre de cœurs alloués Lunar (Debian) Compilations reproductibles 29 / 101
Variations testées pour les paquets Debian le nom de la machine et son nom de domaine le nom du compte, ainsi que uid et gid le umask la locale ( LC_ALL ) et la langue ( LANG ) la version du noyau le PATH Lunar (Debian) Compilations reproductibles 30 / 101
/proc/cpuinfo Variations en projet la date ( mais on triche avec les fuseaux horaires ) le système de fichiers Peut-être qu’il manque encore d’autres variations à ajouter… Lunar (Debian) Compilations reproductibles 31 / 101
Problèmes identifiés L’horodatage ( timestamp ) L’ordre des fichiers Du (pseudo-)aléatoire : ◮ Les chemins de fichiers temporaires ◮ UUID ◮ Les protections contre les attaques de complexité Lunar (Debian) Compilations reproductibles 32 / 101
Problèmes identifiés (suite) Lié au processour ou à la mémoire : ◮ Des optimisations de code liées au type de processeur ◮ L’écriture d’adresses mémoires Le chemin du dossier de compilation Et bien d’autres… (par exemple les options de localisation) Lunar (Debian) Compilations reproductibles 33 / 101
Problèmes identifiés (suite) Examples Horodatage par le système de compilation Lunar (Debian) Compilations reproductibles 34 / 101
Horodatage dans les en-têtes gzip Lunar (Debian) Compilations reproductibles 35 / 101
Horodatage par Maven Lunar (Debian) Compilations reproductibles 36 / 101
Horodatage dans des Makefile générés Lunar (Debian) Compilations reproductibles 37 / 101
Horodatage dans des en-têtes C Lunar (Debian) Compilations reproductibles 38 / 101
Horodatage par PyQt4 Lunar (Debian) Compilations reproductibles 39 / 101
Horodatage par le compilateur Erlang Lunar (Debian) Compilations reproductibles 40 / 101
Horodatage dans les binaires au format PE Windows, UEFI, Mono… Lunar (Debian) Compilations reproductibles 41 / 101
Horodatage dans les bibliothèques ADA Lunar (Debian) Compilations reproductibles 42 / 101
Horodatage dans les gemspec Ruby Lunar (Debian) Compilations reproductibles 43 / 101
Horodatage dans le registre PHP Lunar (Debian) Compilations reproductibles 44 / 101
Horodatage par Cheetah Lunar (Debian) Compilations reproductibles 45 / 101
Horodatage dans la version d’un module Lunar (Debian) Compilations reproductibles 46 / 101
Problèmes identifiés (suite) Examples Les archives Lunar (Debian) Compilations reproductibles 47 / 101
Horodatage dans le bibliothèques statiques Lunar (Debian) Compilations reproductibles 48 / 101
Horodatage dans le bibliothèques statiques Lunar (Debian) Compilations reproductibles 49 / 101
Horodatage dans les archives ZIP Lunar (Debian) Compilations reproductibles 50 / 101
Horodatage dans les .jar Java En fait, ce sont des archives ZIP. Lunar (Debian) Compilations reproductibles 51 / 101
Horodatage dans les archives Tar Lunar (Debian) Compilations reproductibles 52 / 101
Login and groupe dans les archives Tar Lunar (Debian) Compilations reproductibles 53 / 101
Ordre aléatoire dans les archives Tar Lunar (Debian) Compilations reproductibles 54 / 101
Problème identifiés (suite) Examples Horodatage dans la doc Lunar (Debian) Compilations reproductibles 55 / 101
Horodatage par Doxygen Lunar (Debian) Compilations reproductibles 56 / 101
Horodatage par docbook-to-man Lunar (Debian) Compilations reproductibles 57 / 101
Horodatage par Groovydoc Lunar (Debian) Compilations reproductibles 58 / 101
Horodatage par Epydoc Lunar (Debian) Compilations reproductibles 59 / 101
Horodatage par Sphinx Lunar (Debian) Compilations reproductibles 60 / 101
Horodatage par Ghostscript Lunar (Debian) Compilations reproductibles 61 / 101
Horodatage par LaTeX Lunar (Debian) Compilations reproductibles 62 / 101
Horodatage par texi2html Lunar (Debian) Compilations reproductibles 63 / 101
Horodatage par texi2html (suite) Lunar (Debian) Compilations reproductibles 64 / 101
Horodatage par help2man Lunar (Debian) Compilations reproductibles 65 / 101
Horodatage par GNU groff Lunar (Debian) Compilations reproductibles 66 / 101
Horodatage par Javadoc Lunar (Debian) Compilations reproductibles 67 / 101
Horodatage par man2html Lunar (Debian) Compilations reproductibles 68 / 101
Horodatage par LaTeX (.dvi) Lunar (Debian) Compilations reproductibles 69 / 101
Problèmes identifiés (suite) Examples « Compilé le/sur/par » Lunar (Debian) Compilations reproductibles 70 / 101
Horodatage par macros du préprocesseur C Lunar (Debian) Compilations reproductibles 71 / 101
Horodatage par macros du préprocesseur C Lunar (Debian) Compilations reproductibles 72 / 101
Horodatage via Makefile Lunar (Debian) Compilations reproductibles 73 / 101
Nom de machine enregistré via ./configure Lunar (Debian) Compilations reproductibles 74 / 101
Horodotage via ./configure Lunar (Debian) Compilations reproductibles 75 / 101
Macros m4 pour autoconf (horodatage) Lunar (Debian) Compilations reproductibles 76 / 101
Macros m4 pour autoconf (login) Lunar (Debian) Compilations reproductibles 77 / 101
Macros m4 pour autoconf (nom de machine) Lunar (Debian) Compilations reproductibles 78 / 101
Version du noyau Lunar (Debian) Compilations reproductibles 79 / 101
Points bonus Lunar (Debian) Compilations reproductibles 80 / 101
Problèmes identifiés (suite) Examples Aléatoire Lunar (Debian) Compilations reproductibles 81 / 101
Ordre aléatoire des hash Perl cf. Algorithmic complexity attacks perlsec(1). Lunar (Debian) Compilations reproductibles 82 / 101
Numéro de série aléatoire dans les flux Ogg Lunar (Debian) Compilations reproductibles 83 / 101
Ordre aléatoire des imports dans du Python Lunar (Debian) Compilations reproductibles 84 / 101
Nom de fichiers temporaire avec ocamlc Lunar (Debian) Compilations reproductibles 85 / 101
Problèmes identifiés (suite) Examples Toujours plus d’horodatage ! Lunar (Debian) Compilations reproductibles 86 / 101
Horodatage dans les EPUB Lunar (Debian) Compilations reproductibles 87 / 101
Horodatage dans les PNG Even images! Lunar (Debian) Compilations reproductibles 88 / 101
Horodatage dans les polices TrueType And fonts! Lunar (Debian) Compilations reproductibles 89 / 101
Problèmes identifiés (suite) Chemin du dossier de compilation Enregistrement de l’environnement (par exemple le PATH ) Permissions des fichiers Signature cryptographique Et il en manque de nombreux autres… Lunar (Debian) Compilations reproductibles 90 / 101
Comment corriger? Horodatage : ◮ Préférer une référence précise au code en train d’être compilé (numéro de version, hash du commit git) ◮ Utiliser une date de référence (dernière modification du code) ◮ Utiliser le fuseau horaire UTC Ordre aléatoire : ◮ Trier les clés ou les fichiers Lunar (Debian) Compilations reproductibles 91 / 101
Comment corriger? (suite) Chemins : ◮ Utiliser toujours le même dossier Noyau, processeur, login, … : ◮ Ne pas enregistrer d’informations inutiles dans les binaires On peut aussi nettoyer a posteriori . Lunar (Debian) Compilations reproductibles 92 / 101
strip-nondeterminism Normalise divers formats de fichiers Gère pour l’instant : ◮ Archives ar ( .a ) ◮ gzip ◮ Java jar ◮ Javadoc HTML ◮ Maven pom.properties ◮ PNG ◮ Archives ZIP Écrit en Perl (tout comme dpkg-dev ) Lunar (Debian) Compilations reproductibles 93 / 101
Où en est-on dans Debian? Lunar (Debian) Compilations reproductibles 94 / 101
(dans notre environnement de test) Pour celles et ceux dans le fond 82% plus de 18 000 paquets sources ! Lunar (Debian) Compilations reproductibles 95 / 101
Recommend
More recommend