Попытка понять пароли соления и хеширования в Ruby on Rails

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

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

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

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


person BeachRunnerFred    schedule 06.03.2011    source источник


Ответы (1)


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

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

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

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

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

person Bv202    schedule 06.03.2011
comment
Хорошее объяснение. Чтобы добавить, смысл другой соли для каждой записи заключается в том, что даже если злоумышленник успешно взломает пароль с учетом соли и хэша, он все равно скомпрометировал только одну учетную запись. Они должны повторять этот процесс для каждой записи в таблице. - person Michelle Tilley; 07.03.2011