Последние несколько дней это ошеломляло меня и моих коллег, поскольку два разных подхода противоречат друг другу.
Причина в том, что эти два подхода предполагают разные определения «устойчивости к коллизиям»; эти два определения не эквивалентны; то есть мы можем найти функции, которые соответствуют одному определению, но не соответствуют другому.
В первой попытке используется определение «нет присоединения для обнаружения столкновений, которое занимает меньше, чем $\mathcal{O}(2^{n/2})$ операции; так как $n$ исправлено, мы используем это как сокращение для «атака занимает $c2^{n/2}$ операции, для некоторых $с$ недалеко от 1 и некоторое разумное определение операции (в данном случае оценка хеш-функции).
Проблема с этим определением заключается в том, что оно приводит к некоторым абсурдным выводам, например, SHA-256, усеченный до 8 бит, является «устойчивым к коллизиям» по этому определению. С другой стороны, вывод SHAKE-256 объемом 1 кбайт не является «устойчивым к коллизиям», потому что вы можете найти коллизии с гораздо меньшим, чем $2^{8192/2}$ хеш-оценки.
Напротив, подход 2 использует определение «хэш-функция устойчива к коллизиям, если мы не можем найти коллизию». Выразить это формально немного сложно (поскольку входные данные могут быть длиннее выходных, должны быть коллизии, мы просто не знаем, что они собой представляют), а также потому, что это связано с вычислительными ресурсами. у нас есть (прямо сейчас SHA-256, усеченный до 200 бит, устойчив к коллизиям; возможно, это произойдет не через 20 лет, когда мы получим больше вычислительной мощности); с другой стороны, это ближе к интуитивному понятию «устойчивости к столкновениям», которое у нас есть.
При таком определении подход 2 можно было бы переформулировать так: «если мы предположим, $H'$ не устойчив к столкновению, то мы знаем $х\не у$ с $Н'(х) = Н'(у)$. Тогда либо $h_2(x) = h_2(y)$ (и, следовательно $h_2$ не устойчив к столкновению, поскольку мы знаем столкновение), или $h_2(x) \ne h_2(y)$, и в этом случае имеем $h_1(u) = h_1(v)$ за $u = h_2(x), v = h_2(y), u \ne v$ (и, следовательно $h_1$ не является устойчивым к столкновению, поскольку мы знаем столкновение).