почему соль не помогла при использовании атаки по словарю - PullRequest
2 голосов
/ 10 февраля 2012

С этого сайта http://codahale.com/how-to-safely-store-a-password/:

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

Если соль бесполезна для предотвращения атаки по словарю, зачем использовать соль?

Ответы [ 9 ]

6 голосов
/ 10 февраля 2012

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

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

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

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

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

1 голос
/ 10 февраля 2012

В целях иллюстрации, скажем, вы используете 2-символьную строку для солей, которые могут быть случайным элементом из набора
salts = {'00', '01', '02'...... '99'}

Используемая вами формула:

salt = salts[rnd(100)]      # gets a random element from the set above, say '87' 
password_hash = MD5(password + salt) # say the hash is 'dai480hgld0'

После этого вы сохраните хеш и соль в своей базе данных, что-то вроде

+---------------------------+
| password_hash      |  salt|
+---------------------------+
| dai480hgld0        |  87  |
| sjknigu2948        |  23  |
| .                  |  .   |
| .                  |  .   |
+--------------------+------+

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

С учетом этой информации, чтобы взломать ваш пароль (который имеет хеш: 'dai480hgld0') он должен будет сделать следующее:

for word in dictionary_words #iterate over all the words in dictionary
  for salt in salts          #iterate over all possible salts (100 iterations)
     password_hash = MD5(word + salt)
     if password_hash == 'dai480hgld0'
       print "The password is " + word
       exit()  
     endif
  next
next

Обратите внимание, что если бы вы вообще не использовали соль , алгоритм был бы

for word in dictionary_words #iterate over all the words in dictionary
  password_hash = MD5(word)
  if password_hash == 'dai480hgld0'
    print "The password is " + word
    exit()  
  endif
next

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

Итак, чтобы сделать вывод:

  • Соли - это хорошо.Они делают ваши пароли трудно взломать.Даже если ваши пользователи вводят слабые пароли, соль гарантирует, что полученные хеши не будут доступны для поиска.Например, его легко найти в хэше «3cc31cd246149aec68079241e71e98f6», который на самом деле является довольно сложным паролем и соответствует практически всем политикам паролей.Для взлома не требуется ни одной строки кода!

  • Соли не являются панацеей.Они просто увеличивают время, необходимое взломщику для взлома ваших паролей.Однако, если у вас достаточно большое адресное пространство, значит, вы довольно хороши.Например, если у вас есть 32-символьная буквенно-цифровая строка в качестве соли - грубая сила действительно займет очень много времени.

  • Медленные алгоритмы, такие как bcrypt, помогут вам в этом только потому, что они хорошо ... "медленны".Для атаки методом грубой силы потребуется нереально много времени, чтобы разбить хэши, которые медленно вычисляются.
1 голос
/ 10 февраля 2012

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

1 голос
/ 10 февраля 2012

Если у «злоумышленника» есть хэш пароля (и соль), используемый вашим сайтом / приложением, он просто перебирает «соль» + «пароль».

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

0 голосов
/ 10 февраля 2012

Два комментария:

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

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

0 голосов
/ 10 февраля 2012

Теперь это не похоже на вопрос программирования, поэтому я просто дам вам некоторую информацию о защите и шифровании:

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

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

0 голосов
/ 10 февраля 2012

Это не совсем точно, так как в большинстве случаев это зависит от вашего предположения.

Основными предположениями являются:

  1. Атакующий имеет соль
  2. вычисление хеш«на лету» делается довольно быстро (так как с солью ему нужно будет пересчитать все и не сможет использовать предопределенные списки)
  3. одна и та же соль для каждого пользователя.
0 голосов
/ 10 февраля 2012

Это относится к security.stackexchange.com

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

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

Если использовать очень быстрыйалгоритм, то это время довольно мало.Если использовать чрезвычайно медленный алгоритм, тогда, очевидно, гораздо больше времени, чтобы найти хит.

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

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

Хешированные пароли, независимо от используемого механизма, небезопасны в том смысле, что большинство людей принимают это слово.Безопасность не означает «никогда не может быть взломан».Скорее это означает, что «это будет дорого с точки зрения времени / усилий для взлома».Для большинства хакеров они хотят низко висящие фрукты, такие как только открытый текст.Для некоторых они пойдут на любую крайность, такую ​​как построение огромных радужных таблиц на единицу соли, чтобы получить их все.

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

0 голосов
/ 10 февраля 2012

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

...