Мне было интересно, могу ли я объяснить причины или ссылки на ресурсы, объясняющие, почему SHA512 является превосходным алгоритмом хэширования для MD5.
Причины, по которым SHA512 превосходит MD5
Ответ 1
Это зависит от вашего варианта использования. Вы не можете в целом требовать "превосходства". (Я имею в виду, да, в некоторых случаях вы можете, но строго соблюдать это, вы не можете).
Но есть области, где MD5 был сломан:
- Для начала: MD5 является старым и распространенным. Есть много радужных столов против него, и их легко найти. Поэтому, если вы используете хеширование паролей (без соляного позора на вас!) - используя md5 - вы также не можете их хешировать, их так легко найти. Даже если вы действительно хешируете с помощью простых солей.
- Во-вторых, MD5 больше не защищен как криптографическая хеш-функция (на самом деле это даже не считается криптографической хэш-функцией, как указывает Forked One). Вы можете генерировать разные сообщения, содержащие хеш, для одного и того же значения. Поэтому, если у вас есть сертификат SSL с хешем MD5, я могу создать дубликат сертификата, который говорит, что я хочу, который производит тот же хеш. Обычно это означает, что люди говорят, что MD5 "сломан" - такие вещи.
- В-третьих, подобно сообщениям, вы также можете генерировать разные файлы этот хэш с тем же значением, поэтому использование MD5 в качестве контрольной суммы файла "сломан".
Теперь SHA-512 является SHA-2 Family хеш-алгоритмом. SHA-1 в наши дни рассматривается как "э", я проигнорирую его. Однако SHA-2 имеет относительно небольшое количество атак против него. В главной википедии есть атака с заклинанием с уменьшенным кругом, что означает, что если вы используете SHA-512 ужасно неправильно, я могу сломать его, Обидно, вы вряд ли будете использовать его таким образом, но атаки только улучшатся, и это хороший трамплин для дальнейшего исследования, чтобы разбить SHA-512 таким же образом, как MD5 нарушен.
Однако, из всех доступных функций Hash, семейство SHA-2 в настоящее время является самым сильным, и лучший выбор, учитывая общность, анализ и безопасность. (Но не обязательно скорость. Если вы во встроенных системах, вам нужно выполнить весь другой анализ.)
Ответ 2
MD5 был криптографически сломан в течение некоторого времени. Это в основном означает, что некоторые свойства, обычно гарантированные хэш-алгоритмами, больше не выполняются. Например, можно найти хеш-коллизии за гораздо меньшее время, чем потенциально необходимо для выходной длины.
SHA-512 (одно из семейств хэш-функций SHA-2) на данный момент является достаточно надежным, но, возможно, не намного дольше в обозримом будущем. Вот почему NIST начал конкурс на SHA-3.
Как правило, вы хотите, чтобы хеш-алгоритмы были односторонними. Они отображают некоторый вклад в некоторый вывод. Обычно выход имеет фиксированную длину, тем самым обеспечивая "переваривание" исходного ввода. Обычными свойствами являются, например, небольшие изменения ввода, что приводит к большим изменениям в выходе (что помогает обнаружить фальсификацию) и что функция нелегко обратима. Для последнего свойства длина вывода значительно помогает, поскольку она обеспечивает теоретическую верхнюю границу сложности атаки при столкновении. Однако недостатки в дизайне или реализации часто приводят к уменьшению сложности атак. Как только они известны, пришло время оценить, все еще использует хэш-функцию. Если сложность атаки падает достаточно далеко, практические атаки легко попадают в круг людей без специализированного вычислительного оборудования.
Примечание. Я говорил только об одном виде атаки здесь. Реальность, если намного больше нюансировать, но также намного сложнее понять. Поскольку хеш-функции очень часто используются для проверки целостности файлов и сообщений, предмет столкновения, вероятно, самый простой способ понять и следовать.
Ответ 3
Есть несколько пунктов, которые здесь не рассматриваются, и я чувствую, что это из-за недостаточного понимания того, что такое хэш, как он работает и сколько времени требуется для успешной атаки на них, используя радугу или любой другой метод в настоящее время известно человеку...
Математически говоря, MD5 не "сломан", если вы соедините попытки хеша и дросселя (даже на 1 секунду), ваша безопасность будет такой же "сломанной", как если бы злоумышленник медленно опустился на вашу 1-футовую твердую сталь стена с деревянной ложкой:
Это займет тысячи лет, и к тому времени все вовлеченные будут мертвы; есть более важные вещи, о которых можно беспокоиться.
Если вы заблокируете свою учетную запись 20-й попыткой... проблема решена. 20 попаданий на вашу стену = 0.0000000001% шанс, что они прошли. Существует буквально лучший статистический шанс, что вы на самом деле являетесь Иисусом.
Также важно отметить, что абсолютно любая хэш-функция будет уязвима для коллизий в силу того, что хэш: "(маленький) уникальный идентификатор чего-то другого".
Когда вы увеличиваете пространство бит, вы уменьшаете скорость столкновений, но также увеличиваете размер идентификатора и время, необходимое для его вычисления.
Проделайте крошечный мысленный эксперимент...
SHA-2, если он существовал, имел бы 4 полных возможных уникальных идентификатора для чего-то еще... 00, 01, 10 и 11. Это приведет к возникновению столкновений, очевидно. Вы видите здесь проблему? Хэш - это всего лишь сгенерированный идентификатор того, что вы пытаетесь идентифицировать.
MD5 на самом деле действительно, действительно хорош в случайном выборе числа на основе ввода. SHA на самом деле не намного лучше в этом; SHA просто имеет больше места для идентификаторов.
Используемый метод составляет около 0,1% от причины, когда столкновения менее вероятны. Реальная причина - это большее битовое пространство.
Это буквально единственная причина, по которой SHA-256 и SHA-512 менее уязвимы для столкновений; потому что они используют большее пространство для уникального идентификатора.
Фактические методы использования SHA-256 и SHA-512 для генерации хэша на самом деле лучше, но не намного; те же самые радужные атаки будут работать на них, если у них будет меньше бит в их идентификаторах, а файлы и даже пароли могут иметь идентичные идентификаторы с использованием SHA-256 и SHA-512, это намного менее вероятно, потому что оно использует больше бит.
REAL ISSUE - это то, как вы реализуете свою безопасность
Если вы разрешаете автоматическим атакам ударить вашу конечную точку аутентификации 1000 раз в секунду, вы будете разбиты. Если вы дросселируете до 1 попытки за 3 секунды и заблокируете учетную запись в течение 24 часов после 10-й попытки, вы не будете.
Если вы храните пароли без соли (соль является просто дополнительным секретом для генератора, что затрудняет идентификацию плохих паролей, таких как "31337" или "пароль" ), и у вас много пользователей, вы собираетесь взломать. Если вы соедините их, даже если вы используете MD5, вы не.
Учитывая, что MD5 использует 128 бит (32 байта в HEX, 16 байтов в двоичном формате), а SHA 512 - всего 4 раза, но практически исключает коэффициент столкновения, предоставляя вам 2 ^ 384 более возможных идентификатора... Идите с SHA- 512, каждый раз.
Но если вы беспокоитесь о том, что действительно произойдет, если вы используете MD5, и вы не понимаете реальных, реальных различий, вы все равно, вероятно, будете взломаны, понятны?
Ответ 4
Однако было показано, что MD5 не устойчив к столкновениям.
Ответ 5
MD5 имеет вероятность столкновения (http://www.mscs.dal.ca/~selinger/md5collision/), и есть множество радужных таблиц MD5 для обратного просмотра пароля в Интернете и доступно для загрузки.
Ответ 6
Ему нужен гораздо больший словарь для отображения назад и имеет более низкий шанс столкновения.
Ответ 7
Это просто, MD5 сломан;) (см. Wikipedia)
Брюс Шнайер писал об атаке, что "[уже] знал, что MD5 является сломанной хэш-функцией" и что "никто больше не должен использовать MD5".