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