Причины, почему SHA512 превосходит MD5

Мне было интересно, могу ли я причины или ссылки на ресурсы, объясняющие, почему SHA512 является превосходным алгоритмом хэширования для MD5.

7 ответов


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

но есть области, где MD5 был сломан:

  1. для начала: MD5 старый и распространенный. Против него тонны радужных столов, и их легко найти. Так что если вы хэширования паролей (без соли - как вам не стыдно!)- использование md5-вы также можете не хэшировать их, они настолько просты находить. Даже если вы хешируете с простыми солями на самом деле.
  2. во-вторых, MD5 больше не защищен как криптографическая хэш-функция (действительно, она даже не считается криптографической хэш-функцией, как указывает раздвоенный). Вы можете генерировать различные сообщения, хэш-то же значение. Поэтому, если у вас есть SSL-сертификат с хэшем MD5, я могу создать дубликат сертификата, который говорит, что я хочу, который производит тот же самый хэш -. Это вообще что люди имеют в виду, когда говорят, что MD5 "сломан" - такие вещи.
  3. в-третьих, подобно сообщениям, вы также можете генерировать разные файлы этот хэш с тем же значением поэтому использование MD5 в качестве контрольной суммы файла "сломано".

теперь, SHA-512 является семья ша-2 хэш. Ша-1 в наши дни считается "Эх", я его проигнорирую. Однако SHA-2 имеет относительно мало атак против него. Главный из них-Википедия о уменьшенный раунд preimage атаки это означает, что если вы используете SHA-512 ужасно неправильно, я могу его сломать. Obivously вы вряд ли будете использовать его таким образом, но атаки только улучшаются, и это хороший трамплин для большего количества исследований, чтобы сломать SHA-512 таким же образом, как MD5 сломан.

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


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

SHA-512 (один из семейства хэш-функций SHA-2) на данный момент достаточно безопасен, но, возможно, не намного дольше в обозримом будущем. Вот почему NIST начал конкурс на Ша-3.

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

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


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

математически говоря, MD5 не "сломан", если вы солите хэш и попытки дроссельной заслонки (даже на 1 секунду), ваша безопасность будет такой же "сломанной", как и атакующий, медленно разбрасывающийся по вашей твердой стальной стене 1ft деревянной ложкой:

Если вы заблокируете свой аккаунт с 20-й попытки... проблема решена. 20 ударов по вашей стене = 0.0000000001% шанс, что они прошли. Существует буквально лучший статистический шанс, что вы на самом деле Иисус.

You're thinking about it wrong.

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

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

давайте сделаем крошечный мысленный эксперимент...

SHA-2, если бы он существовал, имел бы 4 возможных уникальных идентификатора для чего-то другого... 00, 01, 10 и 11. Очевидно, это приведет к столкновениям. Вы видите проблему здесь? Хэш-это просто сгенерированный идентификатор того, что вы пытаетесь идентифицировать.

MD5 на самом деле очень, очень хорош в случайном выборе числа на основе ввода. SHA на самом деле не намного лучше; у SHA просто больше места для идентификаторов.

используемый метод составляет около 0,1% от причины, по которой столкновения менее вероятны. Настоящая причина - большее битовое пространство.

Это буквально единственная причина, по которой SHA-256 и SHA-512 меньше уязвимы для столкновений; потому что они используют большее пространство для уникального идентификатора.

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

реальная проблема заключается в том, как вы реализуете безопасность

Если вы позволяете автоматическим атакам поражать вашу конечную точку аутентификации 1,000 раз в секунду, вы будете взломаны. Если вы дросселя с 1 попытки за 3 секунды и блокировку аккаунта на 24 часа после 10-й попытки, ты не.

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

учитывая, что MD5 использует 128 бит (32 байта в шестнадцатеричном, 16 байтов в двоичном), а SHA 512-только 4X пространство, но практически устраняет коэффициент столкновения, предоставляя вам 2^384 более возможных идентификаторов... Идите с SHA-512, каждый раз.

но если вы беспокоитесь о том, что действительно произойдет, если вы используете MD5, и вы не понимаете реальных, реальных различий, вы все равно, вероятно, будете взломаны, сделайте смысл?


читать это

однако было показано, что MD5 не устойчив к столкновениям

больше информации о столкновении здесь


MD5 имеет шанс столкновения (http://www.mscs.dal.ca / ~selinger / md5collision/) и есть многочисленные таблицы радуги MD5 для обратного поиска пароля в интернете и доступны для загрузки.


ему нужен гораздо больший словарь для отображения назад и имеет меньшую вероятность столкновения.


Это просто, MD5 сломан ;) (см. Википедия)

Брюс Шнайер писал об атаке, что "[w] e уже знал, что MD5 является сломанной хэш-функцией" и что "никто больше не должен использовать MD5."