21-01-2011, 12:04 AM
(20-01-2011, 11:30 PM)Foxglove a écrit : Dans l'explication, il y a une confusion faite entre "hash" et "salt".
Situation : sauvegarde d'un mot de passe dans un fichier texte (comme dans /etc/passwd) :
user=toto/pass=ab45cd
Problème : n'importe qui ayant accès au fichier en lecture peut trouver facilement le mot de passe.
Solution : ne pas sauvegarder le mot de passe en clair, mais un condensé (HASH) du mot de passe.
Situation : sauvegarde d'un HASH dans un fichier texte
user=toto/pass=#gjaz-
Quand "toto" se connecte, il tape "ab45cd". Le système condense ce mot (HASH("ab45cd")="#gjaz-" dans cet exemple) et le compare à ce qui est dans le fichier. S'il y a égalité, le mot de passe est accepté.
Avantage : le mot de passe n'est pas sauvegardé en clair.
Propriété du HASH : les fonctions de HASH sont dites non inversibles, c'est-à-dire qu'il est très dur de retrouver "ab45cd" à partir de "#gjaz-".
Situation : un attaquant possède un dictionnaire de plusieurs passwords condensés.
Solution : Pour éviter ce problème, on ajoute un salt, c'est-à-dire un nombre arbitraire, au mot de passe (avant de le condenser). Le fichier devient :
user=toto/salt=1534/pass=jz453mlo#kj
Quand "toto" se connecte, il tape "ab45cd". Le système y ajoute le salt, ce qui donne "ab45cd1534", puis condense tout ça, ce qui donne "jz456mlo#kj". Le salt complexifie le mot de passe de l'utilisateur, de manière transparente pour l'utilisateur. Par contre, la taille du dictionnaire nécessaire à l'attaquant est beaucoup plus grande, ce qui rend les attaques par force brute beaucoup moins efficace.
Parfaite explication, puis-je rajouter cela au début de la ressource en te citant ?