Adieu bcrypt, bonjour Argon2id : sécurisez vos mots de passe en 2026
Vous ouvrez un projet PHP en 2026 et vous y trouvez password_hash($pwd, PASSWORD_DEFAULT). Cette constante résout toujours vers bcrypt. Le skeleton Laravel que vous avez cloné la semaine dernière configure encore bcrypt comme driver de hachage. Ce n'est pas un CVE critique, pas une urgence à résoudre en pleine nuit — c'est un bug lent et silencieux : vos mots de passe utilisateurs sont protégés par un algorithme de 1999 face à du matériel de 2026.
La bonne nouvelle : la correction tient en deux lignes, et PHP se charge de re-hacher les mots de passe existants à la prochaine connexion.
Pourquoi bcrypt n'est plus suffisant
bcrypt a été conçu en 1999 par Niels Provos et David Mazières. Il était excellent pour son époque : facteur de travail réglable, gestion du sel intégrée, et deux décennies de bons et loyaux services. Le problème, c'est le matériel moderne.
bcrypt est lié au CPU et n'utilise qu'un bloc fixe de 4 Ko de mémoire par hash. Cette empreinte mémoire minuscule tient confortablement dans le cache local de n'importe quel cœur GPU moderne. Résultat concret : une RTX 4090 grand public craque bcrypt au facteur de travail 12 à environ 200 000 hashes par seconde. Les rigs ASIC et les clusters hashcat loués dans le cloud font encore mieux.
Augmenter le facteur de travail ralentit les choses, mais cela ralentit aussi votre serveur. Et surtout, cela ne résout pas le problème fondamental : bcrypt n'a pas été conçu pour résister aux attaques GPU massivement parallèles.
Argon2id : conçu pour le matériel d'aujourd'hui
Argon2id a remporté la Password Hashing Competition en 2015. Il est aujourd'hui recommandé par l'OWASP et le NIST comme algorithme de référence pour le hachage de mots de passe.
Sa différence fondamentale avec bcrypt : il est memory-hard. Pour calculer un hash, il exige une quantité configurable de RAM. Sur GPU, chaque cœur parallèle a besoin de sa propre allocation mémoire — ce qui rend les attaques massivement parallèles bien plus coûteuses, voire prohibitives.
Argon2id combine deux variantes :
- Argon2i : résistant aux attaques par canal auxiliaire (side-channel)
- Argon2d : résistant aux attaques GPU
La version id offre le meilleur des deux mondes, ce qui en fait le choix recommandé pour le hachage de mots de passe.
PHP supporte Argon2id nativement depuis la version 7.3 (avec libargon2 installée) et PHP 8.4 l'embarque de façon encore plus accessible. Les constantes disponibles sont PASSWORD_ARGON2I et PASSWORD_ARGON2ID.
Migration concrète : PHP natif et Laravel
En PHP natif
La migration est immédiate :
// Avant
$hash = password_hash($password, PASSWORD_DEFAULT); // bcrypt
// Après
$hash = password_hash($password, PASSWORD_ARGON2ID);
Pour la vérification et la migration transparente, PHP propose password_needs_rehash() :
$hash = getUserHashFromDatabase($userId);
if (password_verify($password, $hash)) {
if (password_needs_rehash($hash, PASSWORD_ARGON2ID)) {
$newHash = password_hash($password, PASSWORD_ARGON2ID);
updateUserHashInDatabase($userId, $newHash);
}
// connexion réussie
}
Cette logique permet une migration progressive et transparente : chaque utilisateur bascule vers Argon2id lors de sa prochaine connexion, sans interruption de service ni réinitialisation forcée des mots de passe.
Dans Laravel
Laravel gère cette transition via la configuration du driver de hachage dans config/hashing.php :
'driver' => 'argon2id',
Ou via la variable d'environnement dans votre .env :
HASH_DRIVER=argon2id
Laravel détecte automatiquement si un hash existant doit être mis à jour via la méthode needsRehash() du facade Hash. En activant la vérification dans votre logique d'authentification, la migration se fait de façon transparente pour vos utilisateurs.
💡 Vérifiez que libargon2 est bien installée sur votre serveur ou votre image Docker. Sur Debian/Ubuntu :
apt install libargon2-1.
Ce qu'il faut retenir
bcrypt n'est pas "cassé" au sens d'une vulnérabilité exploitable directement. Mais face aux capacités de calcul disponibles en 2026, il n'offre plus le niveau de protection que vous êtes en droit d'attendre d'un algorithme de hachage de mots de passe moderne.
Argon2id est aujourd'hui le standard recommandé. La migration est non-destructive, progressive, et ne demande que quelques lignes de configuration. C'est l'une des améliorations sécurité les plus simples à déployer pour un gain réel et mesurable.
Si vous montez un nouveau projet PHP ou que vous faites évoluer votre stack vers PHP 8.4, c'est le moment idéal pour faire ce choix dès le départ.
Cet article s'inspire de l'excellent post de Gabriel Anhaia publié sur DEV Community, enrichi d'exemples concrets pour les projets PHP et Laravel.