Почему пароли md5 хэшируются по-разному?
Некоторое время я задавался вопросом, почему запуск "echo 'helloworld' | openssl passwd -1 -stdin" каждый раз дает разные результаты? Если я добавлю какой-либо из хэшей в мой /etc/shadow, я могу использовать их как свой пароль и логин к моей системе, как это работает?
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/
Я думаю, что поскольку я использую этот хэш, чтобы описать системе, каким должен быть мой пароль, я должен каждый раз получать одни и те же результаты. Почему не я?
2 ответа
Решение
У них у всех разная соль. Уникальная соль выбирается каждый раз, так как соли никогда не следует использовать повторно. Использование уникальной соли для каждого пароля делает их устойчивыми к атакам радужных таблиц.
Действительно, если вы добавите соль в командную строку, вы всегда получите один и тот же результат.
$ 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/