Fonctionnement des fonctions de hachage cryptographiques : MD5 vs SHA-256 vs SHA-512
Découvrez le fonctionnement des fonctions de hachage cryptographiques, de MD5 à SHA-256 et SHA-512. Couvre l'effet avalanche, les attaques par collision, le hachage de mots de passe avec bcrypt/Argon2, l'authentification HMAC et les usages réels dans la blockchain, TLS et Git.
Une fonction de hachage cryptographique prend n'importe quelle entrée, un seul caractère, un fichier de 10 Go, une chaîne vide, et produit une sortie de longueur fixe appelée hachage (aussi appelée digest, somme de contrôle ou empreinte). La même entrée produit toujours le même hachage, mais modifier un seul bit dans l'entrée produit une sortie complètement différente. Cette propriété à sens unique fait des fonctions de hachage un fondement de la sécurité informatique moderne, du stockage des mots de passe et des signatures numériques jusqu'à la blockchain et la vérification d'intégrité des fichiers.
Si vous devez générer un hachage maintenant, utilisez notre générateur de hachage en ligne gratuit : il calcule les hachages MD5, SHA-1, SHA-256, SHA-384 et SHA-512 pour le texte et les fichiers entièrement dans votre navigateur.
Qu'est-ce qu'une fonction de hachage cryptographique ?
Une fonction de hachage est un algorithme mathématique qui associe des données de taille arbitraire à une sortie de taille fixe. Une fonction de hachage cryptographique est une fonction de hachage qui satisfait des exigences de sécurité supplémentaires, ce qui la rend adaptée aux protocoles de sécurité.
Le concept remonte aux années 1950, lorsque Hans Peter Luhn, chez IBM, a créé l'algorithme de Luhn pour la détection d'erreurs. Les fonctions de hachage cryptographiques modernes sont apparues dans les années 1990 avec MD4 (1990) et MD5 (1991) de Ronald Rivest, suivies de SHA-0 (1993) et SHA-1 (1995) de la NSA, puis de la famille SHA-2 (2001), qui inclut SHA-256 et SHA-512.
Les cinq propriétés d'une fonction de hachage sûre
Toute fonction de hachage cryptographique doit satisfaire cinq propriétés essentielles :
1. Déterministe
La même entrée produit toujours la même sortie. Si vous hachez "hello" avec SHA-256 aujourd'hui, demain ou sur n'importe quel ordinateur du monde, vous obtiendrez toujours 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824. Cette propriété rend les fonctions de hachage utiles pour la vérification.
2. Calcul rapide
Le calcul du hachage de n'importe quelle entrée doit être efficace. SHA-256 peut traiter plusieurs centaines de mégaoctets par seconde sur du matériel moderne. Cette vitesse est essentielle pour des applications comme TLS (où chaque paquet est authentifié) et le minage de blockchain (où des milliards de hachages par seconde sont calculés).
3. Résistance à la préimage (sens unique)
Étant donné une sortie de hachage, il doit être informatiquement irréalisable de trouver une entrée qui produit ce hachage. C'est ce qui rend le hachage "à sens unique". Si un attaquant obtient un hachage de mot de passe comme 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8, il ne peut pas reconstruire directement le mot de passe original "password" (même s'il peut essayer de deviner des mots de passe courants, ce qui explique l'usage du salage et des fonctions spécialisées de hachage de mots de passe).
4. Résistance aux collisions
Il doit être informatiquement irréalisable de trouver deux entrées différentes qui produisent la même sortie de hachage. Comme les fonctions de hachage associent un espace d'entrée infini à un espace de sortie fini, les collisions existent nécessairement d'un point de vue mathématique (principe des tiroirs). La garantie de sécurité est que trouver une collision devrait prendre plus longtemps que la durée d'utilisation attendue de l'algorithme.
Pour SHA-256 et sa sortie de 256 bits, trouver une collision par force brute nécessite environ 2^128 opérations (borne de l'attaque des anniversaires), soit plus d'opérations qu'il n'y a d'atomes dans l'univers observable.
5. Effet avalanche
Une petite modification de l'entrée doit produire un hachage radicalement différent. On parle parfois d'"effet avalanche" ou de "diffusion". Voici un exemple concret avec SHA-256 :
| Entrée | Hachage SHA-256 |
|---|---|
| hello | 2cf24dba5fb0a30e26e83b2ac5b9e29e... |
| Hello | 185f8db32271fe25f561a6fc938b2e26... |
| hello! | ce06092fb948d9ffac7d1a376e404b26... |
Changer un seul caractère (le 'h' minuscule en 'H' majuscule) change chaque caractère de la sortie de hachage. Il n'existe aucun moyen de prédire comment le hachage changera, ni de remonter du hachage vers l'entrée.
Fonctionnement interne des fonctions de hachage
Même si les détails internes complets sont complexes, le processus de base suit un motif commun à la plupart des algorithmes de hachage :
Étape 1 : remplissage. L'entrée est complétée pour atteindre un multiple de la taille de bloc de l'algorithme (512 bits pour MD5/SHA-1/SHA-256, 1024 bits pour SHA-512). Le remplissage inclut la longueur du message original.
Étape 2 : initialisation. Un état interne est initialisé avec des constantes fixes (les "valeurs de hachage initiales"). Pour SHA-256, elles sont dérivées des parties fractionnaires des racines carrées des 8 premiers nombres premiers.
Étape 3 : compression. Chaque bloc de l'entrée remplie est traité par une fonction de compression qui met à jour l'état interne. Cette fonction implique généralement des opérations bit à bit (AND, OR, XOR, rotations), des additions modulaires et un ordonnancement des messages. SHA-256 effectue 64 tours de compression par bloc ; SHA-512 en effectue 80.
Étape 4 : finalisation. Une fois tous les blocs traités, l'état interne final est émis comme valeur de hachage.
La sécurité de l'algorithme dépend de la capacité de la fonction de compression à faire dépendre chaque bit de sortie de chaque bit d'entrée d'une manière complexe et non linéaire.
MD5 : histoire, vulnérabilités et usage actuel
MD5 (Message Digest Algorithm 5) a été conçu par Ronald Rivest en 1991 comme successeur de MD4. Il produit un hachage de 128 bits (32 caractères hexadécimaux) et a été l'algorithme de hachage dominant pendant les années 1990 et le début des années 2000.
La chute de MD5
- 1996 : Hans Dobbertin découvre des collisions dans la fonction de compression de MD5, suscitant les premières inquiétudes.
- 2004 : Xiaoyun Wang et ses collègues démontrent la première attaque par collision pratique, en trouvant deux entrées différentes avec le même hachage MD5 en environ une heure.
- 2006 : Vlastimil Klima publie une méthode pour trouver des collisions MD5 en une minute sur un ordinateur portable.
- 2008 : Alexander Sotirov et d'autres utilisent une collision MD5 pour forger un certificat d'autorité de certification frauduleux, permettant l'interception HTTPS. C'est la preuve définitive que MD5 est dangereux en pratique.
- 2012 : le malware Flame (attribué à des acteurs étatiques) utilise une collision MD5 pour forger des certificats Windows Update.
Aujourd'hui, les attaques par collision contre MD5 peuvent être réalisées en quelques secondes sur du matériel grand public.
Quand MD5 reste acceptable
Malgré son échec cryptographique, MD5 reste utilisé pour des objectifs non liés à la sécurité :
- Sommes de contrôle non malveillantes de fichiers : vérifier qu'un téléchargement n'a pas été corrompu pendant le transfert (pas qu'il n'a pas été altéré volontairement)
- Déduplication de données : identifier les fichiers dupliqués dans les systèmes de stockage
- Clés de cache : générer des identifiants courts et uniques pour des données mises en cache
- Distribution de tables de hachage : répartir des clés entre les buckets d'une table de hachage
- Compatibilité avec les systèmes hérités : interagir avec d'anciens systèmes qui ne prennent en charge que MD5
La distinction clé : si un attaquant peut tirer profit de la création d'une collision, n'utilisez pas MD5. Si vous avez seulement besoin d'une somme de contrôle rapide pour une vérification d'intégrité non adversariale, MD5 convient.
SHA-1 : le compromis désormais obsolète
SHA-1 (Secure Hash Algorithm 1) a été publié par la NSA en 1995 et produit un hachage de 160 bits (40 caractères hexadécimaux). Il a été la fonction de hachage la plus utilisée pendant plus d'une décennie, alimentant les certificats SSL/TLS, les commits Git et la signature de code.
Le déclin de SHA-1
- 2005 : des attaques théoriques par collision montrent que SHA-1 est plus faible que prévu.
- 2017 : Google et CWI Amsterdam démontrent la première collision SHA-1 pratique ("SHAttered"), en trouvant deux fichiers PDF différents avec le même hachage SHA-1. L'attaque a nécessité 6 500 années de calcul CPU et 110 années de calcul GPU, coûteuse mais faisable pour des attaquants bien financés.
- 2020 : une attaque par collision à préfixe choisi réduit le coût à environ 45 000 $, le rendant accessible à de plus petites organisations.
SHA-1 aujourd'hui
- Déprécié par tous les grands navigateurs pour les certificats TLS (depuis 2017)
- Git utilise encore SHA-1 pour les hachages de commits, mais migre activement vers SHA-256 (format d'objet de hachage git v2)
- Ne doit pas être utilisé dans de nouvelles applications de sécurité
SHA-256 et SHA-512 : le standard actuel
SHA-256 et SHA-512 font partie de la famille SHA-2, publiée par la NSA en 2001. Ce sont les standards actuellement recommandés pour le hachage cryptographique.
SHA-256
- Sortie : 256 bits (64 caractères hexadécimaux)
- Taille de bloc : 512 bits (opère sur des mots de 32 bits)
- Tours : 64 tours de compression
- Sécurité : aucune attaque pratique ou théorique connue. Trouver une collision nécessiterait environ 2^128 opérations.
- Utilisé dans : certificats TLS 1.2/1.3, Bitcoin (double-SHA-256), HMAC pour l'authentification API (AWS, Stripe), adressage de contenu Docker, vérification d'intégrité de fichiers
SHA-512
- Sortie : 512 bits (128 caractères hexadécimaux)
- Taille de bloc : 1024 bits (opère sur des mots de 64 bits)
- Tours : 80 tours de compression
- Sécurité : encore plus fort que SHA-256, avec une borne de collision d'environ 2^256 opérations
- Performance : paradoxalement, SHA-512 est souvent plus rapide que SHA-256 sur les processeurs 64 bits, car son algorithme utilise naturellement des opérations 64 bits qui correspondent directement aux instructions CPU modernes
- Utilisé dans : autorités de certification, applications gouvernementales/militaires, clés SSH, certaines implémentations de cryptomonnaies
SHA-384
SHA-384 est une version tronquée de SHA-512 : il utilise le même algorithme, mais avec des valeurs initiales différentes et une sortie de seulement 384 bits. Il offre un compromis entre les niveaux de sécurité de SHA-256 et SHA-512.
MD5 vs SHA-256 vs SHA-512 : comparaison complète
| Propriété | MD5 | SHA-256 | SHA-512 |
|---|---|---|---|
| Taille de sortie | 128 bits (32 hex) | 256 bits (64 hex) | 512 bits (128 hex) |
| Taille de bloc | 512 bits | 512 bits | 1024 bits |
| Taille de mot | 32 bits | 32 bits | 64 bits |
| Tours | 64 | 64 | 80 |
| Statut de sécurité | Cassé (2004) | Sûr | Sûr |
| Résistance aux collisions | Aucune (secondes) | ~2^128 opérations | ~2^256 opérations |
| Vitesse (logiciel) | ~650 MB/s | ~250 MB/s | ~350 MB/s* |
| Vitesse (matériel/ASIC) | Extrêmement rapide | Rapide (ASICs Bitcoin) | Modérée |
| Adapté à la sécurité | Non | Oui | Oui |
| Adapté aux mots de passe | Non | Non (trop rapide) | Non (trop rapide) |
*SHA-512 est plus rapide que SHA-256 sur les CPU 64 bits grâce aux opérations natives sur mots de 64 bits.
Conclusion pratique : utilisez SHA-256 pour la sécurité générale (intégrité de fichiers, signatures numériques, HMAC). Utilisez SHA-512 lorsque vous avez besoin d'une sécurité maximale ou que vous travaillez sur des systèmes 64 bits où SHA-512 est réellement plus rapide. N'utilisez jamais MD5 pour la sécurité.
Hachage ou chiffrement : quelle différence ?
C'est l'une des confusions les plus fréquentes en cryptographie :
| Hachage | Chiffrement | |
|---|---|---|
| Direction | Sens unique (irréversible) | Deux sens (réversible avec clé) |
| Objectif | Vérifier l'intégrité et l'authenticité | Protéger la confidentialité |
| Clé requise ? | Non (sauf HMAC) | Oui (symétrique ou asymétrique) |
| Taille de sortie | Fixe (par exemple toujours 256 bits) | Variable (proportionnelle à l'entrée) |
| Même entrée → même sortie ? | Toujours | Non (avec IV/nonce correct) |
| Exemples | SHA-256, MD5, bcrypt | AES, RSA, ChaCha20 |
Le hachage sert lorsque vous devez vérifier que les données n'ont pas changé (sommes de contrôle de fichiers, vérification de mot de passe, signatures numériques) sans avoir besoin de récupérer les données originales.
Le chiffrement sert lorsque vous devez protéger les données afin que seules les parties autorisées puissent les lire (HTTPS, chiffrement de disque, messagerie).
On utilise souvent les deux ensemble : TLS utilise le chiffrement (AES) pour protéger les données en transit et le hachage (SHA-256 via HMAC) pour vérifier l'intégrité des données.
Hachage de mots de passe : pourquoi SHA-256 ne suffit pas
SHA-256 est une fonction de hachage sûre, mais elle n'est pas adaptée au hachage de mots de passe. La raison est contre-intuitive : SHA-256 est trop rapide. Un attaquant équipé d'un GPU peut calculer des milliards de hachages SHA-256 par seconde et essayer tous les mots de passe courants en quelques secondes.
Fonctions de hachage conçues pour les mots de passe
Le hachage moderne des mots de passe utilise des algorithmes spécialisés conçus pour être volontairement lents :
| Algorithme | Année | Fonction clé | Résistance |
|---|---|---|---|
| bcrypt | 1999 | Facteur de coût ajustable, basé sur Blowfish | Difficile pour CPU |
| scrypt | 2009 | Difficile en mémoire (nécessite beaucoup de RAM) | Difficile pour CPU + mémoire |
| Argon2 | 2015 | Vainqueur de la Password Hashing Competition | Difficile pour CPU + mémoire + parallélisme |
Argon2 (plus précisément Argon2id) est le standard actuellement recommandé pour les nouveaux systèmes. Il possède trois paramètres configurables :
- Coût en temps : nombre d'itérations (plus = plus lent)
- Coût en mémoire : quantité de RAM nécessaire (plus = plus difficile à paralléliser sur GPU)
- Parallélisme : nombre de threads
Salage
Toutes les fonctions de hachage de mots de passe utilisent le salage : ajouter une valeur aléatoire unique à chaque mot de passe avant le hachage. Cela signifie :
- Deux utilisateurs avec le même mot de passe obtiennent des hachages différents
- Les tables arc-en-ciel précalculées deviennent inutiles
- Les attaquants doivent casser chaque mot de passe individuellement
Le sel est stocké à côté du hachage (il n'a pas besoin d'être secret, seulement unique).
HMAC : authentification de message basée sur le hachage
HMAC (Hash-based Message Authentication Code) combine une fonction de hachage avec une clé secrète pour créer un code d'authentification. Définie dans RFC 2104, la construction HMAC est :
HMAC(K, m) = H((K ⊕ opad) || H((K ⊕ ipad) || m))
Où H est la fonction de hachage, K est la clé (complétée à la taille de bloc), ipad est 0x36 répété et opad est 0x5c répété.
Pourquoi ne pas simplement hacher clé + message ?
Une approche naïve comme H(key || message) est vulnérable aux attaques par extension de longueur : un attaquant qui connaît H(key || message) peut calculer H(key || message || attacker_data) sans connaître la clé. La construction imbriquée de HMAC empêche cela.
HMAC en pratique
- HMAC-SHA256 (HS256) : algorithme le plus courant pour signer les jetons JWT
- AWS Signature V4 : utilise HMAC-SHA256 pour l'authentification des requêtes API
- Webhooks Stripe : signés avec HMAC-SHA256 pour vérification
- TLS 1.3 : utilise HMAC dans la fonction de dérivation de clé HKDF
- OAuth 1.0 : signature des requêtes avec HMAC-SHA1
Vous pouvez générer des valeurs HMAC avec notre outil de génération de hachage via l'onglet HMAC : il prend en charge HMAC-MD5, HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 et HMAC-SHA512.
Applications réelles des fonctions de hachage
Blockchain et cryptomonnaie
Le système de preuve de travail de Bitcoin repose sur SHA-256. Chaque en-tête de bloc est haché avec double-SHA-256 (SHA256(SHA256(header))), et les mineurs rivalisent pour trouver une entrée dont le hachage commence par un certain nombre de zéros. Ethereum utilise Keccak-256 (une variante de SHA-3). Tout le modèle de sécurité de la blockchain, registres immuables et vérification des transactions, dépend de la résistance aux collisions.
Certificats TLS/SSL
Lorsque vous visitez un site HTTPS, le certificat du serveur est signé à l'aide d'une fonction de hachage (généralement SHA-256). Votre navigateur vérifie le certificat en calculant le hachage et en le comparant à la signature. Toute la chaîne de certificats, de l'autorité racine au site web, dépend de la résistance aux collisions des hachages.
Contrôle de version Git
Git identifie chaque objet (commits, trees, blobs) par son hachage SHA-1. Lorsque vous exécutez git commit, Git calcule le hachage SHA-1 de l'objet commit, qui devient l'identifiant de commit. Git migre activement vers SHA-256 pour une sécurité plus forte, mais le système basé sur SHA-1 a fonctionné de manière fiable pendant près de deux décennies.
Signatures numériques
Les signatures numériques fonctionnent en hachant un document avec SHA-256, puis en chiffrant le hachage avec la clé privée du signataire. Le destinataire déchiffre la signature avec la clé publique du signataire et la compare à son propre hachage du document. Si les deux correspondent, le document est authentique et non modifié.
Stockage adressable par contenu
Des systèmes comme Docker, IPFS et les gestionnaires de paquets (npm, pip) utilisent des hachages SHA-256 comme adresses de contenu. Une couche d'image Docker est identifiée par le hachage SHA-256 de son contenu, ce qui garantit que le même contenu résout toujours vers le même identifiant et ne peut pas être altéré.
Subresource Integrity (SRI)
Les navigateurs web peuvent vérifier que les fichiers JavaScript et CSS hébergés sur CDN n'ont pas été altérés avec des hachages SRI. L'attribut integrity contient un hachage SHA-384 encodé en Base64 du contenu de fichier attendu :
<script src="https://cdn.example.com/lib.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8w"
crossorigin="anonymous"></script>
L'avenir : SHA-3 et au-delà
SHA-3 (Keccak) a été standardisé par le NIST en 2015 comme solution de secours au cas où SHA-2 serait cassé. Il utilise une structure interne complètement différente (la "construction éponge") par rapport à la construction Merkle-Damgard de SHA-2. Même si SHA-2 reste sûr et largement utilisé, SHA-3 apporte une défense en profondeur.
BLAKE3, publié en 2020, est une fonction de hachage plus récente, nettement plus rapide que SHA-256 (souvent 5 à 10 fois) tout en conservant de fortes propriétés de sécurité. Elle gagne en adoption dans les applications où la vitesse de hachage est critique, comme la vérification d'intégrité des fichiers et la déduplication.
Foire aux questions
Quelle est la différence entre hachage et chiffrement ?
Le hachage est à sens unique : vous ne pouvez pas récupérer l'entrée originale à partir d'un hachage. Le chiffrement fonctionne dans les deux sens : vous pouvez déchiffrer le texte chiffré en texte clair avec la bonne clé. Le hachage vérifie l'intégrité ; le chiffrement protège la confidentialité. Ils servent des objectifs différents et sont souvent utilisés ensemble dans des protocoles de sécurité comme TLS.
Un hachage peut-il être inversé ou "déchiffré" ?
Non. Un hachage ne peut pas être inversé, car de l'information est perdue pendant le processus de hachage (l'espace d'entrée est infini, mais l'espace de sortie est fixe). En revanche, les attaquants peuvent essayer de retrouver l'entrée en devinant (force brute) ou avec des tables précalculées (tables arc-en-ciel). C'est pourquoi les mots de passe doivent utiliser des fonctions de hachage lentes et salées comme bcrypt ou Argon2.
SHA-256 résiste-t-il aux ordinateurs quantiques ?
Partiellement. L'algorithme de Grover sur un ordinateur quantique pourrait réduire la recherche brute d'une préimage de 2^256 à 2^128 opérations, ce qui reste irréalisable. Pour la recherche de collisions, l'impact est moins significatif. Le consensus actuel est que SHA-256 fournit environ 128 bits de sécurité contre les attaques quantiques, ce qui est considéré comme suffisant dans un avenir prévisible.
Pourquoi Bitcoin utilise-t-il double-SHA-256 au lieu d'un seul SHA-256 ?
Bitcoin utilise SHA256(SHA256(x)) comme précaution contre les attaques par extension de longueur et pour ajouter une marge de sécurité. Lorsque Satoshi Nakamoto a conçu Bitcoin en 2008, les préoccupations concernant de potentielles faiblesses de SHA-256 seul (similaires à ce qui est arrivé à MD5 et SHA-1) ont motivé l'approche à double hachage. En pratique, SHA-256 seul reste sûr ; le double hachage est donc un choix de conception conservateur.
Quelle est la fonction de hachage la plus rapide qui reste sûre ?
BLAKE3 est actuellement la fonction de hachage cryptographique généraliste la plus rapide, atteignant souvent 5 à 10 fois le débit de SHA-256 grâce au parallélisme et aux instructions SIMD. Parmi les algorithmes standardisés, SHA-512 est plus rapide que SHA-256 sur les systèmes 64 bits. Pour une vitesse non cryptographique (lorsque la sécurité n'est pas nécessaire), xxHash et MurmurHash sont des ordres de grandeur plus rapides.
Combien de temps faudrait-il pour casser un hachage SHA-256 par force brute ?
Pour une entrée aléatoire de 256 bits, trouver une préimage demanderait environ 2^256 opérations, soit environ 1,16 x 10^77 essais. Même si chaque atome de l'univers observable (~10^80) était un ordinateur effectuant 10^18 hachages par seconde, il faudrait environ 3,7 x 10^41 ans. Les préimages SHA-256 sont, pour tous les usages pratiques, impossibles à trouver par force brute.
Conclusion
Les fonctions de hachage cryptographiques sont l'une des briques les plus fondamentales de la sécurité moderne. Comprendre les différences entre MD5 (cassé), SHA-1 (déprécié) et SHA-256/SHA-512 (standard actuel) vous aide à choisir en connaissance de cause dans vos applications. Retenez : SHA-256 pour la sécurité générale, bcrypt/Argon2 pour les mots de passe, HMAC pour l'authentification, et jamais MD5 pour la sécurité.
Essayez notre générateur de hachage en ligne gratuit pour calculer des hachages MD5, SHA-1, SHA-256, SHA-384, SHA-512 et des codes HMAC pour le texte et les fichiers : tout le traitement se fait dans votre navigateur.