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