У меня возникли проблемы с пониманием цели соли для пароля. Я понимаю, что основное использование - препятствовать атаке радужного стола. Однако методы, которые я видел для реализации этого, по-видимому, не делают проблему сложнее.
Я видел много учебников, в которых говорилось, что соль используется как следующая:
$hash = md5($salt.$password)
Мысль о том, что хэш теперь отображает не исходный пароль, а комбинацию пароля и соли. Но скажите $salt=foo
и $password=bar
и $hash=3858f62230ac3c915f300c664312c63f
. Теперь кто-то с радужным столом может перевернуть хэш и придумать вход "foobar". Затем они могли попробовать все комбинации паролей (f, fo, foo,... oobar, obar, bar, ar, ar). Для получения пароля потребуется несколько миллисекунд, но не больше.
Другое использование, которое я видел, относится к моей Linux-системе. В /etc/shadow хешированные пароли фактически хранятся вместе с солью. Например, соль "foo" и пароль "bar" будут хешировать: $1$foo$te5SBM.7C25fFDu6bIRbX1
. Если хакер каким-то образом смог получить доступ к этому файлу, я не вижу, с какой целью служит соль, поскольку, как известно, хеш обратного te5SBM.7C25fFDu6bIRbX
содержит "foo".
Спасибо за любой свет, который может пролить на него.
EDIT: Спасибо за помощь. Подводя итог тому, что я понимаю, соль делает хешированный пароль более сложным, что делает его гораздо менее вероятным для существования в предварительно вычисленном радужном столе. То, что я неправильно понял раньше, заключалось в том, что я предполагал, что для всех хешей существовал радужный стол.