Попытка понять, как солить и хэшировать пароли в Ruby on Rails - PullRequest
4 голосов
/ 07 марта 2011

Я хожу по книге Майкла Хартла (офигенно, бесплатный ресурс, кстати, спасибо, Майкл!), И у меня есть вопрос о подсоле и хешировании паролей.Смысл присвоения пароля состоит в том, чтобы предотвратить хакерскую атаку «радуга», которая, если я правильно понимаю, по сути является атакой грубой силы, если хакер может угадать тип используемого шифрования.Чтобы предотвратить такой тип атаки, соль используется для рандомизации пароля до его шифрования, но эта соль должна храниться вместе с зашифрованным паролем?Если это так, то если хакер может получить доступ к базе данных и получить зашифрованный пароль, то не может ли он также извлечь соль и продолжить свою радужную атаку?

Вот пример кода Майкла процесса ...

>> 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"

Большое спасибо!

1 Ответ

9 голосов
/ 07 марта 2011

Нет, радужная атака - это не то же самое, что атака грубой силой.

Радужный стол можно представить как большую базу данных строк и их хэшей.Когда кто-то получает доступ к вашей базе данных, он может сравнить хеш-пароль с данными в радужной таблице и легко получить пароль.

Соль предотвращает это, добавляя дополнительные биты к паролю.Если соль достаточно длинная, хэш не будет находиться в таблице радуги.

При использовании атаки методом грубой силы вы должны вычислять хэши, в то время как при атаках радуги у вас уже есть хэши.

Так что да, когда кто-то получает доступ к вашей базе данных, он также может получить вашу соль.Но это не имеет значения, если он уникален для каждой записи.

...