В настоящий момент я изучаю Rails, но ответ не должен быть специфичным для Rails.
Итак, насколько я понимаю, система безопасных паролей работает так:
- Пользователь создает пароль
- Система шифрует пароль с помощью алгоритма шифрования (скажем, SHA2).
- Хранить хэш зашифрованного пароля в базе данных.
При попытке входа в систему:
- Пользователь пытается войти
- Система создает хэш попытки с тем же алгоритмом шифрования
- Система сравнивает хэш попытки с хешем пароля в базе данных.
- Если совпадают, их впускают. Если нет, им нужно попробовать еще раз.
Насколько я понимаю, этот подход подвержен радужной атаке, при которой может произойти следующее.
Злоумышленник может написать сценарий, который, по сути, пробует каждую перестановку символов, чисел и символов, создает хэш с тем же алгоритмом шифрования и сравнивает их с хешем в базе данных.
Таким образом, можно комбинировать хэш с уникальной солью. Во многих случаях текущая дата и время (с точностью до миллисекунд), регистрируемые пользователем.
Однако эта соль хранится в столбце «соль» базы данных.
Итак, мой вопрос: как это меняет тот факт, что если злоумышленник получил доступ к базе данных в первую очередь и создал хэш для `` настоящего '' пароля, а также имеет хеш для соли, то почему это не так подвержен радужной атаке? Потому что теория будет такова, что он пробует каждую перестановку + хэш соли и сравнивает результат с хешем пароля. Это может занять немного больше времени, но я не понимаю, насколько это надежно.
Простите мое невежество, я просто изучаю этот материал, и это никогда не имело для меня особого смысла.