Les meilleures solutions pour stocker ses mots de passe en sécurité

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 :

  1. Il rend la recherche du hachage sur Internet quasi impossible, tant que le sel est suffisamment long et imprévisible.
  2. Les tables arc-en-ciel deviennent inopérantes face à des hachages salés.
  3. 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

  1. Algorithme : version utilisée ($2$, $2a$, $2x$, $2y$, $2b$)
  2. Coût : nombre d’itérations en puissance de 2. Ici, 11 signifie 2^11 soit 2048 itérations.
  3. Sel : stocké directement dans le hachage final, pas dans une colonne à part.
  4. 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.

Ne ratez rien de l'actu

High-Tech 10 Min Read

Spotify and Co : Les 3 meilleures applications de streaming musical testées

Le lecteur MP3 a fait son temps depuis longtemps. De nos jours, la musique vient des

High-Tech 3 Min Read

Arrêt des ventes Apple : Plus d’iPhone 7 et 8 en magasin

Jusqu'à nouvel ordre, il y aura un arrêt de vente Apple en Allemagne : Les modèles

High-Tech 6 Min Read

Samsung Galaxy Fold : A quoi cela sert-il ?

Samsung arrive le premier. Lors du "Unpacked Event" de la série Galaxy S10, les Sud-Coréens surprennent