Pourquoi les mots de passe md5 sont-ils hachés différemment?

22

Je me demande depuis un moment, pourquoi est-ce que l'exécution de "echo 'helloworld' | openssl passwd -1 -stdin" donne des résultats différents à chaque fois? Si je mets des hachages dans mon / etc / shadow, je peux les utiliser comme mon mot de passe et connexion à mon système, comment ça marche?

computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$xlm86SKN$vzF1zs3vfjC9zRVI15zFl1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$/0.20NIp$pd4X9xTZ6sF8ExEGqAXb9/
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$sZ65uxPA$pENwlL.5a.RNVZITN/zNJ1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$zBFQ0d3Z$SibkYmuJvbmm8O8cNeGMx1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$PfDyDWER$tWaoTYym8zy38P2ElwoBe/

Je pense que parce que j'utilise ce hachage pour décrire au système quel doit être mon mot de passe, je dois obtenir les mêmes résultats à chaque fois. Pourquoi pas moi?

Peter
la source
3
S'ils étaient identiques à chaque fois, un attaquant pourrait simplement hacher des milliards de mots de passe courants et les vérifier facilement.
David Schwartz

Réponses:

37

Ils ont tous un sel différent . Un sel unique est choisi à chaque fois, car les sels ne doivent jamais être réutilisés. L'utilisation d'un sel unique pour chaque mot de passe les rend résistants aux attaques de la table arc-en-ciel .

Michael Hampton
la source
6
Il peut être judicieux de mentionner que la sortie inclut le sel après le $ 1 $ (les symboles dollar sont des séparateurs).
poke
6
Donc, dans le hachage de '$ 1 $ xlm86SKN $ vzF1zs3vfjC9zRVI15zFl1' xlm86SKN est le sel et vzF1zs3vfjC9zRVI15zFl1 est le hachage du monde salé?
Peter
2
@Peter: exactement.
Joachim Sauer
3

En effet, si vous fournissez le sel à la ligne de commande, vous obtenez toujours le même résultat.

$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
danidemi
la source