Реферат: Схемы шифрования AES, RC4, RC5, RC6, Twofish, Mars
Рисунок 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 позиций ранее: