В дополнение к атакам столкновений и прообразов существует также проблема атак с расширением длины (которые я считаю «настоящей» причиной этого свойства SHA3).
Если у вас есть хэш-функция $Ч$ тогда заманчиво лечить $Ч(к,м)$ в качестве MAC $м$, с секретным ключом $к$.
К сожалению, это не приводит к безопасному MAC-адресу, если вы используете хэш-функции предыдущего поколения (SHA1, SHA2).
Атаки на увеличение длины происходят именно потому, что хэш-функция выводит все внутреннее состояние.
Идея атак с увеличением длины заключается в следующем:
если $м$ является префиксом $м'$ затем вывод $Ч(к,м)$ возникает как внутреннее состояние при вычислении $Ч(к,м')$.
Фактически, поскольку $Ч(к,м)$ это весь внутреннее состояние в какой-то момент, тогда вы можете вычислить $Ч(к,м')$ если ты знаешь $Ч(к,м)$ - даже если вы не знаете $к$!
Это нарушает свойство безопасности, которое вы хотели бы получить от MAC (изучение MAC-адреса $м$ не должен помочь вам предсказать MAC другого $м'$, даже если $м$ является префиксом $м'$).
(Здесь я умалчиваю о проблемах заполнения длины, которые не представляют существенного препятствия для той атаки, которую я описываю.)
Во время конкурса SHA3 большинство представленных материалов были спроектированы так, чтобы быть устойчивыми к атакам с расширением длины.
Способ сделать это с помощью так называемой конструкции «широкой трубы»: просто сделайте внутреннее состояние больше, чем вывод.
Иными словами, хэш должен выводить только часть своего внутреннего состояния в конце вычисления.
Если ты это сделаешь, то $Ч(к,м)$ не будет содержать всего необходимого для вычисления $Ч(к,м')$, и это мешает атаке расширения длины.