Причины, почему SHA512 превосходит MD5
Мне было интересно, могу ли я причины или ссылки на ресурсы, объясняющие, почему SHA512 является превосходным алгоритмом хэширования для MD5.
7 ответов
Это зависит от вашего варианта использования. Вы не можете широко претендовать на "превосходство". (Я имею в виду, да, вы можете, в некоторых случаях, но быть строгим об этом, вы не можете).
но есть области, где MD5 был сломан:
- для начала: MD5 старый и распространенный. Против него тонны радужных столов, и их легко найти. Так что если вы хэширования паролей (без соли - как вам не стыдно!)- использование md5-вы также можете не хэшировать их, они настолько просты находить. Даже если вы хешируете с простыми солями на самом деле.
- во-вторых, MD5 больше не защищен как криптографическая хэш-функция (действительно, она даже не считается криптографической хэш-функцией, как указывает раздвоенный). Вы можете генерировать различные сообщения, хэш-то же значение. Поэтому, если у вас есть SSL-сертификат с хэшем MD5, я могу создать дубликат сертификата, который говорит, что я хочу, который производит тот же самый хэш -. Это вообще что люди имеют в виду, когда говорят, что MD5 "сломан" - такие вещи.
- в-третьих, подобно сообщениям, вы также можете генерировать разные файлы этот хэш с тем же значением поэтому использование 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% шанс, что они прошли. Существует буквально лучший статистический шанс, что вы на самом деле Иисус.
также важно отметить, что абсолютно любая хэш-функция будет уязвима для столкновений в силу того, что хэш-это: "(маленький) уникальный идентификатор чего-то другого".
при увеличении битового пространства вы уменьшаете скорость столкновения, но также увеличиваете размер 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 имеет шанс столкновения (http://www.mscs.dal.ca / ~selinger / md5collision/) и есть многочисленные таблицы радуги MD5 для обратного поиска пароля в интернете и доступны для загрузки.
Это просто, MD5 сломан ;) (см. Википедия)
Брюс Шнайер писал об атаке, что "[w] e уже знал, что MD5 является сломанной хэш-функцией" и что "никто больше не должен использовать MD5."