Qu'est-ce qu'une fonction de hachage ?
Une fonction de hachage transforme une donnée d'entrée de taille quelconque (texte, fichier, image) en une empreinte de taille fixe (digest). Caractéristiques d'une bonne fonction cryptographique :
- Déterminisme : même entrée → même sortie, toujours.
- Unidirectionnelle : impossible de retrouver l'entrée depuis la sortie.
- Effet avalanche : un seul bit modifié → empreinte totalement différente.
- Résistance aux collisions : pratiquement impossible de trouver deux entrées avec la même empreinte.
Comparaison des algorithmes
| Algorithme | Taille | Année | Statut |
|---|---|---|---|
| MD5 | 128 bits | 1991 | Cassé — checksum uniquement |
| SHA-1 | 160 bits | 1993 | Cassé (SHAttered 2017) — déprécié |
| SHA-256 | 256 bits | 2001 | ✅ Sécurisé — standard actuel |
| SHA-512 | 512 bits | 2001 | ✅ Sécurisé — plus rapide en 64-bit |
| SHA-3 (Keccak) | 224-512 bits | 2015 | ✅ Sécurisé — successeur SHA-2 |
Cas d'usage par algorithme
- MD5 : checksum de fichier (intégrité, pas sécurité). Détection de modification non-malveillante.
- SHA-256 : signatures numériques, certificats SSL/TLS, blockchains (Bitcoin), Git, intégrité de paquets logiciels.
- SHA-512 : similaire à SHA-256 mais 64-bit, plus rapide sur les CPU modernes.
- HMAC-SHA256 : authentification de messages avec clé secrète (API).
- JAMAIS pour les mots de passe : utiliser Argon2id, bcrypt ou scrypt.
Pourquoi pas SHA pour les mots de passe ?
Les fonctions SHA sont conçues pour être rapides. Un GPU moderne calcule des milliards de SHA-256 par seconde. Pour un attaquant qui a volé une base de mots de passe hashés, cela permet d'essayer des milliards de combinaisons par seconde. Les fonctions spécifiques mots de passe (Argon2, bcrypt, scrypt) sont volontairement lentes et coûteuses en mémoire — elles ralentissent l'attaque par force brute par un facteur énorme.
Pièges courants
- Mot de passe avec SHA seul : faille critique. Ajouter au minimum un salt + bcrypt.
- MD5 ou SHA-1 pour signature : collision trouvable, signature falsifiable.
- Comparer deux hashs avec == : timing attack. Utiliser
crypto.timingSafeEqual(Node). - Confondre hash et chiffrement : un hash n'est pas réversible, un chiffrement oui.
Vérifier l'intégrité d'un fichier
# macOS / Linux
sha256sum fichier.zip
shasum -a 256 fichier.zip # macOS
# Windows PowerShell
Get-FileHash fichier.zip -Algorithm SHA256
# Vérifier face à un .sha256 fourni
sha256sum -c fichier.zip.sha256Questions fréquentes
MD5 sûr ?
Non, cassé. Checksum uniquement, pas sécurité.
Quel hash utiliser ?
SHA-256 par défaut. SHA-3 pour le futur.
Pour mot de passe ?
Argon2id, bcrypt ou scrypt — jamais SHA seul.
Réversible ?
Non. Un hash est unidirectionnel par construction.
Effet avalanche ?
1 bit changé → empreinte totalement différente.
Outils complémentaires
Sources
- NIST FIPS 180-4 — Secure Hash Standard (csrc.nist.gov)
- RFC 1321 — MD5 Message-Digest Algorithm
- RFC 9106 — Argon2 (mot de passe)
- MDN — SubtleCrypto.digest()