Si vous avez déjà téléchargé un logiciel et vu une chaîne comme e3b0c44298fc1c149afbf4c8996fb924… à côté du lien, c'était un hash (ou empreinte). Les hashes sont partout : dans Git, dans les signatures d'API, dans les clés de cache, dans les mots de passe… Mais ils ne servent pas tous à la même chose, et choisir le mauvais peut ouvrir une faille de sécurité.
Qu'est-ce qu'une fonction de hachage ?
Une fonction de hachage prend un texte ou un fichier de n'importe quelle taille et renvoie une empreinte de taille fixe. Elle a trois propriétés essentielles :
- Déterministe : la même entrée donne toujours la même empreinte.
- Effet avalanche : modifier un seul caractère change complètement l'empreinte.
- À sens unique : impossible de reconstruire l'entrée à partir de l'empreinte.
Par exemple, le SHA-256 de bonjour et celui de Bonjour n'ont rien en commun, alors qu'une seule majuscule change. Essayez avec le générateur de hash : il calcule MD5, SHA-1 et SHA-256 en même temps, dans votre navigateur.
Les trois fonctions face à face
| MD5 | SHA-1 | SHA-256 | |
|---|---|---|---|
| Taille | 128 bits (32 caractères hex) | 160 bits (40 hex) | 256 bits (64 hex) |
| Année | 1992 | 1995 | 2001 |
| Collisions pratiques | Oui, depuis 2004 | Oui, depuis 2017 | Aucune connue |
| Sûr aujourd'hui ? | Non | Non | Oui |
Une collision, c'est trouver deux entrées différentes ayant la même empreinte. Avec MD5, on peut en produire en quelques secondes sur un ordinateur ordinaire ; pour SHA-1, Google et le CWI ont publié en 2017 la première collision pratique (l'attaque « SHAttered ») : deux PDF différents avec la même empreinte. Aucune n'est connue pour SHA-256.
À quoi sert chacun aujourd'hui
MD5 : contre les accidents, jamais contre les attaquants
MD5 reste utile pour vérifier qu'un fichier n'a pas été corrompu par accident (un téléchargement incomplet, un disque défaillant), ou pour générer des clés de cache et dédupliquer des données. Il est rapide et disponible partout. Ce qu'il ne faut pas faire : se fier à MD5 quand quelqu'un pourrait modifier le fichier volontairement. Un attaquant peut fabriquer un autre fichier avec la même empreinte.
SHA-1 : en voie de disparition
Git a longtemps utilisé SHA-1 pour identifier les commits et migre vers SHA-256. Les certificats TLS signés en SHA-1 ne sont plus acceptés depuis longtemps. Si vous le trouvez dans un système ancien, planifiez la migration ; ne le choisissez pour rien de nouveau.
SHA-256 : le choix par défaut
C'est aujourd'hui la norme pour vérifier des téléchargements, signer des données, calculer l'empreinte d'un certificat ou identifier un contenu de manière unique. Si vous avez besoin « d'un hash » sans savoir lequel, prenez SHA-256.
L'erreur la plus grave : s'en servir pour les mots de passe
Ni MD5, ni SHA-1, ni même SHA-256 ne conviennent pour stocker des mots de passe. Le problème n'est pas qu'on puisse les « déchiffrer », mais qu'ils sont trop rapides : une carte graphique récente calcule des milliards d'empreintes par seconde, donc tester tous les mots de passe courants contre une base volée prend quelques minutes. De plus, sans « sel », deux utilisateurs ayant le même mot de passe ont la même empreinte, et il existe des tables précalculées (rainbow tables) contenant des millions d'empreintes de mots de passe courants.
Pour les mots de passe, on utilise des fonctions volontairement lentes et salées :
- Argon2id (la recommandation actuelle de l'OWASP)
- bcrypt
- scrypt
- PBKDF2 avec de nombreuses itérations, si vous devez respecter FIPS
Et la meilleure défense commence par le mot de passe lui-même : un mot de passe long et aléatoire, comme ceux du générateur de mots de passe, résiste même si l'empreinte fuite.
Hacher n'est pas chiffrer (ni encoder en Base64)
Trois notions souvent confondues :
- Hachage : à sens unique. Impossible de revenir en arrière.
- Chiffrement : dans les deux sens, avec une clé. Qui a la clé retrouve l'original.
- Encodage (Base64) : dans les deux sens, sans clé. N'importe qui peut le décoder ; seul le format change. Vous pouvez le vérifier avec l'encodeur Base64.
Pour vérifier qu'un message vient bien de son expéditeur (un webhook, par exemple), un simple hash ne suffit pas : il faut un HMAC, qui combine l'empreinte avec une clé secrète. Le générateur HMAC calcule des signatures HMAC-SHA256 pour vérifier ces intégrations.
En résumé
- Vérifier qu'un téléchargement n'est pas corrompu ? SHA-256 (ou MD5 si c'est tout ce que publie l'éditeur).
- Clé de cache ou déduplication interne ? MD5 ou SHA-256, peu importe.
- Signer ou vérifier des messages entre systèmes ? HMAC-SHA256.
- Stocker des mots de passe ? Argon2id ou bcrypt. Jamais MD5, SHA-1 ou SHA-256 seuls.

