Реферат: Схемы шифрования AES, RC4, RC5, RC6, Twofish, Mars
Функция обратного расшифрования
Если вместо SubBytes{), ShiftRows{ ), MixColumns{) и
AddRoundKey{) в обратной последовательности выполнить инверсные им
преобразования, можно построить функцию обратного расшифрования. При этом
порядок использования раундовых ключей является обратным по отношению к тому,
который используется при зашифровании. На псевдокоде она выглядит так:

Рисунок 1.3 «Операция обратного расшифрования
реализованная на псевдокоде»
Функция прямого расшифрования

Рисунок 1.4 «Операция прямого расшифрования реализованная
на псевдокоде»
Алгоритм обратного расшифрования, описанный выше имеет
порядок приложения операций-функций обратный порядку операций в алгоритме
прямого зашифрования, но использует те же параметры развёрнутого ключа. Изменив
определенным образом после- довательность планирования ключа можно построить
еще один алгоритм - алгоритм прямого расшифрования (Рисунок 3.4).
Два следующих свойства позволяют сделать это:
Порядок приложения функций SubBytes() и ShiftRows() не
играет роли. То же са мое верно и для операций InvSubBytes() и InvShiftRows().
Это происходит потому, что функции SubBytes() и InvSubBytes() работают с
байтами , а операции ShiftRows() и InvShiftRows() сдвигают целые байты, не
затрагивая их значений.
Операция MixColumns() является линейной относительно
входных данных, что означает InvMixColumns(State XOR RoundKey) = =
InvMixColumns(State) XOR InvMixColumns(RoundKey)
Эти свойства функций алгоритма шифрования позволяют
изменить порядок применения функций InvSubBytes() и InvShiftRows(). Функции
AddRounKey() и InvMixCol-umns() также могут быть применены в обратном порядке,
но при условии, что столбцы (32-битные слова) развёрнутого ключа расшифрования
предварительно пропущены через функцию InvMixColumns().
Таким образом, можно реализовать более эффективный способ
расшифрования с тем же порядком приложения функций как и в алгоритме
зашифрования.
Алгоритм выработки ключей (Key Schedule)
Введем следующие обозначения: Rconf] - массив 32-битных
раундовых констант;
RotWord() — операция циклической перестановки входного
4-байтного слова в выходное по следующему правилу [а0, ai, а2, а3 ] —> [ах,
а2, а3, а0 ];
SubWord() - операция замены в 4-байтном слове с помощью
S-Box каждого байта;
Å
- операция исключающего или XOR.

Рисунок 1.5 «Операция планирования (расширения) ключа
реализованная на псевдокоде»
Раундовые ключи получаются из ключа шифрования
посредством алгоритма выработки ключей. Он содержит два компонента: расширение
ключа (Key Expansion) и выбор раундового ключа (Round Key Selection).
Основополагающие принципы алгоритма выглядят следующим образом:
общее число битов раундовых ключей равно длине блока,
умноженной на число раундов, плюс 1;
ключ шифрования расширяется в расширенный ключ (Expanded
Key);
раундовые ключи берутся из расширенного ключа следующим
образом: первый раундовый ключ содержит первые Nb слов, второй - следующие Nb
слов и т. д.
Расширение (планирование) ключа
Расширенный ключ (Рисунок 3.6) представляет собой
линейный массив w[i] состоящий из A(Nr +1) 4-байтовых слов, i = О,4(Nr +1).

Рисунок 1.6 «Процедуры расширения и выборки раундового
ключа для Nk = 4».
Светло-серым цветом выделены слова расширенного ключа,
которые формируются без использования функций SubWord() и RotWord().
Темно-серым цветом ,выделены слова расширенного ключа,
при вычислении которых используются преобразования SubWord() и RotWord())»
Первые Nk слов содержат ключ шифрования. Каждое
последующее слово w[i] получается посредством XOR предыдущего слова w[i-1] и
слова на Nk позиций ранее:
w[i- Nk]: w[i]= w[i-1] Å w[i-
Nk].
Для слов, позиция которых кратна Nk, перед XOR
применяется преобразование к w[i-1], а затем еще прибавляется раундовая
константа Rcon[i] . Преобразование реализуется с помощью двух дополнительных функций:
RotWord() и SubWord().
Значение Rcon[j] равно 2j-1 . Значение w[i] в этом случае
определяется выражением: w[i] = SubWord(RotWord(w[i-1]) Å Rcon[i/Nk] Å M[i-Nk].
Выбор раундового ключа i-тый раундовый ключ выбирается из
слов массива расширенного ключа в промежутке от W[Nb * i] до W[Nb * (i+1)].
Для функции зашифрования расширенный ключ генерируется
алгоритмом Рисунок 1.5. Для функции обратного расшифрования используется этот
же ключ, но в обратной последовательности начиная с последнего раундового
подключа зашифрования.
Для функции прямого расшифрования используется несколько
модифицированный алгоритм планирования ключа. При формировании развёрнутого
ключа в процедуру планирования необходимо добавить в конце дополнительное
преобразование (Рисунок 3.7), причем расширенный ключ используется при прямом
расшифровании в той же последовательности, что и при зашифровании.

Рисунок 1.7 «Дополнительное преобразование расширенного
ключа для функции прямого расшифрования»
Раундовое преобразование
Раундовое преобразование состоит из последовательного
применения к массиву State ряда трансформаций.. Сейчас обсудим детали его
реализации.
Нелинейная замена байтов массива состояния посредством
трансформации SubBytesQ имеет вид:

Многократное вычисление в процессе зашифрования данного
выражения оказывало бы неоправданную вычислительную нагрузку на исполняющую
систему, поэтому для практической реализации наиболее приемлемым решением
является использование предварительно вычисленной таблицы замены S-Box. Логика
работы S-Box при преобразовании байта {ху} отражена в шестнадцатеричном виде на
Рисунке 1.8:

Рисунок 1.8 «Таблица S-Box замены байт»
Ее использование сводит операцию SubBytesQ к простейшей
выборке байта из массива λ(f) = Sbox[f].
В функциях расшифрования применяется операция обратная
InvSub-Bytes().
Она реализуется так же просто, как и предыдущая
посредством инверсной таблицы S-Box – λ-1(f) = InvSbox[f]., ее логика
работы при преобразовании байта {ху} отражена в шестнадцатеричном виде на
Рисунке 1.9

Рисунок 1.9 «Таблица S-Box инверсной замены байт»
Рисунок 1.10 иллюстрирует применение преобразования
замены байт к состоянию в функциях зашифрования и расшифрования:

Рисунок 1.10 «Преобразование состояния посредством
таблицы замены S-Box»
В преобразовании сдвига строк (ShiftRows) последние 3
строки состояния циклически сдвигаются ВЛЕВО на различное число байтов. Строка
1 сдвигается на С1 байт, строка 2 - на С2 байт, и строка 3 - на Сз байт.
Значения сдвигов С1, С2 и С3 в Rijndael зависят от длины блока Nb .

Рисунок 1.11 «Преобразование сдвига строк в функции
зашифрования»
В преобразовании обратного сдвига строк InvShiftRows
последние 3 строки состояния циклически сдвигаются ВПРАВО на различное число
байтов. Строка 1 сдвигается на С1байт, строка 2 - на С2 байт, и строка 3 - на
С3 байт.
Перемешивание столбцов
В преобразовании перемешивания столбцов (MixColumns)
столбцы состояния рассматриваются как многочлены над GF(2S) и подвергаются
преобразованию /j,(g) = с * gmod(Y4 +1), где с = (Х,1,1,Х +1), т.е умножаются
по модулю х4 + 1 на многочлен с(х), выглядящий, как: с(х) = {03}х3 + {01}х2 +
{01}х + {02}.
Это преобразование может быть представлено в матричном
виде следующим образом:

Применение этой операции ко всем четырем столбцам
состояния обозначается, как MixColumns(State). Рисунок 1.13 демонстрирует
применение преобразования MixColumnsQ к столбцу состояния.

Рисунок 1.13. «Операция перемешивания действует на
столбцы состояния»
В обратном преобразовании InvMixColumnsQ столбцы
состояния рассматриваются как многочлены над GF(2S), но, естественно,
подвергаются обратному преобразованию v(g) = ^-1(g) = d-gmod(Y4+l), где d =
(Х3+Х2 + Х,Х3+l,X3+X2+l,X3+X + 1), т.е умножаются по модулю х4 + 1 на многочлен
d(x), выглядящий следующим образом: d(x) = {Ob}x3 + {0d}x2 + {09}х + {0e}.
Это может быть представлено в матричном виде следующим
образом:

Добавление раундового ключа AddRoundKey()
В данной операции раундовый ключ добавляется к состоянию
посредством поразрядного XOR. Длина ключа (в 32-разрядных словах) равна длине
блока Nb .
Рисунок 1.14 иллюстрирует действие данной операции на
состояние. Это преобразование обозначается как AddRoundKey(State, RoundKey).

Основные особенности AES
В заключении сформулируем основные особенности AES:
новая архитектура «Квадрат», обеспечивающая быстрое
рассеивание и перемеши вание информации, при этом за один раунд преобразованию
подвергается весь входной блок;
байт-ориентированная структура, удобная для реализация на
8-разрядных микро контроллерах;
• все раундовые преобразования суть операции в конечных
полях, допускающие эффективную аппаратную и программную реализацию на различных
платформах
Страницы: 1, 2, 3, 4, 5 |