Standards de hachage de mots de passe : pourquoi MD5 et SHA-256 ne suffisent plus
Si vous êtes développeur, l'une de vos responsabilités les plus sacrées est de protéger les mots de passe des utilisateurs. Stocker des mots de passe en texte clair est un désastre évident, mais de nombreux développeurs font encore l'erreur d'utiliser des hachages cryptographiques "rapides" comme MD5 ou même SHA-256 pour le stockage des mots de passe.
Ce guide explique pourquoi ces méthodes sont obsolètes et quels sont les standards actuels de l'industrie pour un hachage sécurisé des mots de passe.
1. Le problème des hachages "rapides"
Les algorithmes comme MD5, SHA-1 et SHA-256 ont été conçus pour être rapides. Ils sont destinés à vérifier l'intégrité de fichiers volumineux en quelques millisecondes.
Bien que la vitesse soit excellente pour les vérifications de fichiers, c'est un cauchemar pour les mots de passe. Un GPU moderne peut calculer des milliards de hachages SHA-256 par seconde. Si un attaquant vole votre base de données de mots de passe hachés en SHA-256, il peut utiliser la "force brute" pour deviner presque tous les mots de passe simples en quelques heures.
2. Algorithmes modernes de hachage lent
Pour contrer les attaques par force brute, nous utilisons des algorithmes spécifiquement conçus pour être coûteux en calcul. Ce sont des hachages "adaptatifs" qui vous permettent d'augmenter le "facteur de travail" à mesure que le matériel devient plus rapide.
Argon2 : Le nec plus ultra
Argon2 a remporté la Password Hashing Competition en 2015 et est actuellement le standard recommandé par l'OWASP et le NIST.
- Argon2id : C'est la variante préférée. Elle résiste à la fois au craquage par GPU et aux attaques par canaux auxiliaires.
- Configurable : Vous pouvez ajuster l'utilisation de la mémoire, les itérations et le parallélisme pour vous assurer que le hachage d'un mot de passe prend, par exemple, 500 ms sur votre serveur.
bcrypt : Le classique éprouvé
Développé en 1999, bcrypt est l'un des algorithmes les plus utilisés et les plus fiables de l'histoire.
- Facteur de travail : Il utilise un paramètre de "coût". Chaque fois que vous incrémentez le coût de 1, le temps nécessaire pour hacher le mot de passe double.
- Toujours sûr : Malgré son âge, bcrypt reste hautement sécurisé contre les attaques modernes.
scrypt : Le pionnier de la "mémoire dure"
scrypt a été le premier algorithme majeur à introduire la "mémoire dure" (memory hardness). Il nécessite une quantité importante de RAM pour être calculé, ce qui rend extrêmement coûteux pour les attaquants de construire du matériel spécialisé (ASIC) pour le craquer.
3. Au-delà de l'algorithme : Sel et Poivre
Même avec un algorithme puissant, vous avez besoin de couches de protection supplémentaires.
Le Sel (Salt) : Contrer les tables arc-en-ciel
Un Sel est une chaîne aléatoire ajoutée au mot de passe avant le hachage.
- Pourquoi : Sans sel, si deux utilisateurs ont le même mot de passe ("password123"), ils auront le même hachage. Un attaquant peut utiliser des "Tables Arc-en-ciel" (listes précalculées de hachages) pour les craquer instantanément.
- Règle : Chaque utilisateur doit avoir un sel unique et aléatoire généré au moment de la création du compte.
Le Poivre (Pepper) : La couche secrète
Un Poivre est similaire à un sel, mais au lieu d'être stocké dans la base de données, il est conservé dans un fichier de configuration sécurisé ou un module de sécurité matériel (HSM).
- Pourquoi : Si un attaquant vole votre base de données mais pas les clés secrètes de votre application, il ne pourra toujours pas craquer les hachages car il ne connaît pas le poivre.
4. Bonnes pratiques pour les développeurs
- N'utilisez jamais MD5 ou SHA-1 : Ils sont totalement compromis pour la sécurité.
- Évitez le SHA-256 simple : Il est trop rapide et facilement craqué par les GPU.
- Choisissez Argon2id ou bcrypt : Utilisez Argon2id pour les nouveaux projets ; bcrypt est une alternative solide avec un excellent support de bibliothèque.
- Ajustez votre facteur de travail : Visez un temps de hachage compris entre 250 ms et 500 ms. C'est assez rapide pour qu'un humain attende une connexion, mais assez lent pour arrêter un attaquant.
- Salez toujours : La plupart des bibliothèques modernes (comme
bcrypten Node.js ou Python) gèrent le salage automatiquement.
Comparaison récapitulative
| Algorithme | Type | Mémoire dure | Recommandé |
|---|---|---|---|
| MD5 | Hachage rapide | Non | ❌ JAMAIS |
| SHA-256 | Hachage rapide | Non | ❌ NON (pour pass) |
| PBKDF2 | Hachage lent | Non | ⚠️ Héritage uniquement |
| bcrypt | Hachage lent | Non | ✅ OUI |
| scrypt | Hachage lent | Oui | ✅ OUI |
| Argon2id | Hachage lent | Oui | 🏆 MEILLEUR |
Conclusion
Protéger les mots de passe ne consiste pas seulement à choisir un algorithme au hasard ; il s'agit d'utiliser des outils conçus pour résister à la puissance brute du matériel moderne. En utilisant Argon2id avec un sel et un facteur de travail appropriés, vous offrez à vos utilisateurs le plus haut niveau de sécurité disponible aujourd'hui.
Besoin de tester un hachage ou de générer un mot de passe sécurisé pour vos propres comptes ? Consultez notre Outil Générateur de mots de passe et notre Générateur de Hash pour garder vos données en sécurité.