Comment bien stocker et vérifier un mot de passe

Dernière mise à jour le 16 juin 2009 à 09:46 par sebsauvage
Publié par sebsauvage

Si vous développez une application qui doit gérer les mots de passe, il est important de bien le faire, sous peine de risquer le piratage de votre système et la compromission des données de vos utilisateurs.

Il existe de bonnes pratiques pour stocker un mot de passe.

La bonne manière de stocker


Stockez le login et hash(login+salt+motdepasse)

Pseudo-code: passwordHash = MD5( login + "zo5pro$1pvkhj6*cz4a8ùtvb#ui4oeuio" + motdepasse )
Stockez login et passwordHash. Ne stockez pas motdepasse.

Pourquoi un hash ?


Il ne faut jamais stocker le mot de passe en clair.

Risque: Si quelqu'un s'introduit dans votre base de mots de passe, il pourrait les récupérer directement et les utiliser.

Protection: Le hash permet de calculer une empreinte du mot de passe. Comme l'algorithme n'est pas réversible, on ne peut pas retrouver immédiatement le mot de passe à partir du hash.
C'est pour cela qu'on utilise un hash cryptographique. Typiquement MD5, SHA-1 ou autre (SHA-256, SHA-512...)
Ne jamais utiliser de CRC ou CRC32.

Pourquoi un salt ?


Les rainbow-tables sont de grosses tables contenant des hash (MD5 et autres) précalculées.
Cela permet de retrouver très rapidement le mot de passe qui a donné un hash précis.

Risque: Si vous utilisez juste MD5(motdepasse), les rainbow-tables permettent de retrouver le mot de passe correspondant au MD5 en quelques minutes, voire quelques secondes.

Protection: En utilisant un salt, cela rend les rainbow-tables inutiles. Le salt est une valeur aléatoire, unique et différente pour chaque mot de passe. Pour chaque mot de passe il faut stocker salt, h(salt,password), avec par exemple salt = random()

Pourquoi ajouter le login ?


Si vous stockez juste MD5(salt+motdepasse) ou MD5(motdepasse), cela veut dire que deux utilisateurs ayant le même mot de passe auront le même hash.

Risque: On peut repérer très facilement les utilisateurs ayant le même mot de passe. Si un utilisateur est compromis, cela permet d'accéder immédiatement à d'autres utilisateurs (qui ont peut-être des droits supérieurs).

Protection: En ajoutant le login avant de hasher, la MD5 résultante sera différente pour chaque utilisateur, même s'ils ont le même mot de passe.

Vérification


Lorsque vous recevez login et mot de passe, il vous suffit de refaire le même calcul:
  • Rechercher dans votre base le hash correspondant à ce login
  • Comparer la valeur avec hash(login+salt+motdepasse)
  • Si les deux hash sont identiques, le mot de passe entré est correct.
Meilleures réponses pour « Comment bien stocker et vérifier un mot de passe » dans :
Comment changer mon mot de passe sous WLM/MSN VoirPour changer son mot de passe Windows Live Messenger, il suffit d'utiliser l'interface prévue à cet effet : http://memberservicesnet.passport.net/memberservice.srf?lc=1036 Si vous avez perdu votre mot de passe, merci de vous référer à...
Réinitialiser le mot de passe principal de Firefox VoirVous pouvez demander à Firefox de se souvenir des mots de passe de différents sites à votre place. Tout ces mots de passe sont protégés par un mot de passe principal dans Firefox. Seul problème: Si un jour vous oubliez votre mot de passe principal,...
Mettre un mot de passe dans le compte invité Voirtesté sous vista et xp Attribuer un mot de passe au compte invité vous avez activé le compte invité sur votre ordinateur, mais vous ne voulez pas que tout le monde y accède, donc il faut mettre un mot de passe, sachant que windows ne propose pas...
Mots de passe VoirLes mots de passe Lors de la connexion à un système informatique, celui-ci demande la plupart du temps un identifiant (en anglais login ou username) et un mot de passe (en anglais password) pour y accéder. Ce couple identifiant/mot de passe forme...
Collection CommentÇaMarche.net