Защищены ли хешированные и защищенные пароли от атак по словарю? - PullRequest
9 голосов
/ 10 июля 2009

Я понимаю, что соли делают один и тот же хэш пароля для разных значений. Однако соли обычно хранятся в базе данных с паролем. Допустим, я атакующий, вот как я могу использовать словарную атаку против соли (обратите внимание, что в этом примере я не пишу 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)
}

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

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

Это правильный анализ? Любые предложения по повышению безопасности?

Спасибо!

Ответы [ 5 ]

10 голосов
/ 10 июля 2009

Соль не предотвращает атаки по словарю, только предварительно рассчитанные атаки по словарю. В частности, он защищает от радужных таблиц (http://en.wikipedia.org/wiki/Rainbow_table)), а также гарантирует, что взлом пароля одного пользователя автоматически не позволит взломать любого пользователя, который разделяет этот пароль.

В статье, на которую я ссылаюсь, упоминаются некоторые способы улучшения посола, в том числе усиление ключа (http://en.wikipedia.org/wiki/Key_strengthening).

4 голосов
/ 10 июля 2009

Ничто не мешает злоумышленнику просто угадать пароль.

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

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

В основном, прочитайте это .

1 голос
/ 10 июля 2009

Без соли злоумышленник может сгенерировать хэши для каждого слова в своем словаре, а затем запустить новый словарь для своего списка паролей

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

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

Причина, по которой радужные таблицы перестают работать с солью, заключается в том, что процесс повторного создания будет «миллиардами записей» пересчета, в то время как словарные атаки по-прежнему составляют «несколько миллионов записей». Соль просто блокирует предварительно вычисленные значения

1 голос
/ 10 июля 2009

Это верно. Если кто-то получит материал с паролем, атака по словарю будет эффективной.

Чтобы защититься от этого:

  • Убедитесь, что ваши пароли не подвержены атакам по словарю.
  • Убедитесь, что ваш пароль (/etc/shadow) доступен для чтения только пользователю root.
0 голосов
/ 10 июля 2009

Ваша логика логична, но на самом деле, при достаточной вычислительной мощности и времени нет защиты от словарных / грубых атак.

...