Современные системы шифрования (Лабораторная работа № 1), страница 8

Для алгоритма 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) (см. рисунок).

Операция SubBytes

Рисунок –  Применение подстановок к каждому байту состояния

Такая таблица, которая является обратимой, построена на основе двух преобразований:

1)  Применения мультипликативного обращения в конечном поле . Элемент  отображается в себя.

2)  Применения аффинного преобразования (в поле )

.                               (6)

Для , где  является -ым битом байта, и  является -ым битом байта  со значением . Знак «′» (например, ) показывает, что переменная обновляется значанием справа.

Sbox

Рисунок –  Таблица подстановки S-box: подставляемые значения для байта xy

В матричной форме аффинное преобразование элемента таблицы подстановки может быть выражено как:

.                                                (5)

Например, если , замещаемое значение может быть определено как элемент на пересечении ряда с индексом ‘5’ и столбца с индексом ‘3’. В этом случае результат  равен .

Преобразование ShiftRows(). В преобразовании ShiftRows() байты последних трех рядов состояния циклически сдвигаются на различное количество байт (смещений). Первый ряд () не сдвигается.

Процесс преобразования можно записать следующим образом

,  и ,                                         (6)

где значение смещения  зависит от номера ряда . Например для :

; ; .                                                (7)

Это вызывает эффект перемещения байт на «нижние» позиции в ряду, в то время как «нижние» байты перемещаются «наверх». На рисунке показано преобразование ShiftRows().

Операция ShiftRows

Рисунок –  Преобразование ShiftRows() циклически сдвигает последние три ряда в состоянии

Преобразование MixColumns(). Преобразование MixColumns() выполняется над состоянием колонка за колонкой. Колонка рассматривается как полином четвертой степени над полем . Полином умножается по модулю на  и фиксированный полином , определяемый как

.                                                    (8)