- несколько возможных расширений этих атак. DEAL-192 может быть дешифрован до четырех циклов, а затем может быть применена атака Бихама (Biham's) на четырехцикловый цепной DES; DEAL-256 может быть дешифрован до шести циклов, а затем может быть применена атака на шестицикловый DEAL-192 подробнее эта операция описана [15].
Эти результаты интересны как для практики, так и для теории. Похоже, что DEAL будет иметь некоторое применение в будущем. DEAL кандидат на AES, но даже если он не станет финалистом, он почти наверняка будет использоваться. Как было указано на первой конференции по AES, широкое распространение "железа под DES" делает DEAL относительно легким для реализации во многих устройствах за очень низкую цену.
В реальном применении эквивалентные ключи DEAL имеют важное практическое следствие - они делают многие стандартные методы хэширования ненадежными.
Атака основанная на математически зависимых ключах вероятно менее применима, но все ещё может быть важна для некоторых приложений эти атаки "снимают" два последних цикла DEAL ценой примерно 2137 шифрований DEAL, используя 3*245 байт памяти и требует все те же три блока открытого текста, зашифрованного 233 зависимыми ключами. Возможны компромиссы времени-памяти.
В настоящее время, имея 3*269 байт памяти, атака будет занимать 2113 вычислительных ресурсов, восстанавливая два последних подключа. После, можно реализовать атака Бихама (Biham's) на четырехцикловый цепной DES, которая требует ещё 233 блока открытого текста, зашифрованного только одним ключом, и 288 времени. Таким образом, вся атака займет приблизительно 2113 вычислительной работы, 3*269 байт памяти, все те же три блока открытого текста, зашифрованного 233 зависимыми ключами, ещё 232 блока открытого текста, зашифрованного только одним ключом, которые должны быть выбраны ПОСЛЕ завершения первой атаки. По сравнению с лучшей из ранее известных атак, требующей 2119 вычислительной работы, 264 памяти и 270 выбранных открытых текстов.
На теоретическом уровне эти результаты показывают важный факт: Широко считается, что "назначение ключей" (keyshedule), которое использует сильные элементы криптографии будет практически неуязвимо к криптографическому анализу. Это утверждение, к сожалению, не верно. В DEAL используется сильный шифр в очевидно-разумном направлении, чтобы обрабатывать ключ. Однако, использованный метод оставляет уязвимость шифра к анализу зависимого ключа, также оставляет возможность эквивалентных ключей.
1.3 Crypton как перспективный алгоритм
Шифр Crypton представлен южнокорейской компанией FutureSystems, с конца 1980-х годов работающей на рынке сетевого обеспечения и защиты информации. Автор алгоритма Че Хун Лим [15],[16] признает, что конструкция его шифра во многом опирается на идеи шифра SQUARE бельгийских криптографов Дамена и Рэмена (также участвующих в конкурсе). Здесь нет традиционной для многих блочных шифров "структуры Фейстела", оперирующей в каждом цикле шифрования половиной блока данных (например, как в DES или CAST). Основу данного шифра составляет другая стандартная конструкция - так называемая SP-сеть, т.е. повторяющаяся цикловая функция из замен-перестановок, ориентированная на распараллеленную нелинейную обработку всего блока данных. Помимо высокой скорости, к преимуществам такой конструкции относят и то, что она облегчает исследование стойкости шифра к методам дифференциального и линейного криптоанализа, являющимся на сегодня основными инструментами вскрытия блочных шифров.
Шифр Crypton, как и Square, эффективно реализуется на разнообразных платформах, и признано, что в корейском алгоритме присутствуют талантливые конструктивные идеи.
1.3.1 Алгоритм CRYPTON
Описание алгоритма было взято из книги автора шифра CRYPTON Че Хун Лим [16] В CRYPTON, каждый блок данных 128 бит представлен в форме массива 4´4 байта. Циклическое преобразование в CRYPTON состоит из четырех шагов: byte-wise substitutions(байт замена), column-wise bit permutation(колончастый способ перестановки битов), column-to-row transposition(перенос столбцов), и key addition(добавление ключа). Процесс кодирования состоит из4 раундов такихциклических преобразований. Процесс расшифровки может быть сделан идентичным процессу кодирования с различным ключевым списком. На рисунке 1.1 показана структура CRYPTON.
Рис.1.1 Структура CRYPTON.
Блочный шифр CRYPTON имеет следующие характеристики:
- 12-раундовый самозаменяемый шифр (с одинаковыми процессами для кодирования и расшифрования) с длиной блока 128 битов и длинной ключа до 256 битов.
- хорошая стойкость от существующих атак.
- эффективен и на программном и на аппаратном уровне: благодаря высокой степени паралельности и использованию очень простых логических операций ANDS/XORS, CRYPTON запускается очень быстро на большинстве платформ как в программном обеспечении так и в аппаратных средствах.
- Быстрое формирование ключей: шифрование со списоком ключей идет намного быстрее чем шифрование с одним блоком, так что это очень эффективно в приложениях, требующих частые замены ключей (например, в хеш-режиме).
1.3.2 Основные преобразования блока
1.3.2.1 Байтовая подстановка g
CRYPTON использует нелинейную замену байта, используя четыре 8´8 S-блока, Si(0 ≤i ≤3). Эти S-блоки получены из одного 8´8 S-блока при возведении в степень S (то есть, S = S-1) и удовлетворяют обратные отношения S2=S0-1 и S3=S1-1. Возведенный в степень S-блок S был, сформирован для более эффективной логической реализации.
Преобразование S-блока состоит из замен байт относительно массива 4´4 байт. Два различных преобразования используются альтернативно в последовательных раундах: в нечетных раундах и e в нечетных раундах. Это показано на рисунке 1.2. Заметим, что эти четыре S-блока устроены так, что следующее закрепляются на любом 4´4 байте масива A:
go (ge (A)) = ge (go (A)) = A. (1.1)
Это свойство используется, чтобы получить идентичный процесс для кодирования и расшифровки.
A[0] | a03 | a02 | a01 | a00 | B[0] | S3(a03) | S2(a02) | S1(a01) | S0(a00) | |
A[1] | a13 | a12 | a11 | a10 | o | B[1] | S0(a13) | S3(a12) | S2(a11) | S1(a10) |
A[2] | a23 | a22 | a21 | a20 | Þ | B[2] | S1(a23) | S0(a22) | S3(a21) | S2(a20) |
A[3] | a33 | a32 | a31 | a30 | B[3] | S2(a33) | S1(a32) | S0(a31) | S3(a30) | |
A[0] | a03 | a02 | a01 | a00 | B[0] | S1(a03) | S0(a02) | S3(a01) | S2(a00) | |
A[1] | a13 | a12 | a11 | a10 | e | B[1] | S2(a13) | S1(a12) | S0(a11) | S3(a10) |
A[2] | a23 | a22 | a21 | a20 | Þ | B[2] | S3(a23) | S2(a22) | S1(a21) | S0(a20) |
A[3] | a33 | a32 | a31 | a30 | B[3] | S0(a33) | S3(a32) | S2(a31) | S1(a30) |
Рис.1.2 Байтовая подстановка g
1.3.2.2 Битовая перестановка p и байтовое перемещение t
Как линейные преобразования, CRYPTON использует последовательную перестановку бита и перемещения байта. Бит-перестановка смешивает каждый столбец байта в массиве 4×4 байта и байт-перемещение перемещает результирующие столбцы байт в строки байт.
Сначала определяем четыре вектора маскировки (M3, M2, M1, M0) для извлечения бит, используемых в как:
M0 = m3 || m2 || m1 || m0 = 0x3fcff3fc,
M1 = m0 || m3 || m2 || m1 = 0xfc3fcff3,
M2 = m1 || m0 || m3 || m2 = 0xf3fc3fcf,
M3 = m2 || m1 || m0 || m3 = 0xcff3fc3f, (1.3)
Где m0 = 0xfc, m1 = 0xf3, m2 = 0xcf, m3 = 0x3f. Чтобы сделать процес шифрования и расшифрования идентичными, используются два немного различных варианта перестановки; в нечетных раундах и e в четных раундах. Они определены следующим образом:
- байтовое перемещение o для нечетных раундов: B = o(A) определяется как:
B[0] - (A[3] Ù M3) Å (A[2] Ù M2) Å (A[1] Ù M1) Å (A[0] Ù M0),
B[1] - (A[3] Ù M0) Å (A[2] Ù M3) Å (A[1] Ù M2) Å (A[0] Ù M1),
B[2] - (A[3] Ù M1) Å (A[2] Ù M0) Å (A[1] Ù M3) Å (A[0] Ù M2),
B[3] - (A[3] Ù M2) Å (A[2] Ù M1) Å (A[1] Ù M0) Å (A[0] Ù M3). (1.4)
- Битовая перестановка e для четных раундов: B=e(A) определяется как:
B[0] - (A[3] Ù M1) Å (A[2] Ù M0) Å (A[1] Ù M3) Å (A[0] Ù M2),
B[1] - (A[3] Ù M2) Å (A[2] Ù M1) Å (A[1] Ù M0) Å (A[0] Ù M3),
B[2] - (A[3] Ù M3) Å (A[2] Ù M2) Å (A[1] Ù M1) Å (A[0] Ù M0),
B[3] - (A[3] Ù M0) Å (A[2] Ù M3) Å (A[1] Ù M2) Å (A[0] Ù M1). (1.5)
Битовая перестановка просто перестраивает массив 4×4 байта, перемещая байт из (i, j)-ой позиции в (j, i)-ую позицию (См. Рисунок 1.3для B=
A[0] | a03 | a02 | a01 | a00 | B[0] | a30 | a20 | a10 | a00 | |
A[1] | a13 | a12 | a11 | a10 | | B[1] | a31 | a22 | a11 | a01 |
A[2] | a23 | a22 | a21 | a20 | Þ | B[2] | a32 | a22 | a12 | a02 |
A[3] | a33 | a32 | a31 | a30 | B[3] | a33 | a23 | a13 | a03 |
Рис. 1.3 байтовое перемещение t