Тривиально использовать безопасную хеш-функцию, такую как SHA-256, и продолжать использовать MD5 для безопасности - это безрассудное поведение. Однако есть некоторые сложности для уязвимостей хэш-функции, которые я хотел бы лучше понять.
Коллизии были сгенерированные для MD4 и MD5. Согласно NIST, MD5 не является защищенной хэш-функцией. Для генерации столкновения требуется 2 39 и никогда не должно используется для паролей. Однако SHA-1 уязвим для аналогичной атаки столкновения, в которой столкновение может быть найдено в операциях 2 69 тогда как грубая сила равна 2 80. Никто не генерировал столкновение SHA-1 и NIST по-прежнему отображает SHA-1 как функцию дайджеста безопасного.
Итак, когда безопасно использовать сломанную хэш-функцию? Несмотря на то, что функция сломана, она все равно может быть "достаточно большой". По словам Шнайера хеш-функция, уязвимая для атаки на столкновение, все еще может использоваться как HMAC. Я считаю, что это связано с тем, что безопасность HMAC зависит от его секретного ключа, и столкновение не может быть найдено до тех пор, пока этот ключ не будет получен. Как только у вас есть ключ, используемый в HMAC, он уже сломан, поэтому это спорный вопрос. Какие уязвимости хэш-функции могут подорвать безопасность HMAC?
Возьмем это свойство немного дальше. Получается ли безопасным использование очень слабых сообщений, таких как MD4 для паролей, если соль добавлена к паролю? Имейте в виду, что атаки MD4 и MD5 являются префиксами атак, и если соль добавляется, злоумышленник не может контролировать префикс сообщения. Если соль действительно секретная и неизвестна злоумышленнику, то имеет значение, если она добавляется к паролю? Можно ли предположить, что злоумышленник не может создать конфликт, пока не будет получено все сообщение?
Знаете ли вы о других случаях, когда сломанная хеш-функция может использоваться в контексте безопасности без введения уязвимости?
(Пожалуйста, отправьте подтверждающие доказательства, потому что это потрясающе!)