Мы изучаем хэш $Ч$ определяется $H(м):=H_2(H_1(м))$, с SHA-256 для $H_1$ и MD5 для $H_2$.
сопротивление столкновению MD5 сильно нарушено, поэтому общий аргумент ¹, что сопротивление столкновению $Ч$ по крайней мере, самое слабое сопротивление столкновению $H_1$ и $H_2$ ведет нас в никуда.
Общий аргумент² о том, что сопротивление первому прообразу $Ч$ по крайней мере, $H_2$ работает в той мере, в какой мы доверяем прообразному сопротивлению MD5; который подвергается сомнению (см. это), но на практике не нарушается.
Единственное, что я могу придумать о сопротивлении второму прообразу $Ч$ заключается в том, что он не может быть лучше, чем сопротивление второго прообраза $H_1$. Это не дает гарантии безопасности, и, поскольку сопротивление второго прообраза SHA-256 считается хорошим, это также не дает атаки.
С прикладной точки зрения (о чем, похоже, и идет речь, поскольку в нем упоминается конкретное приложение) я не вижу, чтобы какие-либо из существующих криптоаналитических атак на MD5 или SHA-256 были актуальны.
- Сопротивление столкновениям MD5 нарушено.Но короткий входной размер MD5 (256-битный выходной размер SHA-256 составляет только половину входного блока MD5) и жесткое ограничение, что этот ввод является хэшем, достаточны, чтобы сделать существующие атаки столкновений MD5 неприменимыми (ограничение тем намного лучше, чем грубая сила).
- И SHA-256, и MD5 имеют нежелательный свойство расширения длины, но фиксированная длина входных блоков MD5 соответствует свойству MD5. И повторное хеширование вывода SHA-256 до блоков вдвое меньше, чем для SHA-256.
Таким образом, единственные криптографически значимые атаки, которые я вижу, — это атаки на идеальные хэши. $H_1$ и $H_2$ с соответствующей выходной шириной. С $H_2$ намного уже, чем $H_1$, атаки грубой силы ограничены шириной $H_2$ и соображений скорости. В частности:
- Составной хэш вопроса имеет ширину всего 128 бит, поэтому коллизии могут отображаться примерно с $2^{66}$ оценки (как SHA-256, так и MD5) с использованием стандарта распределенный поиск столкновений. Я могу представить себе ситуации, когда это низкое сопротивление столкновению является проблемой (и не могу сказать здесь, это зависит от приложения).
- Составной хеш нельзя использовать для растяжка ключей, что было бы необходимо для паролей, потому что это слишком быстро и не требует памяти. Однако нет никаких указаний на то, что растяжка клавиш является обязательным требованием.
В этом составном хэше отсутствует четкий аргумент безопасности, он не очень быстр, особенно для коротких вводов, и плох, по крайней мере, с точки зрения связей с общественностью, потому что MD5 не работает. Насколько я могу судить, это на практике примерно так же хорош, как любой умеренно быстрый 128-битный хеш может быть на всех технический точки зрения, в том числе неудовлетворительные по сопротивлению столкновению (но нет уверенности в том, что сопротивление столкновению является требованием в случае использования).Я не вижу причин использовать этот составной хеш, а не что-то более современное и безопасное, чем MD5, включая какой-нибудь (возможно, усеченный) SHA-2, или SHA-3 SHAKE128 с его настраиваемым размером вывода, или Blake2b (или Blake3 после того, как пыль осядет) .
¹ Предположите столкновение для $Ч$, это $(м,м')$ с $м\не м'$ и $Ч(м)=Ч(м')$. Мы можем вычислить $w=H_1(м)$ и $w'=H_1(m')$. Если $w=w'$, у нас есть коллизия для $H_1$. В противном случае мы имеем $H_2(ш)=H_2(ш')$ с $w\ne w'$, таким образом, столкновение для $H_2$. Таким образом, мы сломали сопротивление столкновению для $H_1$ или же $H_2$.
² Предложите алгоритм, находящий первый прообраз для $Ч$, это дано $ч$ найти $м$ такой, что $Ч(м)=ч$ с незначительной вероятностью и возможными усилиями. Мы можем вычислить $w=H_1(м)$ и это такое, что $ч=H_2(ш)$. Таким образом, мы построили метод нахождения первого прообраза для $H_2$ с той же немаловажной вероятностью успеха и практически с теми же усилиями, что и в гипотетическом алгоритме.
³ Алгоритм нахождения второго прообраза для $H_1$, это дано $м$ найти $m'\ne m$ такой, что $H_1(м)=H_1(м')$, также находит второй прообраз для $Ч$.