Une fuite de données exposant les identifiants de vos utilisateurs est un cauchemar pour tout développeur. Si ces secrets sont stockés en clair ou via des algorithmes obsolètes comme MD5, les attaquants peuvent compromettre des milliers de comptes en quelques secondes. Le hachage cryptographique moderne est votre ultime rempart. Ce guide décrypte les standards actuels pour protéger vos bases de données.
Le Danger du Stockage en Texte Clair
Stocker un mot de passe sans transformation est une négligence grave. En cas d'intrusion, l'attaquant accède instantanément à la vie numérique de vos clients. Comme la majorité des internautes réutilisent leurs mots de passe sur plusieurs plateformes (banques, e-mails, réseaux sociaux), une faille sur votre site peut déclencher une réaction en chaîne catastrophique.
Pourquoi MD5 et SHA-256 sont Inadaptés ?
MD5 et SHA-256 sont des fonctions de hachage à usage général. Leur objectif est d'être extrêmement rapides pour vérifier l'intégrité de fichiers. Pour la sécurité des mots de passe, cette rapidité est un défaut majeur : un GPU moderne peut tester des milliards de combinaisons SHA-256 par seconde via des attaques par force brute.
Algorithme Hachages/Seconde Temps de cassage (8 chars) ───────────────────────────────────────────────────────────────────── MD5 200 milliards Quelques secondes SHA-256 10 milliards Quelques minutes bcrypt (coût 12) 5 000 Des milliers d'années Argon2id 1 000 Des millions d'années
Les Piliers d'un Bon Hachage Cryptographique
- Lenteur intentionnelle : Un hachage doit prendre entre 100ms et 500ms. C'est imperceptible pour un utilisateur, mais rédhibitoire pour un pirate.
- Facteur de coût ajustable : La possibilité d'augmenter la complexité du calcul à mesure que la puissance des processeurs évolue.
- Salage automatique : L'ajout d'une donnée aléatoire (le sel) pour que deux mots de passe identiques génèrent des empreintes différentes.
- Résistance mémoire (Memory-hard) : Les algorithmes récents saturent la RAM pour empêcher l'utilisation massive de cartes graphiques (GPU) ou de circuits ASICs.
Le Trio Gagnant : bcrypt, scrypt et Argon2
1. bcrypt (Le Standard Éprouvé)
Apparu en 1999, bcrypt reste une référence solide. Bien qu'il ne soit pas "memory-hard" comme ses successeurs, il utilise une structure basée sur l'algorithme Blowfish qui ralentit efficacement les tentatives de force brute.
import bcrypt from 'bcryptjs';
// Hachage avec un facteur de coût de 12
const hash = await bcrypt.hash("monMotDePasseSecret", 12);
// Résultat → "$2b$12$..."
// Vérification lors de la connexion
const match = await bcrypt.compare("monMotDePasseSecret", hash);
// → true
2. Argon2id (La Recommandation Actuelle)
Vainqueur de la Password Hashing Competition en 2015, Argon2id est le hachage le plus robuste aujourd'hui. Il combine résistance aux attaques par canal auxiliaire et aux calculs parallèles sur GPU.
import argon2 from 'argon2';
// Configuration recommandée
const hash = await argon2.hash("monMotDePasseSecret", {
type: argon2.argon2id,
memoryCost: 65536, // 64 MB
timeCost: 3, // Itérations
parallelism: 4 // Threads
});
// Vérification
const isValid = await argon2.verify(hash, "monMotDePasseSecret");
Implémentation Native en PHP
// Utilise Argon2id si disponible (PHP 7.3+), sinon bcrypt
$hash = password_hash("motdepasse123", PASSWORD_ARGON2ID);
// Vérification simple
if (password_verify("motdepasse123", $hash)) {
echo "Accès autorisé !";
}
// Mise à jour automatique si les paramètres de sécurité changent
if (password_needs_rehash($hash, PASSWORD_ARGON2ID)) {
$nouveauHash = password_hash("motdepasse123", PASSWORD_ARGON2ID);
// Sauvegarder en BDD
}
L'Importance Cruciale du "Sel" (Salting)
Le salage consiste à ajouter une chaîne de caractères aléatoire unique à chaque mot de passe avant le hachage. Sans cela, un attaquant utilise des tables arc-en-ciel (rainbow tables) : des dictionnaires de hachages pré-calculés pour retrouver le mot de passe original instantanément.
Note importante : Les fonctions modernes comme `password_hash()` en PHP ou les librairies `bcrypt` gèrent le sel automatiquement. Vous n'avez plus besoin de créer une colonne "salt" manuellement dans votre base de données.
Bonnes Pratiques de Sécurité
- Privilégiez Argon2id pour tout nouveau projet. Utilisez bcrypt si Argon2 n'est pas disponible dans votre environnement.
- Bannissez MD5 et SHA-1 définitivement. Ces algorithmes sont désormais réservés à l'intégrité de fichiers non critiques.
- Ne réinventez pas la roue : N'écrivez jamais votre propre logique de hachage. Utilisez des bibliothèques standardisées et auditées.
- Limitez les tentatives : Implémentez un blocage temporaire (rate limiting) après plusieurs échecs de connexion pour contrer la force brute en ligne.
- Acceptez les mots de passe longs : Ne limitez pas la taille des mots de passe à 20 caractères. Autorisez jusqu'à 128 caractères pour favoriser l'usage de gestionnaires de mots de passe.
Besoin d'Outils pour Développeurs ?
Utilisez nos encodeurs et décodeurs sécurisés pour vos phases de test et de débogage.