Я просматриваю книгу Майкла Хартла (замечательный, бесплатный ресурс, кстати, спасибо, Майкл!), И у меня есть вопрос о солении и хешировании паролей. Смысл использования пароля заключается в том, чтобы помешать хакеру выполнить радужную атаку, которая, если я правильно понимаю, в основном является атакой грубой силы, если хакер может угадать тип используемого шифрования. Чтобы предотвратить такую атаку, используется соль для рандомизации пароля перед его шифрованием, но эта соль должна храниться вместе с зашифрованным паролем? Если так, то если хакер может получить доступ к базе данных и получить зашифрованный пароль, то не могут ли они также получить соль и продолжить свою радужную атаку?
Вот пример кода Майкла этого процесса ...
>> Time.now.utc
=> Fri Jan 29 18:11:27 UTC 2010
>> password = "secret"
=> "secret"
>> salt = secure_hash("#{Time.now.utc}--#{password}")
=> "d1a3eb8c9aab32ec19cfda810d2ab351873b5dca4e16e7f57b3c1932113314c8"
>> encrypted_password = secure_hash("#{salt}--#{password}")
=> "69a98a49b7fd103058639be84fb88c19c998c8ad3639cfc5deb458018561c847"
Большое спасибо!