Sécurité

Les fonctions de hachage simplement : MD5, SHA-1 ou SHA-256 et comment les utiliser

Sommes de contrôle de téléchargement, identifiants de commit Git et adresses de blockchain sont tous des valeurs de hachage. Ce guide explique en quoi le hachage diffère du chiffrement et quel algorithme choisir selon l'usage.

Qu'est-ce qu'une fonction de hachage ?

Une fonction de hachage prend une entrée de n'importe quelle longueur et produit une courte valeur de longueur fixe, appelée hachage ou empreinte. Que vous hachiez un mot ou une vidéo de plusieurs gigaoctets, SHA-256 produit toujours 256 bits, soit 64 caractères hexadécimaux.

Point essentiel : le hachage est à sens unique. Il est impossible de calculer l'entrée d'origine à partir du hachage. C'est la différence fondamentale avec le chiffrement, réversible avec une clé, et avec Base64, que tout le monde peut inverser.

Trois propriétés d'un bon hachage

Une fonction de hachage cryptographique utilisée pour la sécurité doit remplir les conditions suivantes.

  • Déterminisme : une même entrée produit toujours le même hachage.
  • Effet avalanche : modifier un seul caractère change complètement le résultat, comme le montre l'exemple ci-dessous avec hello et hello!.
  • Résistance aux collisions : il doit être pratiquement impossible de trouver deux entrées différentes ayant le même hachage.
SHA-256("hello")  = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("hello!") = ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b
MD5("hello")      = 5d41402abc4b2a76b9719d911017c592

La casse compte aussi : Hello et hello produisent des hachages sans rapport. Avant de comparer des hachages, vérifiez que les entrées sont strictement identiques, espaces, sauts de ligne et majuscules compris.

MD5, SHA-1 et SHA-256 comparés

MD5 produit une empreinte de 128 bits (32 caractères hexadécimaux). Il est rapide, mais des attaques par collision pratiques sont connues depuis 2004 : il ne doit pas être utilisé pour la sécurité. Il reste acceptable comme simple somme de contrôle contre une corruption accidentelle.

SHA-1 produit 160 bits. En 2017, des chercheurs de Google et du CWI ont publié deux fichiers PDF différents ayant le même hachage SHA-1 (SHAttered), mettant fin à son usage pour la sécurité. Les navigateurs et les autorités de certification ne font plus confiance aux certificats SHA-1.

SHA-256 appartient à la famille SHA-2 et produit 256 bits. C'est le standard de fait pour les sommes de contrôle logicielles, les certificats TLS et les blockchains. Pour un nouveau système, SHA-256 ou plus fort est le choix par défaut.

Vérifier des fichiers avec une somme de contrôle

Les pages de téléchargement indiquent souvent une valeur SHA-256 à côté du fichier. Calculez le hachage du fichier téléchargé et comparez : si un seul bit a changé pendant le transfert ou a été altéré, le hachage sera complètement différent.

Si la somme de contrôle est hébergée sur le même serveur que le fichier, un attaquant pourrait remplacer les deux. C'est pourquoi les logiciels importants signent le fichier de sommes avec GPG ou le publient par un canal HTTPS distinct.

Pourquoi SHA-256 seul ne convient pas aux mots de passe

Puisque le hachage est à sens unique, stocker les mots de passe en SHA-256 semble sûr, mais ce n'est pas le cas. SHA-256 est conçu pour être rapide, et un seul GPU peut calculer des milliards de hachages par seconde. Un attaquant qui vole une liste de hachages peut tester les mots de passe courants à une vitesse énorme.

Utilisez des fonctions dédiées et volontairement lentes comme bcrypt, scrypt ou Argon2. Elles intègrent un sel aléatoire unique à chaque mot de passe, de sorte que des mots de passe identiques donnent des valeurs stockées différentes, ce qui neutralise aussi les tables arc-en-ciel précalculées.

Hachage, HMAC ou chiffrement ?

Utilisez le générateur de hachage d'AIBIZAP pour soumettre une même phrase à plusieurs algorithmes et voir à quel point le résultat change quand vous modifiez un seul caractère. Si vous devez cacher des données et les récupérer ensuite, essayez le testeur de chiffrement AES.

  • Vérifier que des données n'ont pas changé : un hachage SHA-256.
  • Vérifier qu'un message vient d'une personne qui détient un secret partagé : HMAC-SHA256 (signatures de webhooks et de requêtes d'API).
  • Stocker des mots de passe : bcrypt, scrypt ou Argon2.
  • Cacher des données et les relire plus tard : un chiffrement comme AES-GCM.

Essayez avec ces outils

Autres guides

Tous les guides