В спецификации алгоритма AES предлагаются два вида реализаций функции расшифрования, отличающихся друг от друга последовательностью приложения преобразований, обратных преобразованиям функции зашифрования, и последовательностью планирования ключей.
Так как алгоритм шифрования представляет собой композицию обратимых преобразований, то расшифрование производится путем применения обратных преобразований к выходному блоку (состоянию):
InvSubBytes() – обратная замена байтов– побайтовая нелинейная подстановка в State -блоках с использованием фиксированной таблицы замен размерностью 8x256 (inverse affain map);
InvShiftRows() – обратный циклический сдвиг строк массива State на различное количество байт;
InvMixColumns() – восстановление значений столбцов – умножение столбцов состояния, рассматриваемых как многочлены над GF (28);
Функция обратного расшифрования. Если вместо SubBytes (), ShiftRows (), MixColumns () и AddRoundKey () в обратной последовательности выполнить инверсные им преобразования, можно построить функцию обратного расшифрования. При этом порядок использования раундовых ключей является обратным по отношению к тому, который используется при зашифровании.
|
|
При замене байтов используется S-box, обратный к S-box, используемому при шифровании, при сдвиге строк три последних строки состояния циклически сдвигаются соответственно на Nb-Cl, Nb-C2 и Nb-C3 байт, при перемешивании колонок используется умножение на многочлен
,
обратный к введенному выше многочлену с(х).
Таким образом, цикл алгоритма обратного расшифрования состоит из следующих последовательно применяемых преобразований:
а) обратной замены байтов;
б) обратного сдвига строк;
в) обратного перемешивания столбцов;
г) наложения инверсного циклового ключа, получаемого путем применения обратного замешивания столбцов к соответствующему цикловому ключу.
Цикловые ключи в алгоритме обратного расшифрования используются в обратном порядке. В последнем цикле, как и в случае прямого преобразования, отсутствует перемешивание столбцов.
Алгоритм прямогорасшифрования. Алгоритм обратного расшифрования, описанный выше, имеет порядок приложения операций-функций, обратный порядку операций в алгоритме прямого зашифрования, но использует те же параметры развёрнутого ключа. Изменив определенным образом последовательность планирования ключа, можно построить еще один алгоритм – алгоритм прямого расшифрования.
Два следующих свойства позволяют сделать это:
• Порядок приложения функций SubBytes () и ShiftRows () не играет роли. То же самое верно и для операций InvSubBytes () и InvShiftRows (). Это происходит потому, что функции SubBytes () и InvSubBytes () работают с байтами, а операции ShiftRows () и InvShiftRows () сдвигают целые байты, не затрагивая их значений.
|
|
• Операция MixColumns () является линейной относительно входных данных, что означает InvMixColumns (State XOR RoundKey) = = InvMixColumns (State) XOR InvMixColumns (RoundKey)
Эти свойства функций алгоритма шифрования позволяют изменить порядок применения функций InvSubBytes () и InvShiftRows (). Функции AddRounKey () и InvMixColumns () также могут быть применены в обратном порядке, но при условии, что столбцы (32-битные слова) развёрнутого ключа расшифрования предварительно пропущены через функцию InvMixColumns ().
Таким образом, можно реализовать более эффективный способ расшифрования с тем же порядком приложения функций, что и в алгоритме зашифрования.
Алгоритм расшифрования играет несколько менее важную роль в конструкции шифра, так как в некоторых режимах работы расшифрование не используется (СFВ, гаммирование, вычисление вектора аутентификации). Реализация алгоритма допускает высокую степень распараллеливания. Все преобразования в цикле шифрования могут выполняться параллельно над байтами, строками или столбцами состояния. В тех приложениях, где особые требования к скорости шифрования, расширение ключа целесообразно выполнить один раз и многократно использовать расширенный ключ для обработки входных блоков. Если ключ шифра необходимо часто изменять, то расширение ключа можно выполнять параллельно с циклами шифрования.
В заключение сформулируем основные особенности AES:
² новая архитектура «квадрат», обеспечивающая быстрое рассеивание и перемешивание информации, при этом за один раунд преобразованию подвергается весь входной блок;
² байт-ориентированная структура, удобная для реализация на 8-разрядных микроконтроллерах;
² все раундовые преобразования суть операции в конечных полях, допускающие эффективную аппаратную и программную реализацию на различных платформах.