Hash generator MD5 SHA : comprendre le hachage cryptographique
Qu'est-ce qu'une fonction de hachage cryptographique ?
Une fonction de hachage cryptographique transforme une donnée de taille arbitraire en une empreinte de taille fixe, appelée hash ou condensé. Cette transformation est à sens unique : il est computationnellement impossible de retrouver le message original à partir du hash. La moindre modification de l'entrée, même un seul bit, produit un hash complètement différent. On appelle cette propriété l'effet avalanche.
Les fonctions de hachage sont au coeur de la sécurité informatique moderne. Elles servent à vérifier l'intégrité des fichiers, signer numériquement des documents, identifier des commits dans Git, et protéger les mots de passe stockés en base de données. Chaque algorithme produit un hash de longueur spécifique, mesurée en bits.
SHA-256 vs MD5 vs bcrypt : quel algorithme choisir ?
Le choix de l'algorithme dépend entièrement du cas d'usage. Les trois catégories principales sont les fonctions de hachage rapides (SHA, MD5), les fonctions de hachage lentes (bcrypt, Argon2) et les fonctions obsolètes à éviter.
Longueur de hash et niveau de sécurité par algorithme
Source : NIST FIPS PUB 180-4 et OWASP Password Storage Cheat Sheet
MD5 (128 bits) est cryptographiquement cassé depuis 2004 : des collisions peuvent être générées en quelques secondes. Il reste utilisable uniquement pour des checksums non sécuritaires (vérification rapide de fichiers). SHA-1 (160 bits) est également considéré comme obsolète depuis 2017, lorsque Google et le CWI Amsterdam ont démontré une collision pratique (attaque SHAttered). SHA-256 est le standard actuel recommandé par le NIST pour la plupart des usages.
Checksum (intégrité)
SHA-256
Rapide, vérifie qu'un fichier n'a pas été altéré
Mot de passe
bcrypt / Argon2
Volontairement lent, résiste au brute force
Ne jamais utiliser SHA-256 pour les mots de passe
Vérification d'intégrité : le cas des checksums
Lorsque vous téléchargez un fichier depuis Internet, comment vous assurer qu'il n'a pas été corrompu ou altéré ? Le fournisseur publie le hash SHA-256 du fichier original. Après téléchargement, vous calculez le hash du fichier reçu et le comparez à la valeur attendue. Si les deux correspondent, le fichier est intact.
Le serveur fournit le fichier + son hash SHA-256
ubuntu-24.04-desktop-amd64.iso sha256sum ubuntu-24.04-desktop-amd64.iso
a1b2c3d4e5f6... Hash local = hash publié ? Fichier intègre.
OK ou MISMATCH 2²⁵⁶
Nombre de hashs SHA-256 possibles, soit environ 1,16 × 10⁷⁷ combinaisons
HMAC et signatures numériques
Les fonctions SHA sont également utilisées dans les protocoles d'authentification de messages. Un HMAC (Hash-based Message Authentication Code) combine un hash SHA avec une clé secrète pour garantir simultanément l'intégrité et l'authenticité d'un message. HMAC-SHA256 est le standard pour la signature de requêtes API (webhooks, JWT, OAuth). Pour vérifier l'encodage de vos URLs d'API, utilisez notre encodeur/décodeur URL.
L'effet avalanche illustré
L'une des propriétés fondamentales d'une bonne fonction de hachage est l'effet avalanche : un changement minimal dans l'entrée provoque un changement radical dans le hash de sortie. Par exemple, le hash SHA-256 de "hello" et "Hello" (une seule lettre en majuscule) produisent deux empreintes complètement différentes, sans aucun pattern reconnaissable. C'est cette propriété qui empêche un attaquant de déduire des informations sur l'entrée à partir du hash.
Bonne pratique
crypto.timingSafeEqual en Node.js) pour prévenir les attaques par timing.Erreurs fréquentes à éviter
- Utiliser MD5 ou SHA-1 pour la sécurité. Ces algorithmes sont cassés. Pour l'intégrité de fichiers, préférez SHA-256. Pour les signatures, utilisez SHA-256 minimum.
- Hasher un mot de passe directement avec SHA-256. Un attaquant peut tester des milliards de combinaisons par seconde. Utilisez bcrypt, scrypt ou Argon2 avec un salt unique par utilisateur.
- Confondre chiffrement et hachage. Le hachage est irréversible par conception. Si vous avez besoin de récupérer la donnée originale, vous avez besoin de chiffrement (AES, RSA), pas de hachage.
- Oublier le salt pour les mots de passe. Sans salt, deux utilisateurs avec le même mot de passe auront le même hash, rendant les rainbow tables efficaces. Un salt aléatoire unique par utilisateur élimine ce risque.
- Comparer les hashs en mode non constant-time. Une comparaison caractère par caractère peut révéler la longueur du préfixe correct via une attaque par timing. Utilisez toujours une comparaison en temps constant.
Sources et références
- FIPS PUB 180-4 (NIST, 2015) : Secure Hash Standard (SHA-1, SHA-256, SHA-384, SHA-512).
- MDN Web Docs, SubtleCrypto.digest() : documentation de l'API Web Crypto.
- OWASP Password Storage Cheat Sheet : recommandations pour le stockage de mots de passe.
- SHAttered (Google/CWI) : première collision SHA-1 pratique (2017).