Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Математические основы криптологии..pdf
Скачиваний:
102
Добавлен:
05.02.2023
Размер:
6.01 Mб
Скачать

Блок зашифрованных данных Тш1 одновременно является также исходным состоянием N для выработки второго блока гаммы шифра Гш2 и по обратной связи передается на вход. Новое значение N зашифровывается с помощью цикла зашифрования 32-З. Полученное в результате зашифрования значение N образует второй 64-разрядный блок гаммы шифра Гш2, который суммируется поразрядно по модулю 2 со вторым блоком открытых данных То2.

Выработка последующих блоков данных шифра Гшi и зашифрование соответствующих блоков открытых данных Тоi (i = 3, …, m) производится аналогично. Если длина последнего m-го блока открытых данных Тоm меньше 64 бит, то из последнего m-го блока гаммы шифра Гшm используется только соответствующее число разрядов гаммы шифра, остальные разряды отбрасываются.

Аналогичным образом производится расшифрование в режиме гаммирования с обратной связью (рисунок 2.33б).

Блочный шифр AES в поточном режиме

В основе стандарта шифрования AES лежит алгоритм Rijndael. Rijndael – это итерационный блочный шифр, имеющий архитектуру “Квадрат”. Шифр имеет переменную длину блоков и различные длины ключей. Длина ключа и длина блока могут быть равны независимо друг от друга 128, 192 или 256 битам. В стандарте AES-128 определена длина блока данных, равная 128 битам.

Операции алгоритма AES выполнены на основе двумерного массива байтов, называемого состоянием (state). Состояние состоит из четырех строк, каждая из которых содержит Nb байт, где Nb – длина блока в битах, деленная на 32. В массиве состояния, обозначенном символом s, каждый байт имеет два индекса: номер строки r, 0 ≤ r < 4, и номер столбца c, 0 ≤ c < Nb. Это позволяет обращаться к отдельному байту состояния как src. Для AES-128 Nb = 4, т.е. 0 ≤ c < 4.

Перед применением операции зашифрования или расшифрования, входной блок данных, представленный в виде массива байтов in0, …, in15, копируется в массив состояния (рисунок 2.34):

src = inr+4c, 0 ≤ r < 4, 0 ≤ c < Nb,

ав конце операций зашифрования или расшифрования, данные из состояния копируются

ввыходной массив (рисунок 2.34):

outr+4c = src, 0 ≤ r < 4, 0 ≤ c < Nb.

203

in0

in4

in8

in12

 

s00

s01

s02

s03

 

 

out0

out4

out8

out12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

in1

in5

in9

in13

 

s10

s11

s12

s13

 

out1

out5

out9

out13

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

in2

in6

in10

in14

 

s20

s21

s22

s23

 

out2

out6

out10

out14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

in3

in7

in11

in15

 

s30

s31

s32

s33

 

out3

out7

out11

out15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Входной

блок

Промежуточное состояние

Выходной блок

Рис. 2.34. Входной и выходной блоки данных, промежуточное состояние Ключ шифрования также представляется в виде прямоугольного массива с четырьмя

строками (рисунок 2). Число столбцов Nk этого массива равно длине ключа в битах, деленной на 32. В стандарте определены ключи всех трех размеров – 128 бит, 192 бита и 256 бит, то есть соответственно 4, 6 и 8 32-разрядных слова (или столбца – в табличной форме представления). В некоторых случаях ключ шифрования рассматривается как линейный массив 4-байтовых слов. Слова состоят из 4 байтов, которые находятся в одном столбце (при представлении в виде прямоугольного массива).

k00 k01 k02 k03

k10 k11 k12 k13

k20 k21 k22 k23

k30 k31 k32 k33

Рис. 2.35. Формат представления ключа шифрования

Для алгоритма AES длина входного и выходного блоков, а также блока состояния – 128 битов, т.е. Nb = 4. Длина ключа шифрования равна 128, 192 или 256 битов, т.е. Nk = 4, 6 или 8. Количество раундов, которые будут выполнены в течение выполнения алгоритма, зависит от размера ключа. Число раундов обозначается Nr, где Nr = 10 при Nk = 4, Nr = 12 при Nk = 6 и Nr

=14 при Nk = 8.

Идля шифрования, и для расшифрования, алгоритм AES использует раундовую функцию, которая составлена из четырех различных преобразований над байтами: 1) замена байта, используя таблицу замены (S-блок), 2) сдвиг строк массива состояния на различные смещениями, 3) смешивание данных в пределах каждого столбца массива состояния, и 4) добавление раундового ключа к состоянию. Эти преобразования (и их инверсии) описаны ниже.

204

Функция зашифрования

Перед зашифрованием входные данные копируются в массив состояния. После начального добавления раундового ключа, массив состояния преобразуется с помощью раундовой функции 10, 12 или 14 раз (в зависимости от длины ключа). Заключительный раунд немного отличается от первых Nr – 1 раундов. Затем полученное состояние копируется в выходной массив.

Раундовая функция состоит из 4 различных преобразований: SubBytes, ShiftRows, MixColumns и AddRoundKey. Все Nr раундов идентичны за исключением последнего, который не включает преобразование MixColumns (рисунок 2.36).

Входной блок

AddRoundKey round = 1 .. 9

SubBytes

ShiftRows

MixColumns

AddRoundKey

SubBytes

ShiftRows

AddRoundKey

Выходной блок

Рис. 2.36. Схема функции зашифрования (Nb = 4, Nk = 4) Преобразование SubBytes – нелинейная замена байта, которая работает независимо на

каждом байте состояния, используя таблицу замены (S-блок). Эта таблица замен создается с использованием двух преобразований:

1.получение обратного элемента относительно умножения в поле GF(28), нулевой элемент переходит сам в себя;

2.применение преобразования над GF(2), определенного сле-

дующим образом:

b'i = bi b(i+4)mod8 b(i+5)mod8 b(i+6)mod8 b(i+7)mod8 ci,

где c0 = c1 = c5 = c6 = 1, c2 = c3 = c4 = c7 = 0, bi и b'i – соответственно исходное и

преобразованное значение i-го бита, i = 0, …, 7.

В преобразовании ShiftRows байты в последних трех строках состояния циклически

сдвигаются влево на различное число байт. Первая строка (r = 0) не сдвигается. Вторая 205

строка (r = 1) сдвигается на 1 байт, третья строка (r = 2) – на 2 байта, четвертая строка (r = 3)

– на 3 байта.

Преобразование MixColumns работает с состоянием столбец за столбцом, обрабатывая каждый столбец как 4-элементный полином. Столбцы рассматриваются как полиномы над GF(28) и умножаются по модулю x4 + 1 на фиксированный полином a(x), приведенный ниже

a(x) = {03}x3 + {01}x2 + {01}x + {02}.

Это может быть представлено в матричном виде:

s0c

 

02

03

01

01 s0c

 

 

 

s

 

 

01 02

03

01 s

 

,

0 c 3.

 

1c

 

 

 

 

02

 

1c

 

s

 

01 01

03 s

2c

 

 

 

 

2c

 

 

 

 

 

02 s

 

 

 

s

 

 

03

01

01

3c

 

 

 

 

3c

 

 

 

 

 

 

 

 

 

Врезультате этого умножения байты столбца заменяются следующими: s'0c = ({02} • s0c) ({03} • s1c) s2c s3c,

s'1c = s0c ({02} • s1c) ({03} • s2c) s3c, s'2c = s0c s1c ({02} • s2c) ({03} • s3c), s'3c = ({03} • s0c) s1c s2c ({02} • s3c).

Впреобразовании AddRoundKey раундовый ключ добавляется к состоянию простой

поразрядной операцией XOR. Каждый раундовый ключ состоит из Nb 4-байтовых слов развернутого ключа. Сложение раундового ключа и состояния производится следующим образом:

[s'0c, s'1c, s'2c, s'3c] = [s0c, s1c, s2c, s3c] [wround Nb+c], 0 ≤ с < Nb,

где [wi] – слова развернутого ключа, описанного ниже, round – номер раунда, 0 ≤ round Nr. При зашифровании, перед первым применением раундовой функции, происходит начальное добавление раундового ключа (round = 0). Применение преобразования AddRoundKey в Nr раундах зашифрования происходит при 1 ≤ round Nr.

Расширение ключа

В алгоритме AES для получения раундовых ключей используется алгоритм расширения ключа. Расширенный ключ представляет собой линейный массив w[i] из Nb(Nr + 1) 4- байтовых слов, i = 0, …, Nb(Nr + 1). Алгоритм выработки ключей зависит от величины Nk. Первые Nk слов расширенного ключа заполняются ключом шифрования. Каждое последующее слово w[i] получается посредством XOR предыдущего слова w[i–1] и слова на Nk позиций ранее w[i Nk]

w[i] = w[i – 1] w[i Nk].

206