THE INFORMATIQUE

THE INFORMATIQUE

Comment bien stocker et vérifier un mot de passe

 

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'estpas 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 choisie au hasard. Sans un salt, un mot de passe comme "toto" sera immédiatement trouvé dans les rainbow tables. Avec un salt, non. 
Votre salt peut être le même pour tous les utilisateurs, ou différent pour chaque utilisateur (il faut alors stocker le salt avec le login). 

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.


13/12/2012
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 2 autres membres