В Зерно 128апотоковый шифр впервые была представлена на семинаре по симметричному шифрованию ключей (SKEW) в 2011 году.[1] как усовершенствование предшественника Grain 128, в котором были добавлены улучшения безопасности и дополнительная проверка подлинности сообщений с использованием подхода Encrypt & MAC. Одна из важных особенностей Семейство зерна заключается в том, что пропускную способность можно увеличить за счет дополнительного оборудования. Grain 128a разработан Мартином Агреном,[1] Мартин Ад, Томас Йоханссон и Вилли Мейер.
Grain 128a состоит из двух больших частей: функции предварительного вывода и MAC. Функция предварительного вывода имеет размер внутреннего состояния 256 бит, состоящий из двух регистров размером 128 бит: NLFSR и LFSR. MAC поддерживает теги переменной длины w, так что . В шифре используется 128-битный ключ.
Шифр поддерживает два режима работы: с аутентификацией или без нее, которая настраивается через прилагаемый так что если тогда аутентификация сообщения включена, и если аутентификация сообщения отключена.
Функция предварительного вывода
Функция предварительного вывода состоит из двух регистров размером 128 бит: NLFSR () и LFSR () вместе с 2 полиномами обратной связи и и логическая функция .
Помимо полиномов обратной связи, функции обновления для NLFSR и LFSR находятся:
Предварительный поток вывода () определяется как:
Инициализация
Схема, показывающая процедуру запуска предварительного вывода, который направляет поток предварительного вывода обратно в функции и
После инициализации мы определяем 96 бит, где диктует режим работы.
Последний бит 0 гарантирует, что аналогичные пары ключ-IV не производят сдвинутые версии друг друга.
В NLFSR инициализируется путем копирования всего 128-битного ключа () в NLFSR:
за
Запуск синхронизации
Перед тем, как функция предварительного вывода сможет начать вывод своего потока предварительного вывода, его необходимо синхронизировать 256 раз, чтобы прогреться, на этом этапе поток предварительного вывода подается в полиномы обратной связи. и .
Ключевой поток
Ключевой поток () и MAC-адреса в Grain 128a совместно используют один и тот же поток предварительного вывода (). Поскольку аутентификация не является обязательной, определение нашего ключевого потока зависит от .
Когда аутентификация включена, функция MAC использует первый биты (где - это размер тега) после запуска для инициализации. Затем ключевому потоку присваиваются все остальные биты из-за общего потока предварительного вывода.
Если аутентификация включена:
Если аутентификация отключена:
MAC
Вид зерна 128а
Grain 128a поддерживает теги размера до 32 бит, для этого 2 регистра размера используется сдвиговый регистр () и аккумулятор (). Чтобы создать тег сообщения куда это длина как мы должны установить чтобы убедиться, что и имеет разные теги, а также делает невозможным создание тега, который полностью игнорирует ввод из регистра сдвига после инициализации.
Для каждого бита в аккумуляторе мы вовремя мы называем бит в аккумуляторе .
Инициализация
Когда аутентификация включена, Grain 128a использует первый биты потока предварительного вывода () для инициализации сдвигового регистра и аккумулятора. Это делают:
Регистр сдвига:
за
Аккумулятор:
за
Генерация тегов
Регистр сдвига:
В сдвиговый регистр загружаются все нечетные биты потока предварительного вывода ():
Аккумулятор:
за
Заключительный тег
Когда шифр завершит L итераций, последний тег () - это содержимое аккумулятора: