Длина ключа в 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].
Алгоритм NOEKEON в обозначениях C style pseudocode.
Число раундов Nr равно 16. Единственная разница между NOEKEON и его инверсией заключается в вычислении WorkingKey для инверсии NOEKEON и применении раундовых констант.
Раунд преобразования
Каждый раунд алгоритма выполняет следующие действия:
Первое слово входных данных складывается с помощью операции XOR с раундовой константой RC[r], где r — номер текущего раунда.
Над входными словами производится линейное преобразование Theta с участием рабочего ключа WorkingKey.
Первое слово снова складывается с помощью операции XOR с RC[r].
Все функции работают с состоянием State, на который предоставляется указатель. Всегда одна из входных констант задана, как 0. Если раундовое преобразование применяется в прямом шифре, то Constant2 устанавливается в 0, если же раундовое преобразование используется для обратного шифра, то Constant1 = 0.
Gamma
Gamma является инволютивным нелинейным отображением, по сути являющимся простой табличной заменой. Gamma производит независимые операции над 32 подблоками бит, называемыми ящиками. Эти ящики состоят из 4 битов, стоящих на одной и той же позиции в каждом из четырёх 32-битовых слов , то есть ящик с номером i формируется из значениями i-х битов каждого из 32-битных слов:
Пусть далее является i-м битом 32-битного слова , то есть является n-м битом ящика . Тогда Gamma действует на ящики из State следующим образом:
Gamma может быть определена в качестве альтернативы S-блока, применяемого к каждому из ящиков в State, при этом значения каждого ящика в Gamma изменяются следующим образом:
Входное значение
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Выходное значение
7
A
2
C
4
8
F
0
5
9
1
E
3
D
B
6
Theta
Theta является линейным отображением, которое применяется к состоянию State с рабочим ключом k. State является массивом из восьми 16-битных колонок. Каждая колонка состоит из четырех наборов по 4 бит, стоящих в словах на позициях, равных по модулю 8. Например, колонка 5 состоит из битов 5, 13, 21 и 29 слова , битов 5, 13, 21 и 29 слова , битов 5, 13, 21 и 29 слова и битов 5, 13, 21 и 29 слова . Theta выполняет следующую последовательность действий:
Критерии, используемые при разработке преобразования Theta:
Возможность использовать как в прямом, так и в обратном режиме NOEKEON.
Относительно небольшое число выполняемых операций.
Инверсию Theta можно получить, используя алгебраические свойства линейных отображений и тот факт, что первый о последний компоненты Theta коммутируют:
Theta(k’,a);
Новый рабочий ключ k' получается путём применения Theta к начальному ключу k с нулевым рабочим ключом:
Theta(NullVector,k);
Это значит, что инверсия Theta равна самой Theta, только с другим значением рабочего ключа, который можно получить применением Theta к начальному рабочему ключу.
Операции сдвига
Операции сдвига Pi1 и Pi2 выполняют циклические сдвиги в трех из четырех слов с различными значениями смещения. Значения смещения отобраны в соответствии с следующими критериями:
Операция Pi2 должна быть обратной к операции Pi1, чтобы иметь возможность использовать одинаковые раундовые преобразования как в прямом, так и в обратном шифрах.
Все четыре смещения слов в этих операциях должны отличатся по модулю 8.
Смещение нулевого слова a[0] должно равняться нулю.
Массив смещений выбирается из множества массивов, оптимизирующих диффузию в течение одного цикла, при этом выбирается первый из всех получившихся массивов в лексикографическом порядке.
Мерой диффузии является количество ящиков на выходе линейной части алгоритма, изменяющихся под воздействием изменения одного из ящиков на входе. Линейная часть алгоритма представляет собой последовательность функций Pi1, Theta, Pi2. Другими словами, мера диффузии — это количество ненулевых ящиков на выходе при условии, что только один ящик на входе был ненулевым. Благодаря симметрии в этих трех функциях, число ненулевых ящиков на выходе не зависит от положения ненулевого ящика на входе. Число ненулевых ящиков на выходе для массива смещений [0,1,5,2] равно 23, что является наилучшим результатом, удовлетворяющим критериям выбора смещений. Те же утверждения справедливы и для обратных операций.
В прямом режиме (direct mode) рабочий ключ совпадает с секретным, то есть расширение ключа отсутствует:
WorkingKey=CipherKey;
В обоих случаях рабочий ключ не изменяется между раундами.
Раундовые константы
Раундовые константы накладываются в каждом раунде алгоритма на значение слова с помощью операции сложения по модулю 2 и используются в шифре для устранения некоторых свойств симметрии:
Раундовое преобразование выполняется над различными ящиками данных одинаковою.
Раундовые преобразования одинаковы для всех раундов шифра.
Стоит отметить, что только лишь последний байт раундовых констант является ненулевым, то есть в каждом раунде алгоритма с помощью раундовых констант изменяется только четвертый байт слова . Кроме того, значения констант от RC[1] до RC[Nr] в этом байте могут быть вычислены рекурсивным методом. Исходя из этого, раундовые константы можно записать на псевдокоде следующим образом:
Раундовые константы вычисляются таким же образом, как и в алгоритме Rijndael, исключением является заданное значение RC[0].
Криптоанализ алгоритма
На рассмотрение в рамках конкурса NESSIEбыли приняты оба режима алгоритма Noekeon[5]. Оба режима оказались подвержены атаке на основе связанных ключей, которую предложили криптологи Ларс Кнудсен и Håvard Raddum в своей работе[3]. Кроме того, ими же было доказано, что критерии создания таблиц замен в операции Gamma не способствуют высокой криптостойкости алгоритма: при генерации таблицы замен результирующий алгоритм с вероятностью примерно 86 % окажется подвержен линейному и/или дифференциальному криптоанализу. Также было показано, что с большой вероятностью возможно найти связанные ключи. Этих причин оказалось достаточно для невыхода алгоритма Noekeon во второй раунд конкурса.