Для алгоритма 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).
Ссылка на скачивание - внизу страницы.