Un fichier téléchargé est-il intact ?
Une fonction de hachage transforme n’importe quelles données en une courte suite de caractères, appelée empreinte. Elle sert à vérifier qu’un fichier n’a pas changé d’un seul octet.
Vous téléchargez un logiciel. Le site publie une empreinte à côté du lien. Si la vôtre est la même, le fichier est celui que l’éditeur a mis en ligne.
À la fin de cette leçon
Remarque
Je peux utiliser une empreinte pour vérifier que des données n’ont pas changé.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Fonction de hachage | un calcul qui résume des données en une empreinte | SHA-256 |
| Empreinte | le résultat du calcul : une suite courte de taille fixe | |
| Intégrité | le fait que des données n’ont pas été modifiées | |
| Somme de contrôle | une empreinte publiée pour vérifier un fichier | |
| Collision | deux données différentes qui donnent la même empreinte | |
| Effet d’avalanche | un petit changement qui bouleverse toute l’empreinte |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une empreinte a toujours la même taille
Une fonction de hachage lit des données de n’importe quelle longueur. Elle rend toujours une empreinte de taille fixe. Pour SHA-256, c’est 256 bits, écrits en 64 chiffres hexadécimaux.
Les mêmes données donnent toujours la même empreinte. C’est ce qui permet de comparer.
L’empreinte SHA-256 du mot bonjour
printf 'bonjour' | sha256sumAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Combien de caractères pour une empreinte ?
printf 'bonjour' | sha256sum | cut -d' ' -f1 | wc -cAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un seul caractère change toute l’empreinte
Changez une lettre des données, et l’empreinte devient méconnaissable. On appelle cela l’effet d’avalanche.
Il rend la fonction utile : une modification, même minuscule, se voit tout de suite. Il empêche aussi de deviner les données d’après l’empreinte.
Un r majuscule à la fin
printf 'bonjouR' | sha256sumAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple travaillé : un zéro de plus
| Données | Huit premiers caractères de l’empreinte | Différence |
|---|---|---|
| virement 50 | 45c18b62 | Référence |
| virement 500 | c995af86 | Un seul zéro de plus, et plus rien ne ressemble |
| bonjour | 2cb4b143 | Référence |
| bonjouR | ec75b313 | Une lettre en majuscule, et tout change |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Erreur fréquente
Attention
Beaucoup de gens pensent qu’une empreinte est un message chiffré que l’on peut déchiffrer. C’est faux. Une fonction de hachage ne garde pas les données : elle les résume. Il n’existe aucune clé pour retrouver le texte. On peut seulement deviner des données et comparer les empreintes.
Une collision : même empreinte, données différentes
Il y a bien plus de données possibles que d’empreintes possibles. Deux données différentes ont donc forcément la même empreinte quelque part. C’est une collision.
Une bonne fonction rend les collisions introuvables en pratique. Les anciennes fonctions MD5 et SHA-1 ne tiennent plus cette promesse : n’en choisissez pas une pour un usage de sécurité.
Vérifier une somme de contrôle avec sha256sum
L’éditeur d’un logiciel publie une liste : une empreinte, puis le nom du fichier. Vous calculez l’empreinte du fichier reçu et vous comparez.
L’option -c de sha256sum fait la comparaison pour vous. Elle lit la liste et écrit OK ou FAILED pour chaque fichier. Dans la suite, vous créez une liste puis vous modifiez le fichier.
Créer un petit fichier de notes
printf 'Bonjour\n' > /tmp/note.txtAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Enregistrer son empreinte dans une liste
sha256sum /tmp/note.txt > /tmp/sommes.txtAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Vérifier la liste : tout est intact
sha256sum -c /tmp/sommes.txtAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Changer la première lettre du fichier
printf 'bonjour\n' > /tmp/note.txtAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Vérifier de nouveau : le changement se voit
sha256sum -c /tmp/sommes.txtAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Calculer une empreinte avec Python
import hashlib
texte = "Cours de cryptographie\n"
# encode transforme le texte en octets, que hashlib sait lire
empreinte = hashlib.sha256(texte.encode()).hexdigest()
print(empreinte)
# Changez le texte (ajoutez un point d'exclamation) et relancez.