Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Fonction de hachage et empreinte

Après cette leçon: Je peux utiliser une empreinte pour vérifier que des données n’ont pas changé.

Leçon de 50 min8 commandesLab Linux du quotidien : la trentaine de commandes que les ingénieurs tapent de tête

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

MotCe que ça veut direExemple
Fonction de hachageun calcul qui résume des données en une empreinteSHA-256
Empreintele 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ôleune empreinte publiée pour vérifier un fichier
Collisiondeux données différentes qui donnent la même empreinte
Effet d’avalancheun 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

Commande
printf 'bonjour' | sha256sum

Affiché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 ?

Commande
printf 'bonjour' | sha256sum | cut -d' ' -f1 | wc -c

Affiché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

Commande
printf 'bonjouR' | sha256sum

Affiché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éesHuit premiers caractères de l’empreinteDifférence
virement 5045c18b62Référence
virement 500c995af86Un seul zéro de plus, et plus rien ne ressemble
bonjour2cb4b143Référence
bonjouRec75b313Une 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

Commande
printf 'Bonjour\n' > /tmp/note.txt

Affiché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

Commande
sha256sum /tmp/note.txt > /tmp/sommes.txt

Affiché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

Commande
sha256sum -c /tmp/sommes.txt

Affiché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

Commande
printf 'bonjour\n' > /tmp/note.txt

Affiché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

Commande
sha256sum -c /tmp/sommes.txt

Affiché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

Code: 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.

À propos de ce labo et de sa source: Lab Linux du quotidien : la trentaine de commandes que les ingénieurs tapent de tête

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.