NOEKEON — семейство из двух блочных шифров, разработанных Йоаном Дайменом, Michaël Peeters, Gilles Van Assche и Винсентом Рэйменом и представленных в исследовательском проекте NESSIE[1]. Два шифра представляют собой NOEKEON в прямом режиме (direct mode) и в косвенном режиме (indirect mode). Отличаются режимы только процедурой расширения ключа.
Длина ключа в NOEKEON равна 128 битам. В каждом раунде NOEKEON использует последовательность преобразований, обратных самим себе, которые с легкостью могут быть реализованы в аппаратном или программном обеспечении, причем даже в таком, где существует возможность атаки по сторонним каналам. Шифр является компактным в реализации на различных языках программирования, быстро работает на различных аппаратных средствах и является очень эффективным в широком диапазоне платформ[2]. Однако, NOEKEON не отвечал требованиям Wide Trail Design Strategy, что показал криптоанализ, проведенный Ларсом Кнудсеном и Håvard Raddum в апреле 2001. Кнудсен и Raddum показали, что на данный шифр возможна атака на основе связанных ключей[3], из-за чего шифр не прошел отбор в проекте NESSIE.
Алгоритм NOEKEON[4] выполняет 16 раундов преобразований с последующим применением функции Theta
. Блок входных данных State
представляет собой четыре 32-битных слов от a[0]
до a[3]
.
Число раундов Nr
равно 16. Единственная разница между NOEKEON и его инверсией заключается в вычислении WorkingKey
для инверсии NOEKEON и применении раундовых констант.
Все функции работают с состоянием State
, на который предоставляется указатель. Всегда одна из входных констант задана, как 0. Если раундовое преобразование применяется в прямом шифре, то Constant2
устанавливается в 0, если же раундовое преобразование используется для обратного шифра, то Constant1 = 0
.
Gamma является инволютивным нелинейным отображением, по сути являющимся простой табличной заменой. Gamma
производит независимые операции над 32 подблоками бит, называемыми ящиками. Эти ящики состоят из 4 битов, стоящих на одной и той же позиции в каждом из четырёх 32-битовых слов , то есть ящик с номером i формируется из значениями i-х битов каждого из 32-битных слов: