Для алгоритма AES число раундов зависит от длины
ключа. Количество раундов может
равняться 10, 12 и 14, когда
равняется
4, 6 и 8, соответственно.
Комбинации Ключ/Блок/Раунд
Длина ключа (слов) |
Размер блоков (слов) |
Число раундов (слов) |
|
AES-128 |
4 |
4 |
10 |
AES-192 |
6 |
4 |
12 |
AES-256 |
8 |
4 |
14 |
Для шифрования и инверсного шифрования, алгоритм AES использует круговую функцию, которая состоит из четырех различных байт-ориентированных преобразований:
1) замены байта с использованием таблицы подстановки (S-box);
2) сдвиг строк в массиве состояний на различное количество позиций;
3) перемешивание данных каждого столбца массива состояний;
4) добавление раундового ключа к состоянию.
Шифрование. В
начале шифрования вход копируется в массив состояний. После начального
добавления раундового ключа, массив состояний преобразуется с помощью функции
раунда 10, 12 или 14 раз (в зависимости от длины ключа), с финальным раундом
отличающимся от первых раундов.
Затем финальное состояние копируется в выходное. Функция шифрования показана на
рисунке.
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
byte state[4,Nb]
state = in
AddRoundKey(state, w[0, Nb-1])
for round = 1 step 1 to Nr–1
SubBytes(state)
ShiftRows(state)
MixColumns(state)
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
end for
SubBytes(state)
ShiftRows(state)
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
out = state
end
Рисунок – Псевдокод общей схемы шифрования AES
Преобразование SubBytes(). Преобразование SubBytes() является нелинейной подстановочной байтовой операцией, которая независимо применяется к каждому байту состояния с использованием таблицы подстановки (S-box) (см. рисунок).
Рисунок – Применение подстановок к каждому байту состояния
Такая таблица, которая является обратимой, построена на основе двух преобразований:
1)
Применения мультипликативного обращения в конечном поле .
Элемент
отображается
в себя.
2)
Применения аффинного преобразования (в поле )
.
(6)
Для ,
где
является
-ым
битом байта, и
является
-ым
битом байта
со
значением
.
Знак «′» (например,
)
показывает, что переменная обновляется значанием справа.
Рисунок – Таблица подстановки S-box: подставляемые значения для байта xy
В матричной форме аффинное преобразование элемента таблицы подстановки может быть выражено как:
.
(5)
Например, если ,
замещаемое значение может быть определено как элемент на пересечении ряда с
индексом ‘5’ и столбца с индексом ‘3’. В этом случае результат
равен
.
Преобразование
ShiftRows(). В преобразовании ShiftRows() байты последних трех рядов состояния циклически
сдвигаются на различное количество байт (смещений). Первый ряд ()
не сдвигается.
Процесс преобразования можно записать следующим образом
,
и
,
(6)
где значение
смещения зависит
от номера ряда
.
Например для
:
;
;
.
(7)
Это вызывает эффект перемещения байт на «нижние» позиции в ряду, в то время как «нижние» байты перемещаются «наверх». На рисунке показано преобразование ShiftRows().
Рисунок – Преобразование ShiftRows() циклически сдвигает последние три ряда в состоянии
Преобразование
MixColumns(). Преобразование MixColumns() выполняется над состоянием колонка за колонкой.
Колонка рассматривается как полином четвертой степени над полем .
Полином умножается по модулю на
и
фиксированный полином
,
определяемый как
.
(8)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.