Les fonctions de hachage expliquées
Une fonction de hachage transforme n’importe quelle entrée en une empreinte courte de longueur fixe. Ce guide explique à quoi servent MD5, SHA-1 et SHA-256, quelles sont leurs limites et comment comparer un fichier avec une somme de contrôle publiée.
Qu’est-ce qu’un hash ?
Une fonction de hachage cryptographique lit des données de n’importe quelle taille et produit une empreinte (digest) de longueur fixe : 128 bits pour MD5, 160 bits pour SHA-1 et 256 bits pour SHA-256, généralement affichée sous forme de texte hexadécimal. La même entrée donne toujours la même empreinte, et la modification d’un seul bit de l’entrée produit une empreinte très différente. Un hash est à sens unique : on ne peut pas retrouver l’entrée à partir de l’empreinte, sauf en devinant des entrées et en comparant les résultats.
Ce guide fournit des informations générales. Pour les décisions de sécurité, suivez les exigences de votre organisation ou du service avec lequel vous travaillez.
Sommes de contrôle et intégrité
L’usage quotidien le plus courant consiste à vérifier qu’un fichier est arrivé intact. Une page de téléchargement peut publier une valeur SHA-256 à côté du fichier. Après le téléchargement, vous calculez le hash de votre copie et le comparez à la valeur publiée. Si les valeurs correspondent, le fichier est très probablement identique à celui que l’éditeur a haché ; si elles diffèrent, le téléchargement est corrompu ou le fichier est une autre version.
Une somme de contrôle n’est utile que si la valeur publiée est elle-même fiable. Si un attaquant peut modifier à la fois le fichier et la somme de contrôle sur la même page, un hash identique ne prouve pas grand-chose. Les signatures numériques répondent à ce problème.
Pourquoi MD5 et SHA-1 ne conviennent pas à la sécurité
Un hash sûr doit rendre impraticable la découverte de deux entrées différentes ayant la même empreinte (une collision). Des attaques par collision réalisables en pratique ont été publiées pour MD5 comme pour SHA-1 : un attaquant peut donc préparer deux fichiers différents qui partagent le même hash. C’est pourquoi ils ne sont plus considérés comme adaptés aux signatures numériques, aux certificats ni aux autres usages de sécurité.
MD5 et SHA-1 peuvent encore détecter une corruption accidentelle, et certains systèmes anciens les publient. Pour un nouveau projet, SHA-256 ou un autre membre de la famille SHA-2 (SHA-384, SHA-512) est le choix habituel.
| Algorithme | Longueur de l’empreinte | Statut de sécurité |
|---|---|---|
| MD5 | 128 bits (32 caractères hex) | Cassé pour les collisions ; sommes de contrôle historiques uniquement |
| SHA-1 | 160 bits (40 caractères hex) | Cassé pour les collisions ; usage historique |
| SHA-256 | 256 bits (64 caractères hex) | Largement utilisé et recommandé |
| SHA-384 / SHA-512 | 384 / 512 bits | Largement utilisés et recommandés |
Le hachage n’est pas un chiffrement, et les mots de passe exigent davantage
Le chiffrement est réversible avec la bonne clé ; le hachage n’est pas conçu pour être inversé. Un hash ne masque pas pour autant les entrées courtes ou prévisibles : n’importe qui peut hacher des mots courants ou des numéros de téléphone et chercher une correspondance.
C’est pourquoi des hash rapides comme MD5 ou SHA-256 ne conviennent pas, à eux seuls, au stockage des mots de passe. Ils sont conçus pour être rapides, ce qui permet à un attaquant de tester très vite un très grand nombre d’hypothèses. Le stockage des mots de passe repose sur des algorithmes lents et salés conçus à cet effet, comme Argon2, scrypt ou bcrypt. Si vous développez un système de connexion, utilisez une bibliothèque maintenue et les recommandations actuelles pour votre plateforme plutôt qu’un hash généraliste.
Le HMAC pour authentifier les messages
Un simple hash montre si des données ont changé, mais n’importe qui peut le recalculer. Le HMAC (hash-based message authentication code, code d’authentification de message fondé sur un hash) combine les données avec une clé secrète, par exemple HMAC-SHA256. Seule une personne qui connaît la clé peut produire la bonne valeur : le destinataire peut ainsi vérifier qu’un message provient d’un détenteur de la clé et n’a pas été modifié. Les webhooks et la signature des requêtes d’API utilisent couramment le HMAC. Gardez la clé secrète : quiconque la possède peut créer des codes valides.
Pourquoi le même texte donne un hash différent
Un hash est calculé sur des octets, et non sur le texte que vous voyez. Les différences suivantes modifient le résultat :
- Les fins de ligne : Windows utilise CR LF, tandis que Linux et macOS utilisent LF.
- L’encodage des caractères : « é » ne correspond pas aux mêmes octets en UTF-8 et dans des encodages plus anciens.
- Un saut de ligne ou un espace final, ou une marque d’ordre des octets (BOM) au début d’un fichier.
- Les majuscules et minuscules dans l’entrée.
Lorsqu’un hash ne correspond pas, vérifiez d’abord ces points. Hacher le fichier d’origine est généralement plus fiable que hacher du texte copié depuis ce fichier. La sortie hexadécimale elle-même n’est pas sensible à la casse : A1B2 et a1b2 sont la même valeur.
Questions fréquentes
Puis-je déchiffrer un hash MD5 ou SHA-256 ?
Non. Un hash n’est pas une donnée chiffrée. Les services en ligne de « déchiffrement » recherchent des hash précalculés d’entrées courantes, ce qui explique pourquoi les hash de valeurs simples offrent peu de protection.
Quel algorithme utiliser pour vérifier un téléchargement ?
Utilisez celui que fournit l’éditeur. Si plusieurs sont proposés, SHA-256 ou SHA-512 est un meilleur choix que MD5 ou SHA-1.
Le générateur de hash envoie-t-il mon fichier ?
Le générateur de hash de LeedyBox calcule les hash dans votre navigateur : le texte ou le fichier que vous sélectionnez est donc traité sur votre appareil.