====== Vérifier la validité des fichiers ======
Si vous êtes un grand amateur de téléchargement ou de récupération en masse sur les sites FTP ou autres, vous avez sans doute déjà remarqué la présence de petits fichiers pour le moins étranges. Ceux-ci ne dépassant que rarement plusieurs centaines d'octets, ils portent comme extension //.sum//, //.md5// ou encore //.sign//.
Ces fichiers, vous vous en serez douté, ne sont pas là par hasard. Même s'il est très peu probable qu'en téléchargeant une archive depuis un site officiel vous vous retrouviez avec un cheval de Troie, il est préférable d'en vérifier la validité. C'est justement à cet effet que ces petits fichiers sont mis à disposition en même temps que l'archive.
===== MD5 =====
L'utilitaire md5sum permet de calculer ce qu'on appelle l'empreinte d'un fichier. En anglais, fingerprint, message-digest ou encore checksum est une valeur de 128 bits correspondant à une somme de contrôle calculée à partir de l'archive. Un checksum MD5 n'a pas pour but de garantir la provenance d'un fichier ou d'un groupe de fichiers. Son intérêt est de permettre la vérification de l'intégrité des données récupérées. En effet, nul n'est à l'abri d'une perturbation ou d'un problème réseau ayant pour conséquence la corruption d'une archive en cours de téléchargement.
L'utilitaire md5sum permet alors de vérifier que la somme de contrôle que vous calculerez à partir de l'archive sur votre disque correspond à celle calculée par l'auteur. Si la somme diffère, votre archive est corrompue et vous risquez de rencontrer des problèmes.
L'utilitaire md5sum fait partie des applications livrées avec les Gnu Textutils. Il n'y a aucune raison pour laquelle vous ne l'auriez pas déjà sur votre système. Pour la petite histoire, l'algorithme MD5 a été conçu par le professeur Ronald L. Rivest (ce grand monsieur est le "R" dans RSA). Si vous désirez en savoir plus sur l'algorithme MD5, consultez directement la RFC 1321. Un lien est placé en fin d'article.
Vous pouvez vous-même calculer cette empreinte pour n'importe quel fichier présent sur votre système :
$ cd /quelque/part
$ md5sum toto.jpg
421ef9e4061c70c6a9933475ed433fe4 toto.jpg
Et voilà votre empreinte ! Vous pouvez bien sûr générer des empreintes pour plusieurs fichiers en même temps :
$ cd /autre/part
$ md5sum *.pov
bc94f333a9090cc298abe46d1780d39d caffeine.pov
aa558321321536ea233996928f97935f caffeine2.pov
09309f1f5f2b4df5801f2caab3bd3b1e caffeine3.pov
5eb0fcbf5d1683c98cbe6095e849ebd2 ibuprofen.pov
4e177e1852c8c343ecded914fcfd522f nicotine.pov
Pour générer un fichier contenant toutes les empreintes redirigez simplement la sortie de la commande md5sum vers un fichier :
$ md5sum *.pov > mesfichiers.md5
Il sera ensuite facile pour quiconque de vérifier l'intégrité des fichiers qu'il aura récupéré chez vous à partir du fichier des empreintes :
$ md5sum -v -c mesfichiers.md5
caffeine.pov OK
caffeine2.pov OK
caffeine3.pov OK
ibuprofen.pov OK
nicotine.pov OK
Si un fichier comporte une anomalie ou une différence par rapport à l'original, md5sum vous le signalera immédiatement :
$ md5sum -v -c mesfichiers.md5
caffeine.pov OK
caffeine2.pov OK
caffeine3.pov ÉCHEC
ibuprofen.pov OK
nicotine.pov OK
md5sum: échec de la vérification MD5 pour 1 sur 5 fichier(s)
===== Signature des archives =====
MD5 permet de garantir l'intégrité des données mais pas leur provenance. Pour cela, vous devrez faire usage d'un autre logiciel. Si nous prenons, par exemple, les archives des sources du kernel Linux disponibles sur le serveur ftp de lip6 (ftp.lip6.fr/pub/linux/kernel/sources/2.4), vous remarquerez pour chaque archive un petit fichier du même nom portant le suffixe .sign.
Il s'agit du fichier signature de l'archive permettant d'en garantir la provenance. Prenons un exemple concret. Pour l'archive linux-2.4.4.tar.gz, le fichier signature correspondant (linux-2.4.4.tar.gz.sign) contient :
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info
iD8DBQA66iFUyGugalF9Dw4RAorTAJ0W8ktNNvYPrT4djp+bmiftNJa92gCZAbbZ
vBXOQ+l4/rnM3TWjpZP5L1Q=
=77vM
-----END PGP SIGNATURE-----
Une signature PGP, nous voici bien avancé. Que faire ? Les signatures de ce type reposent sur une méthode appelée chiffrage à clef publique. Sans entrer dans des considérations mathématiques, cette méthode permet à un développeur ou un groupe de développeurs de signer de manière électronique un fichier ou un message en utilisant une clef secrète ou clef privée. La clef privée ne devra et ne sera jamais divulguée publiquement. Pour vérifier une signature, nous utiliserons la petite soeur de la clef privée appelée clef publique. Cette dernière est disponible pour tous et habituellement répertoriée dans un serveur de clefs.
Dans notre exemple, nous avons besoin de la clef publique correspondant au projet de Kernel Linux. Les développeurs du kernel étant des personnes très consciencieuses, une page spécifique a été mise en place signalant le numéro de clef à utiliser (http://www.kernel.org/signature.html) : 0x517D0F0E.
Pour poursuivre, il vous faudra utiliser le logiciel GnuPG. C'est cet utilitaire qui vous permettra de récupérer la clef publique et de vous en servir pour vérifier la signature de l'archive linux-2.4.4.tar.gz. Commençons donc par récupérer la clef auprès du serveur de clefs :
$ gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E
gpg: requête de la clé 517D0F0E de wwwkeys.pgp.net
gpg: clé 517D0F0E: clé publique importée
gpg: Quantité totale traitée: 1
gpg: importée: 1
Ceci fait, nous pouvons vérifier la validité de l'archive en combinant toutes les informations (clef public, archive et fichier signature) :
$ gpg --verify linux-2.4.4.tar.gz.sign linux-2.4.4.tar.gz
gpg: Signature faite sam 28 avr 2001 03:48:04 CEST avec une clé DSA ID 517D0F0E
gpg: Bonne signature de "Linux Kernel Archives Verification Key "
"Bonne signature...", c'est parfait, notre archive a été vérifiée avec succès. Nous pouvons faire confiance en son contenu. En réalité, ceci n'est pas tout à fait exact. Bien qu'il soit extrêmement difficile de "casser" une telle clef, il est toujours possible que quelqu'un ait piraté le serveur www.kernel.org pour y glisser un faux numéro de clef ou encore wwwkeys.pgp.net pour fournir une fausse clef publique. Bien sûr, ceci ne passerait pas inaperçu : pas plus que quelques heures et des alertes seraient lancées de toute part. Sachez seulement que cela reste toujours possible et qu'il n'existe pas de sécurité absolue.
Notez qu'il existe des interfaces utilisateur très conviviales pour GnuPG ainsi que des modules vous permettant d'automatiser les vérifications depuis votre client ftp et/ou mail. Les serveurs de clefs sont nombreux sur Internet et théoriquement tous reliés entre eux. Si vous désirez récupérer une clef publique afin de vérifier la signature de l'auteur, il vous suffira de faire une simple recherche avec son nom. Certes, dans la plupart des cas, l'auteur spécifie son numéro de clef sur sa homepage.
===== Liens =====
Gnu Textutils
http://www.gnu.org/software/textutils/
GnuPG
http://www.gnupg.org
Un des nombreux serveurs de clefs
http://www.keyserver.net
MD5 Homepage
http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html
La RFC 1321
http://rfc.net/rfc1321.html
Linux Magazine France n°28 - Mai 2001