Hachage de mots de passe
Portail > Applications
Le stockage des mots de passe est un cas à part : on n'utilise pas une fonction de hachage rapide (SHA-256…), mais une fonction lente et coûteuse. Cette page explique pourquoi et comment.
Pourquoi une fonction rapide est dangereuse
Un mot de passe a une faible entropie : il est devinable. Si on stocke SHA-256(mot de passe), un attaquant qui récupère la base peut tester des milliards de candidats par seconde (GPU/ASIC) et retrouver les mots de passe. La rapidité de SHA-256, qualité ailleurs, devient ici un cadeau à l'attaquant.
La bonne approche : KDF lente / memory-hard
On emploie une fonction conçue pour être coûteuse à évaluer :
| Fonction | Caractéristique |
|---|---|
| Argon2id | Lauréat PHC ; memory-hard et paramétrable. Recommandé par défaut. |
| scrypt | Memory-hard ; freine GPU/ASIC. |
| bcrypt | Éprouvé, coût ajustable (dérivé de Blowfish). |
| PBKDF2 | Itérations nombreuses ; acceptable mais peu memory-hard. |
Ces fonctions sont volontairement lentes (et, pour les meilleures, gourmandes en mémoire), ce qui rend les attaques par force brute hors de portée.
Le sel (salt)
Un sel aléatoire et unique par mot de passe est stocké à côté du condensé. Il garantit que :
- deux utilisateurs au même mot de passe ont des condensés différents ;
- les tables précalculées (rainbow tables) deviennent inutiles.
Le sel n'est pas secret ; c'est son unicité qui compte.
Le poivre (pepper), optionnel
Un poivre est un secret global (non stocké avec la base, p. ex. en HSM/coffre) ajouté avant hachage. Il renforce la protection si seule la base de données fuit, mais pas le secret.
Facteur de travail
Les paramètres (itérations, mémoire, parallélisme) forment un facteur de travail à calibrer : assez élevé pour gêner l'attaquant, soutenable pour le serveur. À réévaluer à la hausse avec le temps (matériel toujours plus rapide).
À ne jamais faire
- Stocker les mots de passe en clair.
- Les hacher avec une fonction rapide (MD5, SHA-1, SHA-256 brut).
- Réutiliser un sel, ou ne pas en mettre.
- Chiffrer les mots de passe de façon réversible quand un hachage suffit.
Distinction
- Vérifier un mot de passe (comparer au condensé stocké) ≠ dériver une clé à partir d'un mot de passe pour chiffrer des données. Les mêmes fonctions (Argon2id…) servent aux deux, mais ce sont des usages différents (Dérivation de clés (KDF)).
Points clés à retenir
- Mots de passe : jamais une fonction de hachage rapide → Argon2id (ou scrypt/bcrypt/PBKDF2).
- Sel unique par mot de passe (anti-rainbow, anti-collision) ; poivre optionnel en HSM/coffre.
- Calibrer et augmenter le facteur de travail dans le temps.
- Vérification de mot de passe ≠ dérivation de clé, même si les fonctions se recoupent.
Voir aussi
| Fonctions de hachage — Portail | |
|---|---|
| Fondamentaux | Principe et propriétés · Constructions · Attaques génériques |
| Algorithmes | MD5 et SHA-1 · SHA-2 · SHA-3 et SHAKE · RIPEMD-160 · Whirlpool · BLAKE2 et BLAKE3 |
| Applications | Usages · Hachage de mots de passe |