LOKI97

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

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

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

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

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

~L_{\text{0}}=L

~R_{\text{0}}=R

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


~R_{\text{i}} = L_{\text{i-1}} \oplus f(R_{\text{i-1}}+SK_{\text{3i-2}},SK_{\text{3i-1}})

~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_{\text{i-1}} = L_{\text{i}} \oplus f(R_{\text{i}}-SK_{\text{3i}},SK_{\text{3i-1}})

~L_{\text{i-1}} = R_{\text{i}}-SK_{\text{3i}}-SK_{\text{3i-2}}

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

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

[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_{\text{a}}|K_{\text{b}}|K_{\text{c}}], тогда

[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_{\text{a}}|K_{\text{b}}] , тогда

[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 промежуточных ключей SK_{\text{i}}

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}})

~K4_{\text{i}} = K4_{\text{i-1}}

~K3_{\text{i}} = K3_{\text{i-1}}

~K2_{\text{i}} = K2_{\text{i-1}}

,где

~g_{\text{i}}(K1,K3,K2)=f(K1+K3+(\Delta*i),K2)

~\Delta = (\sqrt{5}-1)*2^{\text{63}} = 9E3779B97F4A7C15_{\text{16}}

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

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

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

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


KP(A, B)

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

 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-битное по следующему закону:

\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 бит. ~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). Cтаршими битами слова для Sb(C) являются старшие 32 бита слова B, использованого как одно из входных для всей функции F(A,B), а младшими — результат действия функции P(D). Входные данные для S-блоков инвертируются для уменьшения вероятности преобразований вида 0-> 0, 1 -> 1. s-блоки считаются по следующим формулам

    S1(x) = ((inverted x \oplus 1FFF)^3 ~\mathrm{mod}~ 2911) \And FF,  in ~GF~(2^{13})

    S2(x) = ((inverted x \oplus  7FF)^3~ \mathrm{mod}~  AA7) \And FF,  in~ GF~(2^{11})

Операция 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 является основным путем перемешивания битов. При ее построении преследовалась цель максимально уменьшить вероятность появления закономерностей в распределении входных и выходных битов. Как и в предыдущих версиях алгоритма, по словам автора, за основу был взят латинский квадрат.

Пример использования алгоритма

Ключ: 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F

Текст: 000102030405060708090A0B0C0D0E0F

Шифр: 75080E359F10FE640144B35C57128DAD

См. также

Примечания

  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

Ссылки




Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "LOKI97" в других словарях:

  • LOKI97 — Infobox block cipher name = LOKI97 caption = The LOKI97 round function designers = Lawrie Brown, assisted by Jennifer Seberry and Josef Pieprzyk publish date = 1998 derived from = LOKI91 derived to = key size = 128, 192 or 256 bits block size =… …   Wikipedia

  • LOKI97 — LOKI971 Résumé Concepteur(s) Lawrie Brown, Josef Pieprzyk et Jennifer Seberry Première publication 1997 Dérivé de LOKI91 Chiffrement(s) basé(s) sur cet algorithme Aucun …   Wikipédia en Français

  • LOKI — LOKI97 LOKI971 Résumé Concepteur(s) Lawrie Brown, Jo …   Wikipédia en Français

  • LOKI89/91 — Résumé Concepteur(s) Lawrie Brown, Josef Pieprzyk et Jennifer Seberry Première publication 1990 Dérivé de Data Encryption Standard Chiffrement(s) basé(s) sur cet algorithme LOKI97 …   Wikipédia en Français

  • LOKI91 — LOKI89/91 LOKI89/91 Résumé Concepteur(s) Lawrie Brown …   Wikipédia en Français

  • LOKI (cryptographie) — LOKI89/91 LOKI89/91 Résumé Concepteur(s) Lawrie Brown …   Wikipédia en Français

  • AES-128 — Advanced Encryption Standard process Le Advanced Encryption Standard process est un processus de standardisation lancé par le NIST en 1997 pour demander aux cryptologues de concevoir un nouvel algorithme de chiffrement par bloc destiné au… …   Wikipédia en Français

  • Advanced Encryption Standard Process — Le Advanced Encryption Standard process est un processus de standardisation lancé par le NIST en 1997 pour demander aux cryptologues de concevoir un nouvel algorithme de chiffrement par bloc destiné au gouvernement des États Unis. Le but était de …   Wikipédia en Français

  • Advanced Encryption Standard process — Le Advanced Encryption Standard process est un processus de standardisation lancé par le NIST en 1997 pour demander aux cryptologues de concevoir un nouvel algorithme de chiffrement par bloc destiné au gouvernement des États Unis. Le but était de …   Wikipédia en Français

  • Advanced encryption standard process — Le Advanced Encryption Standard process est un processus de standardisation lancé par le NIST en 1997 pour demander aux cryptologues de concevoir un nouvel algorithme de chiffrement par bloc destiné au gouvernement des États Unis. Le but était de …   Wikipédia en Français


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»