Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site https://www.yesik.it !

La somme de contrôle MD5 est un nombre sur 128 bits calculé à partir du contenu d'un fichier. Une des particularités de l'algorithme de calcul MD5 est qu'une petite variation dans les données du fichier génère un code de hâchage radicalement différent. C'est pourquoi on dit parfois que MD5 permet de calculer l'empreinte digitale (fingerprint) d'un fichier.

Ainsi, même si en théorie il est possible d'avoir une infinité de fichiers ayant la même empreinte MD5, dans la pratique c'est hautement improbable. D'autant plus pour deux versions d'un même fichier. Par conséquent, une des utilisations de MD5 est de vérifier l'intégrité d'un document: si le fichier est incomplet ou modifié, son empreinte MD5 ne correspondra pas à celle attendue.

Piège:

Ceci, bien sûr, n'est valide que si le MD5 est récupéré à partir d'une autre source que le fichier. Dans le cas contraire, il existe un risque que le fichier ait été modifié par un individu et que ce soit la somme de contrôle du fichier modifié qui soit diffusée!

L'utilitaire md5sum est un programme qui permet de calculer la somme de contrôle MD5 d'un fichier. Il est généralement utilisé pour vérifier qu'un fichier n'a pas été altéré pendant son téléchargement.

Calculer un MD5

Calculer un md5 avec md5sum est très facile. Dans l'exemple ci dessous, je souhaite calculer la somme de contrôle du fichier db-derby-10.5.1.1-bin.zip que je viens de télécharger:

sh$ md5sum db-derby-10.5.1.1-bin.zip
6a7ceff129a4e2fdf36d113ba001d149  db-derby-10.5.1.1-bin.zip

Maintenant que j'ai l'empreinte de mon fichier, je peux en vérifier l'intégrité. Je peux avoir plusieurs motivations pour cela. Par exemple, je peux vouloir m'assurer que le téléchargement est complet. Ou encore, il se peut que j'ai téléchargé mon fichier à partir d'un miroir dans lequel je n'ai qu'une confiance relative. Je vais donc comparer la somme de contrôle MD5 que je viens de calculer avec celle diffusée sur le site officiel. Ceci dit, ça n'est ni très agréable – ni très fiable – de comparer "avec ses yeux" deux grands nombres héxadécimaux. Heureusement, md5sum possède aussi un mode vérification

Vérifier une somme MD5 automatiquement

Donc, j'ai téléchargé un fichier à partir d'un miroir. Sur le site officiel j'ai obtenu le MD5 du fichier intègre. En l'occurrence 6A7CEFF129A4E2FDF36D113BA001D149.

Pour procéder à la vérification automatique, je vais créer un fichier contenant la somme de contrôle attendue, suivie de deux espaces, puis du nom sous lequel est enregistré le fichier à vérifier:

sh$ echo '6A7CEFF129A4E2FDF36D113BA001D149  db-derby-10.5.1.1-bin.zip' > derby.md5
sh$ db-derby-10.5.1.1-bin.zip  derby.md5

Piège:

N'oubliez pas qu'il faut deux espaces entre la somme MD5 et le nom du fichier. Si vous ne mettez qu'un seul espace ou une tabulation, le fichier ne sera pas accepté, et md5sum vous affichera le message:

md5sum: standard input: no properly formatted MD5 checksum lines found

J'utilise maintenant md5sum en mode vérification:

sh$ md5sum --check derby.md5
db-derby-10.5.1.1-bin.zip: OK

Comme vous vous en doutez, le OK signifie que la somme calculée du fichier correspond à celle attendue.

Il est aussi possible de se passer du fichier temporaire derby.md5 en utilisant un pipe:

sh$ echo '6A7CEFF129A4E2FDF36D113BA001D149  db-derby-10.5.1.1-bin.zip' | md5sum --check -
db-derby-10.5.1.1-bin.zip: OK

Quelques remarques pour terminer. Tout d'abord la somme MD5 ne dépend que du contenu du fichier. Pas de son nom:

sh$ mv db-derby-10.5.1.1-bin.zip derby.zip
sh$ echo '6A7CEFF129A4E2FDF36D113BA001D149  derby.zip' | md5sum --check -
derby.zip: OK

Par contre, la moindre modification du fichier est détectée. Ainsi, si j'ajoute un caractère à la fin du fichier:

sh$ echo -n 'x' >> derby.zip
sh$ echo '6A7CEFF129A4E2FDF36D113BA001D149  derby.zip' | md5sum --check -
derby.zip: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match

Bien sûr, si je restaure le fichier la somme de contrôle calculée coïncide à nouveau avec celle attendue:

sh$ head -c -1 derby.zip > derby.restaure
sh$ echo '6A7CEFF129A4E2FDF36D113BA001D149  derby.restaure' | md5sum --check -
derby.restaure: OK

Conclusion et avertissement

Ainsi, comme vous le voyez il est assez simple de calculer – ou vérifier – la somme de contrôle d'un fichier. C'est donc une bonne et fort peu coûteuse habitude que de l'utiliser pour vérifier l'intégrité de fichiers que vous téléchargez.

Mais attention à ne pas prêter à MD5 plus de pouvoirs qu'il n'en a: je l'ai déjà dit plus haut, cette vérification n'a un sens que si vous avez obtenu l'empreinte du fichier que vous voulez vérifier par un moyen absolument fiable.

En outre, des failles ont été trouvées dans l'algorithme MD5 et il est donc possible à un assaillant d'altérer un fichier de telle manière qu'il ait la même empreinte que le fichier original. Pour toutes ces raisons, en environnement sécurisé, l'utilisation de MD5 se bornera à vérifier qu'il n'y a pas eu d'erreur de transmission lors du transfert d'un fichier. Pour tous les autres besoins il faudra vous tourner en complément vers des solutions d'authentification comme PGP. Avec ce système, il vous sera possible de vérifier l'intégrité et l'origine d'un fichier.