Le hachage expliqué : SHA-256, sommes de contrôle et mots de passe

Mis à jour :

Une fonction de hachage transforme n’importe quelle entrée — un mot, un mot de passe, un fichier de 4 Go — en une courte empreinte de longueur fixe. La même entrée donne toujours la même empreinte, et la moindre modification en donne une complètement différente. C’est pourquoi le hachage est la méthode de référence pour vérifier qu’un fichier est arrivé intact, pour stocker des mots de passe sans conserver les mots de passe eux-mêmes et pour signer des messages. Ce guide explique ce qui rend une fonction de hachage sûre, quels algorithmes le sont encore, comment vérifier un téléchargement et pourquoi le hachage rapide qui convient à un fichier est le mauvais choix pour un mot de passe.

Ce que fait une fonction de hachage

Une fonction de hachage lit des données de n’importe quelle longueur et renvoie une empreinte (digest) de longueur fixe. SHA-256, la plus répandue aujourd’hui, renvoie toujours 256 bits, écrits sous la forme de 64 caractères hexadécimaux, que l’entrée soit une seule lettre ou l’image d’un disque entier.

Toute fonction de hachage est déterministe — la même entrée donne la même empreinte sur n’importe quel ordinateur — et rapide à calculer. Une fonction de hachage cryptographique y ajoute les garanties décrites dans la section suivante, et ce sont elles qui permettent de l’utiliser pour la sécurité.

Une empreinte n’est pas une copie compressée : 64 caractères ne peuvent pas contenir un fichier de 4 Go. En théorie, de nombreuses entrées partagent chaque empreinte ; une fonction de hachage sûre fait simplement qu’il est impossible, en pratique, de les trouver.

Ouvrir le générateur de hachage

Ce qui rend une fonction de hachage sûre

La norme américaine qui définit SHA-256, FIPS 180-4, qualifie ces algorithmes de sûrs parce que certaines recherches sont irréalisables en temps de calcul. En pratique, cela recouvre trois propriétés :

La résistance aux collisions est la première à céder, car l’attaquant contrôle les deux entrées. C’est ce qui est arrivé à MD5 et à SHA-1. Ce n’est pas un détail : les signatures numériques et les certificats sont calculés sur une empreinte du document, si bien que deux documents ayant la même empreinte partagent la même signature.

MD5, SHA-1, SHA-2 et SHA-3

AlgorithmeEmpreinteStatut
MD5128 bits, 32 caractères hexadécimauxCassé : les collisions sont réalisables en pratique. Le RFC 6151 (2011) l’exclut partout où la résistance aux collisions est requise, comme pour les signatures numériques.
SHA-1160 bits, 40 caractères hexadécimauxCassé : première collision publique en 2017. Selon le NIST, il doit être abandonné progressivement d’ici le 31 décembre 2030.
SHA-256256 bits, 64 caractères hexadécimauxSûr. Fait partie de la famille SHA-2 (FIPS 180-4) ; c’est le choix par défaut habituel aujourd’hui.
SHA-384, SHA-512384 et 512 bits, 96 et 128 caractères hexadécimauxSûrs. Appartiennent aussi à SHA-2, avec une empreinte plus longue.
SHA-3224 à 512 bits, selon la varianteSûr. Normalisé en 2015 (FIPS 202) sur une conception différente, Keccak, pour compléter SHA-2 et non pour le remplacer.

La collision SHA-1, baptisée SHAttered, a été annoncée par Google et le CWI Amsterdam le 23 février 2017 : deux fichiers PDF différents ayant la même empreinte SHA-1, trouvés au prix d’environ 9,2 milliards de milliards de calculs SHA-1. Depuis, MD5 et SHA-1, employés comme simples fonctions de hachage, ne servent plus qu’à des vérifications rapides contre les dégradations accidentelles. La documentation de Microsoft sur la commande Windows de hachage de fichiers dit la même chose : ne les utiliser que pour une simple détection de modifications, jamais pour des fichiers qui doivent être protégés contre toute falsification.

Le générateur de hachage nTools propose SHA-256, SHA-384 et SHA-512. Il s’appuie sur l’API Web Crypto intégrée au navigateur, qui prend aussi en charge SHA-1 — en avertissant de ne pas l’utiliser à des fins cryptographiques — et ne propose pas du tout MD5.

Vérifier un téléchargement

Les éditeurs de logiciels indiquent souvent une somme de contrôle (checksum) à côté du fichier, généralement en SHA-256. Après le téléchargement, vous calculez l’empreinte de votre copie et vous comparez.

  1. Notez l’algorithme utilisé par l’éditeur et copiez la somme de contrôle publiée.
  2. Calculez l’empreinte du fichier téléchargé avec le même algorithme : dans le générateur de hachage nTools pour les fichiers jusqu’à 200 Mo, ou avec une commande comme celles ci-dessous, quelle que soit la taille.
  3. Comparez chaque caractère, pas seulement les premiers et les derniers. En hexadécimal, majuscules et minuscules sont équivalentes.

Une correspondance prouve que le fichier est bien celui qui a été haché ; elle ne prouve pas qui l’a haché. Un attaquant capable de remplacer le fichier sur un site peut généralement remplacer aussi la somme de contrôle sur la même page. C’est pourquoi des projets comme Ubuntu signent également leur liste de sommes de contrôle : vous vérifiez d’abord la signature avec GPG, puis le fichier par rapport à la liste. Une fois l’empreinte de la clé de signature vérifiée sur le site du projet lui-même, le résultat reste valable même si vous avez téléchargé le fichier depuis un miroir non fiable.

Hachage, chiffrement et encodage

MéthodeRéversible ?Clé ?Usage
Hachage (par ex. SHA-256)NonNonVérifier l’intégrité, identifier des données, stocker des mots de passe avec un algorithme lent
Chiffrement (par ex. AES)Oui, avec la cléOuiGarder des données secrètes
Encodage (par ex. Base64)Oui, par n’importe quiNonTransporter des données binaires sous forme de texte, dans les e-mails, les URL et le JSON

Base64 et l’encodage d’URL ne protègent rien : ils changent la manière dont les données sont écrites, pas qui peut les lire. Les mots de passe chiffrés sont par ailleurs moins sûrs que les mots de passe hachés, avertit l’OWASP : le chiffrement est réversible, donc quiconque peut déchiffrer récupère les mots de passe d’origine. Il ne se justifie que dans les rares cas où l’original doit pouvoir être retrouvé.

Pourquoi un hachage rapide ne convient pas aux mots de passe

Un site ne devrait jamais stocker votre mot de passe, seulement son empreinte : à la connexion, il hache ce que vous tapez et compare le résultat. Le problème, c’est la vitesse. Une fonction de hachage qui vérifie un téléchargement de 4 Go en quelques secondes permet à quiconque vole la base de données de tester des milliards de candidats par seconde.

AlgorithmeTentatives par seconde, une RTX 4090Temps pour essayer tous les mots de passe de 8 caractères (minuscules et chiffres)
MD5164 milliards17 secondes
SHA-151 milliards56 secondes
SHA-25622 milliards2 minutes
SHA-5127,5 milliards6 minutes
PBKDF2-HMAC-SHA256, 600 000 itérationsenviron 15 000environ 6 ans
bcrypt, coût 10environ 5 750environ 15 ans

Vitesses tirées du benchmark hashcat 6.2.6 sur une seule carte graphique NVIDIA RTX 4090. Les deux dernières lignes sont extrapolées à partir des réglages propres au benchmark (999 itérations PBKDF2, bcrypt avec un coût de 5), car le temps croît proportionnellement au travail. La recherche couvre les 36⁸ candidats, soit environ 2 800 milliards. Les attaques réelles sont encore plus rapides : elles utilisent de nombreuses cartes à la fois et essaient d’abord les mots de passe les plus probables.

Le sel : même mot de passe, empreinte différente

Sans sel, toutes les personnes dont le mot de passe est 123456 ont la même empreinte stockée, et les attaquants conservent des tables contenant les empreintes de millions de mots de passe courants : les retrouver devient une simple consultation, et non une recherche.

Un sel est une valeur aléatoire créée pour chaque mot de passe, stockée à côté de son empreinte et intégrée au calcul de celle-ci. Il n’est pas secret. Son rôle est de rendre chaque empreinte stockée unique : les tables précalculées deviennent inutiles, et chaque compte doit être attaqué séparément.

Le NIST SP 800-63B-4 exige que les mots de passe soient salés et hachés avec un schéma de hachage de mots de passe adapté et un sel d’au moins 32 bits, et recommande un facteur de coût aussi élevé que possible en pratique. Il recommande aussi une étape supplémentaire avec une clé secrète stockée à l’écart des empreintes, idéalement dans un module de sécurité matériel. L’OWASP appelle ce secret un « poivre » (pepper).

Que faut-il utiliser à la place ?

Les fonctions de hachage de mots de passe sont volontairement lentes, prennent le sel en entrée et disposent d’un paramètre de coût qu’il faut augmenter à mesure que le matériel gagne en rapidité. L’aide-mémoire de l’OWASP sur le stockage des mots de passe (Password Storage Cheat Sheet) fixe ces minimums :

AlgorithmeRéglages minimauxQuand l’utiliser
Argon2id19 Mio de mémoire, 2 itérations, parallélisme 1Premier choix. Chaque tentative exige de la mémoire, ce qui réduit l’avantage des cartes graphiques. Spécifié dans le RFC 9106 (2021).
scryptN = 2¹⁷, r = 8, p = 1Si Argon2id n’est pas disponible. Exige aussi de la mémoire.
bcryptCoût 10 ou plusSystèmes plus anciens. La plupart des implémentations acceptent au plus 72 octets de mot de passe ; au-delà, le mot de passe est tronqué ou refusé.
PBKDF2-HMAC-SHA256600 000 itérationsLorsque la conformité FIPS-140 est exigée.

Ce sont des minimums, conçus pour qu’une connexion ne prenne qu’une fraction de seconde sur le serveur tout en rendant chaque tentative coûteuse. Vous ne pouvez pas savoir lequel un site utilise : c’est pourquoi les conseils du guide sur les mots de passe — longs, aléatoires et jamais réutilisés — partent du pire des cas.

HMAC : un hachage avec une clé

Une empreinte simple montre que des données n’ont pas changé, mais n’importe qui peut la calculer : celui qui modifie les données peut tout simplement recalculer l’empreinte. HMAC, défini dans le RFC 2104 en 1997, intègre une clé secrète au hachage, de sorte que seule une personne possédant la clé peut produire ou vérifier le résultat.

C’est ainsi que les API signent leurs requêtes, que les webhooks prouvent qu’ils viennent bien de l’expéditeur, et que de nombreux JSON Web Tokens sont signés : l’algorithme JWT HS256 n’est autre que HMAC avec SHA-256.

Questions fréquentes

Peut-on inverser une empreinte ?

Non. L’empreinte ne contient pas l’entrée : il n’y a donc rien à décoder. Ce que font les attaquants, c’est deviner : ils hachent des candidats jusqu’à ce que l’un d’eux corresponde. Cela fonctionne pour des entrées courtes ou courantes, comme les mots de passe, et échoue pour des entrées longues et aléatoires.

MD5 sert-il encore à quelque chose ?

Pour repérer des modifications accidentelles, comme une copie corrompue ou un fichier en double, oui. Pas là où quelqu’un pourrait falsifier les données délibérément, et jamais pour des mots de passe ou des signatures.

Deux fichiers peuvent-ils avoir la même empreinte SHA-256 ?

En théorie, oui : il existe plus de fichiers possibles que d’empreintes. En pratique, aucune collision n’a jamais été trouvée pour SHA-256 complet, et une recherche par force brute demanderait de l’ordre de 2¹²⁸ tentatives.

Une empreinte plus longue est-elle toujours plus sûre ?

Jusqu’à un certain point seulement. Avec 256 bits, une recherche de collision est déjà largement hors de portée ; la solidité de l’algorithme compte davantage, comme l’a montré SHA-1. SHA-384 et SHA-512 sont utilisés lorsqu’une règle les impose ou pour disposer d’une marge supplémentaire.

Mon fichier est-il envoyé en ligne quand je le hache sur nTools ?

Non. Le fichier est lu et haché dans votre navigateur, et seule l’empreinte est affichée.

Partie précédente ← La robustesse des mots de passe expliquée : longueur, entropie et phrases de passe

Références

  1. NIST FIPS 180-4 — Secure Hash Standard (SHS) (August 2015)
  2. NIST FIPS 202 — SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions (August 2015)
  3. RFC 6151 — Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms (March 2011)
  4. NIST — NIST Retires SHA-1 Cryptographic Algorithm (December 2022)
  5. EFF — Cryptographers Demonstrate Collision in Popular SHA-1 Algorithm (February 2017)
  6. MDN Web Docs — SubtleCrypto: digest() method
  7. Microsoft Learn — Get-FileHash
  8. Ubuntu — How to verify your Ubuntu download
  9. hashcat v6.2.6 benchmark, NVIDIA GeForce RTX 4090
  10. NIST SP 800-63B-4 — Authenticators: password verifiers (July 2025)
  11. OWASP — Password Storage Cheat Sheet
  12. RFC 9106 — Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications (September 2021)
  13. RFC 2104 — HMAC: Keyed-Hashing for Message Authentication (February 1997)
  14. RFC 7518 — JSON Web Algorithms (JWA) (May 2015)

Guides associés