Я понимаю, что соли делают один и тот же хэш пароля для разных значений. Однако соли обычно хранятся в базе данных с паролем. Допустим, я атакующий, вот как я могу использовать словарную атаку против соли (обратите внимание, что в этом примере я не пишу 128-битные хэши или соли для краткости):
user_pw = 'blowfish'
Given:
email = 'blah@blah.com'
hash = '1234567890'
salt = '0987654321'
function attack(){
for each(word in dictionary)
md5( word * salt ) == hash ? cracked_one(email, word)
}
Я понимаю, что это не позволяет хакерам использовать радужные таблицы ... но, похоже, не предотвращает атаки по словарю. Я думаю, вы могли бы добавить что-то еще в алгоритм хэширования, но с точки зрения безопасности мы должны предположить, что метод атаки известен.
Таким образом, кажется, что засолка не позволяет хакерам выяснить, какие пароли могут быть паролями словаря (те, которые есть у нескольких пользователей), и предотвращает радужные атаки ... но не предотвращает атаки по словарю.
Это правильный анализ? Любые предложения по повышению безопасности?
Спасибо!