Что является грандиозным предприятием с грубой силой на хешах как MD5

Я просто провел некоторое время, читая https://stackoverflow.com/questions/2768248/is-md5-really-that-bad (я настоятельно рекомендую!).

В нем он говорит о хэш-коллизиях. Возможно, я пропускаю что-то здесь, но не можете Вы просто зашифровать Ваш пароль, использующий, скажем, MD5 и затем, скажем, SHA-1 (или любой другой, не иметь значения.) Разве это не увеличило бы вычислительную мощность, требуемую до "в лоб" хеш, и уменьшило бы возможность коллизии?

9
задан Community 23 May 2017 в 02:25
поделиться

6 ответов

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

  1. Столкновения . Если вы запустите sha1 (md5 (text)), вы сначала получите хэш md5, а затем передадите его в sha1. Предположим, функция sha1 имеет 128-битный вывод, а md5 также имеет 128-битный вывод. Ваш шанс столкновения в функции md5 составляет 1/2 ^ 128. Тогда ваш шанс столкновения в sha1 равен 1/2 ^ 128. Если какое-либо из них сталкивается, функция в целом сталкивается, и, следовательно, результат будет (1/2 ^ 128) + (1/2 ^ 128) или 1/2 ^ 127
  2. Грубое форсирование . Запуск sha1 (md5 (text)) только удвоит время, необходимое для поиска исходной строки. Это ничего с точки зрения безопасности. Например, если у вас есть 128-битное выходное пространство для каждого алгоритма и требуется 1 час для грубой силы, тогда потребуется 2 часа, чтобы дважды запустить одну и ту же грубую силу для получения исходной строки. Это будет то же самое, что увеличить пространство вывода до 129 бит.Однако, если вы действительно хотите сделать грубое форсирование невозможным, вам нужно удвоить размер вывода (который можно сравнить с размером ключа при шифровании).
3
ответ дан 3 November 2019 в 00:58
поделиться

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

ваш вопрос:

но нельзя ли просто зашифровать ( хэш ) свой пароль, скажем, MD5, а затем скажем, SHA-1 (или любой другой, не имеет значение.)

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

  1. Для любого данного кода h вычислительно невозможно найти такой x, что H (x) = h, это свойство называется односторонним или устойчивым к прообразу.

  2. Для любого заданного блока x невозможно вычислить y ≠ x с H (y) = H (x). Это свойство упомянутый второй прообраз устойчивый или слабая стойкость к столкновениям

  3. Вычислительно невозможно найти любую грушу (x, y) такую, что Н (х) = Н (у). Это называется сильным стойкость к столкновениям.

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

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

Предположим, что (зашифрованный) секретный ключ пользователя украден, и он, как известно, использует один 200000 английских слов как его пароль. В системе используется 32-битный соль . Соленый ключ теперь исходный пароль, добавленный к этому случайная 32-битная соль. Из-за этого соль, предварительно рассчитанный злоумышленником хэши не представляют никакой ценности. Он должен вычислить хеш каждого слова с помощью каждый из 2 ^ 32 (4,294,967,296) возможных соли добавляются до тех пор, пока не будет найдено совпадение. Общее количество возможных входов можно получить, умножив количество слов в словаре с количество возможных солей: alt text

if H(password+salt)(in system)=H(Your password+salt) (login process)
login else
print<<error
2
ответ дан 3 November 2019 в 00:58
поделиться

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

Это также не имеет ничего общего с тем, насколько легко будет выполнить атаку методом грубой силы. Такая атака будет систематически перебирать все возможные пароли в заданном диапазоне. Таким образом, если ваш пароль - «foobar» и атака проверяет пароль «foobar», не имеет значения, сколько раз вы хешировали пароль, потому что атака грубой силой успешно его угадала.

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

На стороне примечания; Радужные таблицы и аналогичные методы используются хакерами, которые уже получили доступ к вашей базе данных, и предназначены для расшифровки сохраненного пароля. Чтобы усложнить такую ​​атаку, следует использовать статические и динамические соли.

1
ответ дан 3 November 2019 в 00:58
поделиться

Коллизионная атака (например, тип, известный против MD5) не приносит никакой пользы. Чтобы быть эффективными в отношении пароля, вам нужна атака по прообразу (то есть возможность найти некоторый ввод, который будет хешировать известный хеш-код).Хотя известны атаки с использованием прообраза против MD5, в настоящее время они нецелесообразны.

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

2
ответ дан 3 November 2019 в 00:58
поделиться

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

-2
ответ дан 3 November 2019 в 00:58
поделиться

Прежде всего, md5 и sha1 не являются функциями шифрования, это функции дайджеста сообщений. Также большинство хэшей взламываются в реальном мире с помощью словарных атак, таких как John The Ripper и Rainbow Crack.

John The Ripper лучше всего подходит для соленых паролей, когда атакующий знает значение соли. Rainbow Crack хорош для паролей с небольшими неизвестными солями и прямыми хэшами типа md5($pass).

Rainbow Crack занимает много времени на построение таблиц, но после этого пароли взламываются за несколько секунд. Это зависит от скорости ваших дисковых накопителей.

5
ответ дан 3 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: