Функция губки


В криптографии функция губки (или просто губка) (англ. sponge construction или sponge function) — это класс алгоритмов с конечным внутренним состоянием, на вход которых поступает двоичная строка произвольной длины, и которые возвращают двоичную строку также произвольной длины f:{0,1}n → {0,1}*. Функция губки может использоваться для создания хеш-функций, потоковых и блочных шифров, генераторов псевдослучайных чисел, имеющих произвольную длину входных данных.

Губка — это итеративная конструкция для создания функции с произвольной длиной на входе и произвольной длиной на выходе на основе преобразований f. Губка имеет внутреннее состояние S — с данными фиксированного размера b (бит). При этом данные разделены на 2 части — первая S1 размера r, а вторая S2 — размера c. Значение r называется битовой скоростью, а значение с — мощностью; b = r + c.

На фазе инициализации блок данных размера b заполняется нулями, а входные данные M разбиваются на блоки размера r. Дальнейшая работа губки производится в 2 этапа:

Последние биты c зависят от входных блоков лишь опосредованно и не выводятся в ходе фазы «выжимания» (squeezing).

Определим ГПСЧ с изменяемыми исходными данными как объект с состоянием, который поддерживает два типа запросов, в любом порядке:

Тогда исходный материал (seeding material), подаваемый на вход генератора — это конкатенация σ, полученных во всех запросах подачи.