Les défenses modernes
Les fonctions lentes : bcrypt, scrypt, Argon2
Le sel neutralise les tables pré-calculées, mais pas la force brute sur un compte ciblé. La parade : rendre chaque essai délibérément lent.
Retourner la rapidité contre l'attaquant
L'idée est contre-intuitive. SHA-256 est un problème parce qu'il est rapide : des milliards d'essais par seconde. La solution est donc d'utiliser des fonctions volontairement lentes et coûteuses.
Ces fonctions s'appellent des fonctions de dérivation de clé (KDF). Les plus connues pour les mots de passe sont bcrypt, scrypt et Argon2. Elles ne se contentent pas de hacher une fois : elles répètent l'opération des milliers de fois, ou consomment beaucoup de mémoire.
Le facteur de travail
Ces fonctions possèdent un facteur de travail (cost factor) réglable. Il fixe combien l'opération est coûteuse : plus il est élevé, plus chaque calcul d'empreinte prend du temps.
bcrypt, facteur 10 -> ~0,1 s par empreinte
bcrypt, facteur 12 -> ~0,4 s par empreinte
bcrypt, facteur 14 -> ~1,6 s par empreinte
On l'augmente au fil des années, à mesure que le matériel progresse, sans changer de code.
Pourquoi la lenteur défend
Comparons du point de vue des deux camps, avec une cible à ~0,1 s par essai.
SHA-256 (rapide) bcrypt (lent, 0,1 s)
Utilisateur légitime : imperceptible imperceptible (une fois)
Attaquant (masse) : ~1 000 000 000/s ~10 essais/s
Pour l'utilisateur légitime, 0,1 s à la connexion est imperceptible : il ne se connecte qu'une fois. Pour l'attaquant, qui doit tester des milliards de candidats, passer d'un milliard à quelques dizaines d'essais par seconde rend la force brute massive impraticable — des siècles au lieu de minutes.
La lenteur ne gêne personne d'utile et ruine l'attaquant : c'est une qualité, pas un défaut.
Argon2 et la résistance mémoire
Les attaquants utilisent des GPU et des puces dédiées (ASIC) qui parallélisent massivement les calculs. Pour contrer cela, les fonctions modernes sont memory-hard : elles exigent beaucoup de mémoire par essai.
Argon2, lauréat d'un concours international et recommandé aujourd'hui, est conçu ainsi. La mémoire coûte cher à multiplier sur un GPU/ASIC : exiger, disons, plusieurs dizaines de mégaoctets par tentative brise l'avantage du parallélisme matériel.
Tableau comparatif
| Fonction | Vitesse | Facteur de travail | Résistance mémoire | Usage |
|---|---|---|---|---|
| SHA-256 | Très rapide | Non | Non | Intégrité, pas les mdp |
| bcrypt | Lente réglable | Oui (cost) | Faible | Mots de passe (éprouvé) |
| scrypt | Lente réglable | Oui | Oui | Mots de passe |
| Argon2 | Lente réglable | Oui | Oui (memory-hard) | Mots de passe (recommandé) |
En résumé
- Contre la force brute, on utilise des fonctions délibérément lentes : bcrypt, scrypt, Argon2.
- Leur facteur de travail est réglable et augmenté au fil du temps.
- Ralentir chaque essai (ex. 0,1 s) rend la force brute massive impraticable sans gêner l'utilisateur légitime.
- Argon2 est memory-hard : il résiste aux attaques GPU/ASIC en exigeant beaucoup de mémoire.

