Как использование соли делает пароль более безопасным, если он хранится в базе данных?

В данный момент я изучаю Rails, но ответ не должен быть Специфичные для Rails.

Насколько я понимаю, безопасная система паролей работает следующим образом:

  • Пользователь создает пароль
  • Система шифрует пароль с помощью алгоритма шифрования (скажем, SHA2).
  • Хранить хэш зашифрованного пароля в базе данных.

При попытке входа в систему:

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

Насколько я понимаю, этот подход подвержен радужной атаке, при которой может произойти следующее.

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

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

Однако эта соль хранится в столбце «соль» базы данных.

Итак, мой вопрос: как это меняет тот факт, что если злоумышленник получил доступ к базе данных в первую очередь и создал хэш для «настоящего» пароля, а также имеет хеш для соли, как это не так же подвержен атаке радуги? Потому что теория будет такова, что он пробует каждую перестановку + хэш соли и сравнивает результат с хешем пароля. Это может занять немного больше времени, но я не понимаю, насколько это надежно.

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

13
задан Jonathan Leffler 25 June 2015 в 04:44
поделиться