В криптографии функция губки или конструкция губки — это любой из класса алгоритмов с конечным внутренним состоянием , которые принимают входной поток бит любой длины и производят выходной поток бит любой желаемой длины. Функции губки имеют как теоретическое, так и практическое применение. Они могут использоваться для моделирования или реализации многих криптографических примитивов , включая криптографические хэши , коды аутентификации сообщений , функции генерации масок , потоковые шифры , генераторы псевдослучайных чисел и аутентифицированное шифрование . [1]
Функция губки состоит из трех компонентов: [2]
S делится на две части: одна размером r (битрейт) и оставшаяся часть размером c (емкость). Эти части обозначаются R и C соответственно.
f производит псевдослучайную перестановку состояний из S.
P добавляет достаточно бит к входной строке, чтобы длина дополненного ввода была кратна битрейту r . Это означает, что ввод сегментируется на блоки по r бит.
Функция губки «поглощает» (в метафоре губки ) все блоки заполненной входной строки следующим образом:
Выходные данные функции губки теперь готовы к производству («выдавливанию») следующим образом:
Если для вывода осталось менее r бит, то R будет усечено ( будет выведена только часть R ).
Другая метафора описывает память состояний как « бассейн энтропии », в который «вливаются» входные данные, а функция преобразования называется «перемешиванием бассейна энтропии». [3]
Обратите внимание, что входные биты никогда не подвергаются операции XOR в части C памяти состояний, и никакие биты C никогда не выводятся напрямую. Степень, в которой C изменяется входными данными, полностью зависит от функции преобразования f. В хэш-приложениях устойчивость к коллизиям или атакам на прообразы зависит от C , а ее размер («емкость» c ) обычно вдвое превышает желаемый уровень устойчивости.
Также возможно попеременно поглощать и сжимать. [1] Эта операция называется дуплексной конструкцией или дуплексированием. Она может быть основой однопроходной аутентифицированной системы шифрования.
Можно опустить операции XOR во время поглощения, сохраняя при этом выбранный уровень безопасности . [1] В этом режиме в фазе поглощения следующий блок ввода перезаписывает часть R состояния. Это позволяет сохранять меньшее состояние между шагами. Поскольку часть R будет перезаписана в любом случае, ее можно отбросить заранее, нужно сохранить только часть C.
Функции губки имеют как теоретическое, так и практическое применение. В теоретическом криптоанализе случайная функция губки представляет собой конструкцию губки, где f — случайная перестановка или преобразование, в зависимости от ситуации. Случайные функции губки охватывают больше практических ограничений криптографических примитивов, чем широко используемая случайная модель оракула , в частности конечное внутреннее состояние. [4]
Конструкция губки также может быть использована для построения практических криптографических примитивов. Например, криптографическая губка Keccak с 1600-битным состоянием была выбрана NIST в качестве победителя в конкурсе SHA-3 . Сила Keccak вытекает из сложной многораундовой перестановки f, которую разработали ее авторы. [5] Редизайн RC4 , называемый Spritz, ссылается на конструкцию губки для определения алгоритма.
В качестве других примеров можно привести функцию губки, которая может использоваться для создания аутентифицированного шифрования с соответствующими данными (AEAD) [3] , а также схем хеширования паролей . [6]