LOKI97

Материал из testwiki
Перейти к навигации Перейти к поиску

Шаблон:Карточка блочного шифра

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, изменение одного бита входных данных в одном из раундов с относительно высокой вероятностью (порядка 210) повлечет за собой изменение одного бита в выходных данных, что делает дифференциальную атаку успешной как максимум за 256 попыток. В то же время несбалансированность F-функции делает успешным линейный криптоанализ при известных 256 шифруемых сообщениях. В то же время автор в описании алгоритма оценивал стойкость LOKI97 на несколько порядков большей (предполагалось, что для взлома необходимо обладать как минимум 270 шифротекстами). Этот анализ недостатков алгоритма не позволил шифру LOKI97 пройти в следующий тур конкурса AES. Шаблон:Начало цитаты Современный 128-битный блочный шифр должен противостоять дифференциальному и линейному криптоанализу лучше чем LOKI97. Шаблон:Oq Шаблон:Конец цитаты

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

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

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

L0=L

R0=R

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

Ri=Li-1f(Ri-1+SK3i-2,SK3i-1)

Li=Ri-1+SK3i-2+SK3i

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

Ri-1=Lif(RiSK3i,SK3i-1)

Li-1=RiSK3iSK3i-2

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

В самом алгоритме используется 256-битный ключ, однако ключ, выданный пользователям может быть 256-ти, 192-х, а также 128-битным. Соответственно, если дан 256-битный ключ [Ka|Kb|Kc|Kd], тогда

[K40|K30|K20|K10]=[Ka|Kb|Kc|Kd]

если дан 192-битный ключ [Ka|Kb|Kc], тогда

[K40|K30|K20|K10]=[Ka|Kb|Kc|f(Ka,Kb)]

и если дан 128-битный ключ [Ka|Kb], тогда

[K40|K30|K20|K10]=[Ka|Kb|f(Kb,Ka)|f(Ka,Kb)]

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

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

SKi=K1i=K4i-1gi(K1i-1,K3i-1,K2i-1)

K4i=K4i-1

K3i=K3i-1

K2i=K2i-1

,где

gi(K1,K3,K2)=f(K1+K3+(Δ*i),K2)

Δ=(51)*263=9E3779B97F4A7C1516

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

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

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

f(A,B)=Sb(P(Sa(E(KP(A,B)))),B), в котором:

KP(A, B)

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

KP([Al|Ar],SKr)=[((Al&SKr)(Ar&SKr))((Ar&SKr)(Al&SKr))]

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

E(A)

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

[40635658485240423234242816188120].

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

Sa(A), Sb(A)

2 группы S-блоков. Построены так, чтобы иметь максимальную нелинейность (отсюда и выбор кубической функции и нечетная степень поля Галуа), имеют хорошую устойчивость к дифференциальному криптоанализа, а также создают лавинный эффект при использовании функции. Используются блоки разной длины S1 — 13 бит, S2 — 11 бит. Sa(A)=[S1,S2,S1,S2,S2,S1,S2,S1], и 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-блоки считаются по следующим формулам

S1(x)=((invertedx1FFF)3mod2911)&FF,inGF(213)

S2(x)=((invertedx7FF)3modAA7)&FF,inGF(211)

Операция A&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