12-06-2009, 12:31 AM
Pour améliorer la sécurité d'une application, on recourt souvent aux grains de sel.
Comme tu le sais : il faut stock des hash des mots de passe pour empêcher qu'un pirate ne découvre le mot de passe d'un utilisateur s'il parvient à pénétrer la base de données. Seulement voilà, les pirates ont généré des rainbow tables. Ces tables associent — pour un algorithme précis (par exemple md5) — une chaîne (donc un mot de passe potentiel) à son hash.
Ces gigantesques tables permettent donc, à partir d'un hash que l'on croyait sûr, de récupérer le mot de passe clair de la personne.
Pour éviter cela, il est utile de définir en dur dans notre application un grain de sel : une chaîne de caractère constante, longue et compliquée que l'on viendra coller au mot de passe avant de hasher le tout (hash = md5(password + salt)). Ainsi, si un pirate obtient le hash du mot de passe salé, sa table ne lui donnera pas le vrai mot de passe de l'utilisateur.
Certains utilisent un grain de sel différent pour chaque utilisateur, ce grain est alors stocké en base de données. Je n'aime pas cette approche.
Sephi-Chan
Comme tu le sais : il faut stock des hash des mots de passe pour empêcher qu'un pirate ne découvre le mot de passe d'un utilisateur s'il parvient à pénétrer la base de données. Seulement voilà, les pirates ont généré des rainbow tables. Ces tables associent — pour un algorithme précis (par exemple md5) — une chaîne (donc un mot de passe potentiel) à son hash.
Code :
a = 0cc175b9c0f1b6a831c399e269772661
b = 92eb5ffee6ae2fec3ad71c777531578f
Ces gigantesques tables permettent donc, à partir d'un hash que l'on croyait sûr, de récupérer le mot de passe clair de la personne.
Pour éviter cela, il est utile de définir en dur dans notre application un grain de sel : une chaîne de caractère constante, longue et compliquée que l'on viendra coller au mot de passe avant de hasher le tout (hash = md5(password + salt)). Ainsi, si un pirate obtient le hash du mot de passe salé, sa table ne lui donnera pas le vrai mot de passe de l'utilisateur.
Certains utilisent un grain de sel différent pour chaque utilisateur, ce grain est alors stocké en base de données. Je n'aime pas cette approche.
Sephi-Chan