LOKI97

LOKI97
Создатель Lawrie Brown[англ.]
Создан 1997 г.
Опубликован 1998 г.
Размер ключа 128/192/256 бит
Размер блока 128 бит
Число раундов 16
Тип Сеть Фейстеля

LOKI97 — 128-битный 16-цикловой симметричный блочный шифр с 128-256-битным пользовательским ключом, используемым как для зашифрования, так и для расшифрования сообщений. Разработан Lawrie Brown совместно с J.Pieprzyk и J.Seberry. Имеет структуру сбалансированной петли сети Фейстеля с использованием 16 циклов и сложной функцией f, которая объединяет два S-P слоя.

На данный момент не находит широкого распространения, поскольку имеет сравнительно низкую скорость шифрования, более высокие требования к ресурсам, чем другие участники конкурса AES, и некоторые потенциальные уязвимости.

При разработке LOKI97 были учтены особенности существующих на этот момент симметричных алгоритмов, учтены их уязвимости и достоинства. В частности, в своей статье «Предварительные наброски по доработке LOKI», 15 декабря 1997 года автор алгоритма L. Brown исследует Blowfish, CAST, IDEA, TEA, ICE, SAFER и ряд других алгоритмов. В этой статье были рассмотрены уязвимости исходного алгоритма — LOKI91, предшественника LOKI97, имеющего недостаток в механизме выработки ключей, который позволял, теоретически, использовать механизм «грубой силы» для атаки.

Шифр LOKI97 не патентован, свободен для использования, позиционируется автором как замена DES и другим блочным алгоритмам. Предшественниками являются алгоритмы LOKI89 и LOKI91. Реализован в библиотеке mcrypt, ряде свободных программ шифрования, существует плагин для Total Commander с поддержкой LOKI97.

Криптостойкость

LOKI97 был первым опубликованным кандидатом в конкурсе Advanced Encryption Standard, был в достаточно краткие сроки анализирован и атакован. В работе «Weaknesses in LOKI97»[1] (Rijmen & Knudsen, 1999) было выявлено, что алгоритм имеет ряд недостатков, которые делают его уязвимым для дифференциального и линейного криптоанализа.

Согласно исследованиям, проведенным в рамках конкурса AES, изменение одного бита входных данных в одном из раундов с относительно высокой вероятностью (порядка 2 10 {\displaystyle 2^{-10}} ) повлечет за собой изменение одного бита в выходных данных, что делает дифференциальную атаку успешной как максимум за 2 56 {\displaystyle 2^{56}} попыток. В то же время несбалансированность F-функции делает успешным линейный криптоанализ при известных 2 56 {\displaystyle 2^{56}} шифруемых сообщениях. В то же время автор в описании алгоритма оценивал стойкость LOKI97 на несколько порядков большей (предполагалось, что для взлома необходимо обладать как минимум 2 70 {\displaystyle 2^{70}} шифротекстами). Этот анализ недостатков алгоритма не позволил шифру LOKI97 пройти в следующий тур конкурса AES.

Современный 128-битный блочный шифр должен противостоять дифференциальному и линейному криптоанализу лучше чем LOKI97.

Оригинальный текст (англ.)
A contemporary block cipher with a 128-bit block ought to resist differential and linear attack muck better than LOKI97.

Спецификация алгоритма LOKI97[2]

Схема алгоритма

LOKI97 преобразует 128-битный блок исходного текста в 128 бит шифротекста. Шифрование происходит следующим образом: 128 бит исходного блока [L|R] делится на 2 64-битных слова

L 0 = L {\displaystyle L_{\text{0}}=L}

R 0 = R {\displaystyle R_{\text{0}}=R}

После чего эти слова проходят 16 раундов сбалансированной сети Фейстеля по следующему алгоритму:

R i = L i-1 f ( R i-1 + S K 3i-2 , S K 3i-1 ) {\displaystyle R_{\text{i}}=L_{\text{i-1}}\oplus f(R_{\text{i-1}}+SK_{\text{3i-2}},SK_{\text{3i-1}})}

L i = R i-1 + S K 3i-2 + S K 3i {\displaystyle L_{\text{i}}=R_{\text{i-1}}+SK_{\text{3i-2}}+SK_{\text{3i}}}

Каждый раунд использует как операцию XOR, так и сложение (по модулю 2:64) 64-битных слов, что увеличивает стойкость алгоритма к взлому. Функция F(F,B) обеспечивает максимальное смешивание всех входных битов функции, её описание будет дано ниже. Процесс расшифровки аналогичен алгоритму получения шифртекста: 16 шагов (от 16 до 1го)

R i-1 = L i f ( R i S K 3i , S K 3i-1 ) {\displaystyle R_{\text{i-1}}=L_{\text{i}}\oplus f(R_{\text{i}}-SK_{\text{3i}},SK_{\text{3i-1}})}

L i-1 = R i S K 3i S K 3i-2 {\displaystyle L_{\text{i-1}}=R_{\text{i}}-SK_{\text{3i}}-SK_{\text{3i-2}}}

Инициализация ключей LOKI97

В самом алгоритме используется 256-битный ключ, однако ключ, выданный пользователям может быть 256-ти, 192-х, а также 128-битным. Соответственно, если дан 256-битный ключ [ K a | K b | K c | K d ] {\displaystyle [K_{\text{a}}|K_{\text{b}}|K_{\text{c}}|K_{\text{d}}]} , тогда

[ K 4 0 | K 3 0 | K 2 0 | K 1 0 ] = [ K a | K b | K c | K d ] {\displaystyle [K4_{\text{0}}|K3_{\text{0}}|K2_{\text{0}}|K1_{\text{0}}]=[K_{\text{a}}|K_{\text{b}}|K_{\text{c}}|K_{\text{d}}]}

если дан 192-битный ключ [ K a | K b | K c ] {\displaystyle [K_{\text{a}}|K_{\text{b}}|K_{\text{c}}]} , тогда

[ K 4 0 | K 3 0 | K 2 0 | K 1 0 ] = [ K a | K b | K c | f ( K a , K b ) ] {\displaystyle [K4_{\text{0}}|K3_{\text{0}}|K2_{\text{0}}|K1_{\text{0}}]=[K_{\text{a}}|K_{\text{b}}|K_{\text{c}}|f(K_{\text{a}},K_{\text{b}})]}

и если дан 128-битный ключ [ K a | K b ] {\displaystyle [K_{\text{a}}|K_{\text{b}}]} , тогда

[ K 4 0 | K 3 0 | K 2 0 | K 1 0 ] = [ K a | K b | f ( K b , K a ) | f ( K a , K b ) ] {\displaystyle [K4_{\text{0}}|K3_{\text{0}}|K2_{\text{0}}|K1_{\text{0}}]=[K_{\text{a}}|K_{\text{b}}|f(K_{\text{b}},K_{\text{a}})|f(K_{\text{a}},K_{\text{b}})]}

Для усложнения коротких (128-битных) и простых (например, нулевых) ключей при генерации использовалась функция F, используемая в алгоритме далее.

Для получения промежуточных ключей с одинаковой эффективностью к атакам используется функция g, один из этапов которой — прибавление постоянной, по словам автора «золотого сечения». Полученный на входе ключ проходит через 48 итераций следующих действий (i=1,48), создавая 48 промежуточных ключей S K i {\displaystyle SK_{\text{i}}}

S K i = K 1 i = K 4 i-1 g i ( K 1 i-1 , K 3 i-1 , K 2 i-1 ) {\displaystyle SK_{\text{i}}=K1_{\text{i}}=K4_{\text{i-1}}\oplus g_{\text{i}}(K1_{\text{i-1}},K3_{\text{i-1}},K2_{\text{i-1}})}

K 4 i = K 4 i-1 {\displaystyle K4_{\text{i}}=K4_{\text{i-1}}}

K 3 i = K 3 i-1 {\displaystyle K3_{\text{i}}=K3_{\text{i-1}}}

K 2 i = K 2 i-1 {\displaystyle K2_{\text{i}}=K2_{\text{i-1}}}

,где

g i ( K 1 , K 3 , K 2 ) = f ( K 1 + K 3 + ( Δ i ) , K 2 ) {\displaystyle g_{\text{i}}(K1,K3,K2)=f(K1+K3+(\Delta *i),K2)}

Δ = ( 5 1 ) 2 63 = 9 E 3779 B 97 F 4 A 7 C 15 16 {\displaystyle \Delta =({\sqrt {5}}-1)*2^{\text{63}}=9E3779B97F4A7C15_{\text{16}}}

При дешифровке сообщения промежуточные ключи используются в обратном порядке.

Функция f(A,B)

Функцию можно описать следующим выражением

f ( A , B ) = S b ( P ( S a ( E ( K P ( A , B ) ) ) ) , B ) {\displaystyle f(A,B)=Sb(P(Sa(E(KP(A,B)))),B)} , в котором:

KP(A, B)

Функция перемешивания битов. Разбивает входное 64-битное слово А на 2 32-битных и младшие 32 бита слова В и на выходе дает 64-битный результат согласно формуле:

K P ( [ A l | A r ] , S K r ) = [ ( ( A l & S K r ) ( A r & S K r ) ) ( ( A r & S K r ) ( A l & S K r ) ) ] {\displaystyle KP([A_{l}|A_{r}],SK_{r})=\left[((A_{l}\And \sim SK_{r})\mid (A_{r}\And SK_{r}))\mid ((A_{r}\And \sim SK_{r})\mid (A_{l}\And SK_{r}))\right]}

С помощью обмена битами с промежуточным ключом и частью входных данных, функция KP перермешивает биты для усложнения процесса сопоставления входных и выходных данных поступающих с и на S-блоки.

E(A)

Функция расширения. Преобразует входное 64-битное слово в 96-битное по следующему закону:

[ 4 0 63 56 58 48 52 40 42 32 34 24 28 16 18 8 12 0 ] {\displaystyle \left[4-0\mid 63-56\mid 58-48\mid 52-40\mid 42-32\mid 34-24\mid 28-16\mid 18-8\mid 12-0\right]} .

Функция построена таким образом, что биты каждый бит на её входе попадает в 2 S-блока.

Sa(A), Sb(A)

2 группы S-блоков. Построены так, чтобы иметь максимальную нелинейность (отсюда и выбор кубической функции и нечетная степень поля Галуа), имеют хорошую устойчивость к дифференциальному криптоанализа, а также создают лавинный эффект при использовании функции. Используются блоки разной длины S1 — 13 бит, S2 — 11 бит. S a ( A ) = [ S 1 , S 2 , S 1 , S 2 , S 2 , S 1 , S 2 , S 1 ] {\displaystyle Sa(A)=[S1,S2,S1,S2,S2,S1,S2,S1]} , и S b ( A ) = [ S 2 , S 2 , S 1 , S 1 , S 2 , S 2 , S 1 , S 1 ] {\displaystyle Sb(A)=[S2,S2,S1,S1,S2,S2,S1,S1]} . Входные данные для Sa(C) — 96-битное слово на выходе функции E(B). Старшими битами слова для Sb(C) являются старшие 32 бита слова B, использованого как одно из входных для всей функции F(A,B), а младшими — результат действия функции P(D). Входные данные для S-блоков инвертируются для уменьшения вероятности преобразований вида 0-> 0, 1 -> 1. s-блоки считаются по следующим формулам

S 1 ( x ) = ( ( i n v e r t e d x 1 F F F ) 3   m o d   2911 ) & F F , i n   G F   ( 2 13 ) {\displaystyle S1(x)=((invertedx\oplus 1FFF)^{3}~\mathrm {mod} ~2911)\And FF,in~GF~(2^{13})}

S 2 ( x ) = ( ( i n v e r t e d x 7 F F ) 3   m o d   A A 7 ) & F F , i n   G F   ( 2 11 ) {\displaystyle S2(x)=((invertedx\oplus 7FF)^{3}~\mathrm {mod} ~AA7)\And FF,in~GF~(2^{11})}

Операция A & F F {\displaystyle A\And FF} выбирает 8 младших битов из числа A.

P(A)

Перестановка выходных данных функции Sa(A). 64 бита перемешиваются по следующей схеме:

56 48 40 32 24 16 08 00 57 49 41 33 25 17 09 01
58 50 42 34 26 18 10 02 59 51 43 35 27 19 11 03
60 52 44 36 28 20 12 04 61 53 45 37 29 21 13 05
62 54 46 38 30 22 14 06 63 55 47 39 31 23 15 07

Функция P является основным путём перемешивания битов. При её построении преследовалась цель максимально уменьшить вероятность появления закономерностей в распределении входных и выходных битов. Как и в предыдущих версиях алгоритма, по словам автора, за основу был взят латинский квадрат.

См. также

Примечания

  1. L.R. Knudsen and V. Rijmen, «Weaknesses in LOKI97», Proceedings of the 2nd AES Candidate Conference, Rome, March 22-23, 1999, pp. 168—174
  2. Laurence Brown, Josef Pieprzyk, Introducing the new LOKI97 Block Cipher

Ссылки

  • Домашняя страница LOKI97 (англ.)
  • The design of LOKI97 (англ.)
  • Weakness in LOKI97 (англ.)
Перейти к шаблону «Симметричные криптосистемы»
Потоковые шифры
Сеть Фейстеля
SP-сеть
Другие