
Le stockage des mots de passe en toute sécurité est un problème récurrent. Mais quelles sont les principales méthodes, comment fonctionnent-elles, et ce qu’elles valent face aux techniques actuelles de rupture de mot de passe ? Nous expliquons dans cet article les principes essentiels du stockage sûr (hachage, sel, poivre, itération) et soulignons leur importance dans la résistance aux méthodes de récupération de mot de passe. Enfin, nous vous parlerons d’une fonctionnalité de hachage fiable pour un stockage sécurisé.
Mots de passe en clair
Imaginons qu’un pirate mette la main sur une base de données d’une application web et qu’il puisse extraire directement les couples identifiant/mot de passe enregistrés.
| Connexion | Mot de passe |
| admin | azérty |
| toto | matrice |
| Billy | yep59f4txwrr |
| tata | matrice |
| titi | freepass |
| attaquant | TesPwndMot de passe |
Dans ce scénario, l’attaquant dispose des mots de passe en texte brut de tous les comptes. Même Billy, avec son mot de passe solide, se retrouve exposé.
Stocker des mots de passe en clair n’est jamais une option. Personne, pas même les administrateurs, ne doit pouvoir accéder aux mots de passe des utilisateurs sous cette forme.
Mots de passe chiffrés
Parfois, les mots de passe sont conservés dans la base après avoir été chiffrés avec un algorithme réversible (rot13, masquage simple, etc). Le problème ? Le chiffrement étant réversible, il ne répond pas aux recommandations de la CNIL, qui préconise l’usage d’une fonction cryptographique non réversible (source).
De plus, si l’attaquant possède son propre mot de passe chiffré, il peut aisément déduire la logique de chiffrement et tenter de remonter à la clé. En cas de succès, tous les mots de passe deviennent accessibles presque aussi facilement qu’en clair, peu importe la sophistication de l’algorithme utilisé.
Fonctions de hachage obsolètes
Dans d’autres cas, les mots de passe sont stockés via des fonctions cryptographiques irréversibles, mais dépassées (md5, sha1…). Prenons l’exemple de LinkedIn : certains mots de passe étaient protégés par sha1, mais après la fuite de ces hachages en 2012, 90 % d’entre eux ont été cassés en trois jours.
Voici ce que cela donnerait avec nos exemples précédents :
| Connexion | Mot de passe (md5) |
| admin | ab4f63f9ac65152575886860dde480a1 |
| toto | 21b72c0b7adc5c7b4a50ffcb90d92dd6 |
| Billy | 47ad898a379c3dad10b4812eba843601 |
| tata | 21b72c0b7adc5c7b4a50ffcb90d92dd6 |
| titi | 5b9a8069d33fe9812dc8310ebff0a315 |
Quelques points à retenir à propos de cette méthode :
- La majorité des mots de passe (hors Billy) sont très répandus et figurent dans les listes de mots de passe les plus utilisés (ex : 10-million-password-list-top-1000.txt).
- Sans ajout d’aléa, deux utilisateurs ayant le même mot de passe (ici toto et tata) auront exactement le même hachage stocké.
Une recherche rapide sur Internet à partir du hachage d’un admin suffit à retrouver le mot de passe associé.
Sauf pour Billy, tous les mots de passe peuvent être retrouvés instantanément grâce à un moteur de recherche.
Mais si la recherche web ne donne rien, l’attaquant a d’autres moyens à disposition :
Force brute
La force brute consiste à tester méthodiquement toutes les combinaisons possibles selon une règle de génération. C’est le principe du cadenas à code : on tente chaque possibilité, sans relâche, jusqu’à trouver la bonne.
Dictionnaire
Une attaque par dictionnaire exploite une liste de mots existants pour tenter de retrouver le bon. Plusieurs variantes existent, parmi lesquelles :
- Un dictionnaire de langue courante
- Un classement des mots de passe les plus répandus
- Une liste créée sur-mesure selon le contexte
Dans la réalité, si on sait que le cadenas appartient à « Tutu » qui aime le nombre 42 et est né le 26/11/2001, on peut facilement générer une série de mots de passe comme 42, 26, 11, 01 ou des combinaisons de ces chiffres.
À noter : dans le langage courant, on parle souvent de force brute même pour une attaque de dictionnaire, alors que le procédé diffère.
Table arc-en-ciel
Les tables arc-en-ciel mériteraient un développement à elles seules. Il s’agit de structures de données contenant des millions de hachages précalculés, ce qui permet de retrouver un mot de passe en un temps record pour peu qu’il soit déjà dans la table. Beaucoup de ces tables sont disponibles en ligne.
Benchmark pour casser les mots de passe md5
Un test a été mené avec les hachages de notre exemple, en utilisant la liste rockyou (14 341 564 mots de passe uniques) et une machine virtuelle, donc dans des conditions loin d’être optimales pour casser des mots de passe.
Résultat : à part le mot de passe de Billy, absent de la liste rockyou, tous les autres ont été retrouvés en 11 secondes à peine. Le logiciel a testé l’ensemble des hachages de la liste rockyou en un clin d’œil.
Fonctions de hachage inadaptées
Face aux échecs précédents, on pourrait être tenté d’utiliser des fonctions irréversibles réputées plus robustes comme sha256, sha512 ou sha3. Mais ces fonctions, prévues pour vérifier l’intégrité ou signer un fichier, sont pensées pour être calculées très rapidement. Ce qui les rend inadaptées au stockage sécurisé des mots de passe : elles sont bien trop rapides à casser.
| Connexion | Mot de passe (sha512) |
| admin | df6b9fb15cfdbb7527be5a8a8a6e39e572c8ddb943fbc79a943438e9d3d85ebfc2ccf9e0eccd9346026c0b6876e0e01556fe56f135582c05fbdbb505d46755a |
| toto | 11a25e88658143a853d280bf77f81ff391347aaba2db54a3a3aab0149b265276de419880762a473fc496388bcf70566d7cfd0346c34add40652f8f7b669caf9ec0 |
| Billy | fe9cb9b07725fd1cc3906232405119fedf9a020436630d3c1e0f632f73909e6ed9e731c149ac22743bbe9541881f35ceebf1d2782d469eb3b42968469d55a7a4 |
| tata | 11a25e88658143a853d280bf77f81ff391347aaba2db54a3a3aab0149b265276de419880762a473fc496388bcf70566d7cfd0346c34add40652f8f7b669caf9ec0 |
| titi | f767036acd951f5ddaf4eed5291c677db060055806dbcae69ca35d95847559dc8abce5011fd2b50833e760eca2d84d6d6daf1f078200f42b4fc10b58bad3761c88 |
À nouveau, tous les mots de passe (hors Billy) sont découverts en 16 secondes seulement avec hashcat.
Améliorer SHA512
On l’a vu, SHA512 seule n’est pas suffisante pour le stockage sécurisé, mais il vaut la peine d’observer comment la renforcer pour mieux saisir l’intérêt des fonctions de hachage spécialisées.
Utilisation d’un sel
Le sel consiste à ajouter une valeur aléatoire unique à chaque mot de passe avant hachage. Ainsi, deux utilisateurs ayant le même mot de passe auront des hachages complètement différents. Le sel doit être propre à chaque compte et choisi au hasard.
Le sel a plusieurs atouts :
- Il rend la recherche du hachage sur Internet quasi impossible, tant que le sel est suffisamment long et imprévisible.
- Les tables arc-en-ciel deviennent inopérantes face à des hachages salés.
- Deux utilisateurs avec le même mot de passe n’auront plus le même hachage, ce qui complique la tâche des outils de cassage de mots de passe. Sans sel, casser un hachage revient à casser tous les comptes qui partagent ce mot de passe. Avec sel, le logiciel doit repartir de zéro pour chaque compte.
Benchmark avec le sel
| Utilisateur | Sel | Hash sha512 avec sel |
| admin | BGDD6D6^zgvkmhkf @W3RqT | 7509d123bce1aa92331861cf8fd738a58205045123f0e25f0862477cb19d3ee0757cd99865c30b123ad1e7f1e31a6058090458cb9941031f5c36683c8446f |
| toto | HZBD^ @gL *WVOEXO6YJ7HVB | 6b28830776de6ad7ef1dd8c221e0d53fec4532c623075d0216d937ab82ab284a56a461ce5d4ec77d1783665a262a6a1eb98627b1f6260da55dbb782d7cb75bc4 |
| Billy | WvvnDjwczJy ! dwt4fbd @U ^ | 2847b2605f6a1cd88399e6c9784c0e583799be9485cb128fe5f541f436559067ec32de33e9b3fa2c15b15eec294cf262fd7aab2395dd6dbd9640b4fe6fd |
| papa | QenWM9nxQJ8m @m2 ^F7Kh9* | 165bc06b69fa2bfcd893bfde86358394406c87c7f7abba891cd10ed9fac887c54d52ed14310ad675078033e9bca80084d345fb2836933e55c60f734982430e2b |
| titi | IQUEMGW9M6GW*&V6RG%MZ# | f8eded6c815c7522ab6197aa319d3ff4cddc2c7eeffa0f91c1291603f807a47f320324d2fed1fb3cbfe19524fc5d9c105093f755d76a949efb212fb85c942 |
Dans cette configuration, hashcat a mis 33 secondes pour retrouver les mots de passe. Aucun des hachages n’est référencé sur un moteur de recherche.
Utilisation d’un poivre
Le poivre, quant à lui, est une valeur secrète partagée par tout le système mais stockée à part, dans la configuration ou dans une variable d’environnement. Un attaquant qui n’a accès qu’à la base de données devra aussi retrouver le poivre pour casser les hachages efficacement.
Multiplier les itérations
Autre levier : augmenter le nombre d’itérations du hachage. Cela consiste à appliquer plusieurs fois la fonction de hachage sur le résultat précédent, ce qui ralentit considérablement les tentatives massives de cassage, tout en restant rapide pour l’utilisateur lors de la connexion.
En pratique, le principe est simple :
Tant que le nombre d’itérations n’est pas épuisé, on reprend le hachage précédent et on le re-hache. À chaque itération, la sécurité se renforce, car l’attaquant doit répéter l’opération pour chaque essai, multipliant le temps nécessaire pour casser la base.
Combiner les trois méthodes
En cumulant sel, poivre et itérations, on obtient une stratégie de stockage nettement plus robuste qu’un simple hachage.
Par exemple :
fonction calcul_hash (mot de passe, sel, poivre, itération)
Entrées : mot de passe utilisateur (en clair), sel unique généré aléatoirement, poivre commun au système, nombre d’itérations.
Sortie : hachage du mot de passe.
Processus : le hachage initial est obtenu en combinant sel, mot de passe et poivre avec sha512. Puis, on applique une boucle d’itération où chaque nouveau hachage devient l’entrée du suivant, jusqu’à atteindre le nombre d’itérations souhaité.
Pour vérifier un mot de passe lors de la connexion, il suffit de reproduire la même opération et de comparer le résultat au hachage stocké. Si ça coïncide, l’accès est accordé.
Utilisation de fonctions spécialisées
On pourrait bricoler son propre algorithme, mais pourquoi réinventer la roue alors que des fonctions éprouvées existent ? Les standards actuels s’appellent Argon2, scrypt, PBKDF2, bcrypt…
Ces fonctions présentent plusieurs avantages :
- Elles sont conçues pour être lentes à calculer
- Elles sollicitent fortement la mémoire vive, ce qui met les GPU en difficulté
- Leur configuration permet de choisir le nombre d’itérations pour ajuster la robustesse du hachage
Bcrypt
Bcrypt a été créé par Niels Provos et David Mazières, basé sur l’algorithme Blowfish et présenté lors de la conférence USENIX en 1999.
Au-delà de sa robustesse, bcrypt bénéficie d’implémentations dans de nombreux langages. Sa longévité prouve son efficacité, là où Argon2(i), par exemple, n’est apparu qu’en 2015.
Le hachage bcrypt respecte un format précis :
$2y$11$sxaxzyioy60hbnymeoj9.ulscxwufmhbvlatxat729tgusw.5ag4c
- Algorithme : version utilisée ($2$, $2a$, $2x$, $2y$, $2b$)
- Coût : nombre d’itérations en puissance de 2. Ici, 11 signifie 2^11 soit 2048 itérations.
- Sel : stocké directement dans le hachage final, pas dans une colonne à part.
- Mot de passe haché
Comme bcrypt enregistre le nombre d’itérations, il s’adapte aux évolutions de la puissance de calcul : on peut augmenter ce nombre pour maintenir la difficulté de cassage. Le benchmark suivant montre qu’il faudrait 23 jours à hashcat pour tester tous les mots de passe de la liste rockyou avec bcrypt.
On remarque que les mots de passe faibles comme « azerty » ou « matrice », placés en tête de la liste, sont découverts lors des deux premières heures de test. Les autres résistent bien plus longtemps.
Constat
Ce panorama montre sans détour l’intérêt d’utiliser une fonction de hachage solide et éprouvée. Au-delà de la technique, la question du stockage des mots de passe engage aussi la conformité légale.
Un dernier point saute aux yeux : les mots de passe « azerty » et « matrice » tombent systématiquement, alors que « yep59f$4txwrr » reste introuvable. Puisqu’il n’apparaît dans aucune liste, seule une attaque par force brute exhaustive sur 13 caractères pourrait l’atteindre, ce qui demanderait un temps astronomique. Voilà pourquoi imposer une politique de mots de passe robustes sur une application web n’est pas une simple recommandation, mais une nécessité stratégique. En matière de sécurité, la faiblesse d’un seul mot de passe peut tout faire vaciller.





