Une empreinte pour les données
Une fonction de hachage prend n’importe quelle entrée (un mot, un document, une vidéo de 4 Go) et en fait une courte chaîne de longueur fixe, le hash, aussi appelé empreinte ou somme de contrôle. La même entrée donne toujours le même hash, et le moindre changement en donne un complètement différent :
| Entrée | Hash SHA-256 |
hello | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
Hello | 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 |
hello! | ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b |
Une majuscule ou un point d’exclamation change chaque caractère du résultat. Essayez dans le Générateur de hash.
Ce qui fait une bonne fonction de hachage
- Déterministe : la même entrée donne le même hash sur tous les ordinateurs.
- À sens unique : on ne peut pas remonter du hash à l’entrée.
- Résistante aux collisions : il doit être pratiquement impossible de trouver deux entrées différentes avec le même hash.
- Rapide à calculer pour les sommes de contrôle, ce qui est utile, et c’est aussi la raison pour laquelle les hash rapides ne conviennent pas aux mots de passe (voir plus bas).
Hacher n’est pas chiffrer
Le chiffrement fonctionne dans les deux sens : avec la clé, on récupère l’original. Un hash n’a pas de clé et ne peut pas être inversé. Il montre seulement si quelque chose correspond. Le Base64 est encore autre chose : un simple encodage que tout le monde peut décoder.
Les algorithmes courants
| Algorithme | Longueur | Statut |
| MD5 | 128 bits (32 caractères hex) | Cassé depuis 2004 ; seulement pour les corruptions accidentelles |
| SHA-1 | 160 bits (40 caractères hex) | Cassé : la première vraie collision a été publiée en 2017 |
| SHA-256 | 256 bits (64 caractères hex) | Sûr ; le choix standard aujourd’hui |
| SHA-512 | 512 bits (128 caractères hex) | Sûr ; souvent plus rapide que SHA-256 sur les ordinateurs 64 bits |
Voici le mot hello dans chacun :
- MD5 :
5d41402abc4b2a76b9719d911017c592 - SHA-1 :
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d - SHA-256 :
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Ce que « cassé » veut dire pour MD5 et SHA-1
Avec MD5 et SHA-1, des chercheurs savent créer volontairement deux fichiers différents avec le même hash. Un attaquant pourrait ainsi remplacer un fichier inoffensif par un fichier malveillant avec la même somme de contrôle, ou falsifier un document signé. Aucun des deux n’est réversible, et une corruption accidentelle change toujours le hash : une somme de contrôle MD5 repère donc encore un téléchargement interrompu. Elle ne peut simplement pas prouver que personne n’a trafiqué le fichier.
SHA-256 et SHA-512 font partie de la famille SHA-2, publiée en 2001, et aucune attaque pratique contre eux n’est connue. SHA-3, normalisé en 2015, est une conception différente, prête en réserve.
Où les hash sont utilisés
- Vérifier des téléchargements : les développeurs publient le SHA-256 de leurs fichiers ; si le vôtre correspond, le fichier est identique. Voir Vérifier une somme de contrôle.
- Signatures numériques et certificats HTTPS : le document ou le certificat est haché, et c’est le hash qui est signé.
- Git : chaque commit et chaque fichier est identifié par son hash. Git utilise depuis longtemps SHA-1 et prend désormais aussi en charge SHA-256.
- Bitcoin et autres blockchains : les blocs sont chaînés avec SHA-256.
- Trouver des fichiers en double : deux fichiers qui ont le même SHA-256 sont le même fichier.
Les hash et les mots de passe
Les sites ne devraient jamais stocker votre mot de passe, seulement un hash de celui-ci ; à la connexion, ils hachent ce que vous tapez et comparent. SHA-256 n’est pourtant pas le bon outil pour cela : il est si rapide qu’un attaquant disposant d’une base de données divulguée peut faire des milliards d’essais par seconde. Les mots de passe demandent un hachage lent avec sel, conçu pour cela, comme bcrypt, scrypt ou Argon2. Un sel est une valeur aléatoire ajoutée à chaque mot de passe avant le hachage, pour que deux personnes avec le même mot de passe aient des hash différents.
Essayer
Le Générateur de hash calcule en même temps MD5, SHA-1, SHA-256, SHA-384 et SHA-512 de n’importe quel texte ou fichier, dans votre navigateur, et les compare à une somme de contrôle publiée.