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