Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Беззатеев и др. Блоковые шифры.pdf
Скачиваний:
245
Добавлен:
02.04.2015
Размер:
1.75 Mб
Скачать

45

Информационный блок на входе и шифрограмма на выходе алгоритма Rijndael могут быть представлены как одномерные массивы, элементами которых являются байты, пронумерованные от 0

до 4 Nb 1. Таким образом, эти блоки имеют длину 16, 24 или 32 байта, и значения индексов

лежат в диапазоне 0, ..., 15; 0, ..., 23 или 0, ..., 31. Ключ, используемый в алгоритме шифрования, представляет собой одномерный массив, элементами которого являются байты, пронумерованные

от 0 до 4 Nk 1 . Таким образом, блок ключа имеет длину 16, 24 или 32 байта, и значения индек-

сов лежат в диапазоне 0, ..., 15; 0, ..., 23 или 0, ..., 31.

Байты шифруемой информации ("исходного текста") записываются в байты состояния в следующем порядке: a0,0 , a1,0 , a2,0 , a3,0 , a0,1 , a1,1 , a2,1 , a3,1 , a0,2 , ..., и байты ключа шифрования записываются в соответствующий массив как k0,0 , k1,0 , k2,0 , k3,0 , k0,1 , k1,1 , k2,1 , k3,1 , k0,2 , ... . По окончании процесса шифрования результирующие байты состояния переписываются в шифрограмму в таком же порядке. Таким образом, если индекс байта в одномерном массиве равен n , а соответствующий индекс в двумерном массиве — (i, j) , то

i = n mod 4 ; j = n / 4 ; n = i + 4 j .

Количество этапов (циклов) алгоритма

Nr зависит от величин Nb и Nk и определяется в соот-

ветствии с Табл. 4.1.

 

 

 

 

 

 

 

 

 

 

 

 

Nr

 

Nb = 4

Nb = 6

Nb = 8

 

 

 

 

 

 

 

 

 

Nk = 4

 

10

12

14

 

 

 

 

 

 

 

 

 

Nk = 6

 

12

12

14

 

 

 

 

 

 

 

 

 

Nk = 8

 

14

14

14

 

 

 

 

 

 

 

 

Табл. 4.1. Количество циклов Nr как функция от длины информационного блока и длины ключа.

На каждом этапе алгоритма выполняется четыре различные преобразования информационного блока:

Побайтовая подстановка;

Сдвиг по строке;

Побайтовая перестановка внутри столбцов;

Сложение информационного блока и ключа, используемого на данном этапе. На последнем этапе выполняются лишь три преобразования:

Побайтовая подстановка;

Сдвиг по строке;

Сложение информационного блока и ключа, используемого на данном этапе. Опишем каждое из перечисленных преобразований.

1.Побайтовая подстановка

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

1. Сначала для каждого элемента матрицы состояния используется функция инвертирования по умножению в поле GF(28) с порождающим многочленном m(x) = x8 + x4 + x3 + x +1, то есть элемент матрицы состояния ai, j , являющийся байтом, а значит, представимый как не-

который элемент поля GF(28) — αi заменяется на αi , при этом нулевой элемент отображается в себя.

2. Затем используется аффинное преобразование в GF(2), определяемое соотношением:

46

y0

 

1 0 0 0 1 1 1 1

x0

 

1

y

 

1 1 0 0 0 1 1 1

x

 

1

 

1

 

 

 

 

 

 

1

 

 

 

y2

 

1 1 1 0 0 0 1 1

x2

 

0

 

 

 

 

 

 

 

 

 

 

 

 

y3

 

= 1 1 1 1 0 0 0 1

× x3

 

0

y4

 

1 1 1 1 1 0

0

0

x4

 

0

 

 

 

 

 

0

 

 

 

 

 

 

y5

 

0 1 1 1 1 1

0

x5

 

1

y

6

 

0 0 1 1 1

1

1

0

x

6

 

1

 

 

 

 

1

 

 

 

 

 

y7

0 0 0 1 1 1

1

x7

0

Обратное преобразование в побайтовой подстановке выполняется в соответствии с обратным аффинным преобразованием и таблицей обратных по умножению элементов поля GF(28).

2. Сдвиг по строке

В этом преобразовании байты в строках информационной матрицы циклически сдвигаются на различное количество разрядов. Строка с индексом 0 — не сдвигается, строка с индексом 1 —

сдвигается на C1 байт, строка с индексом 2 — на C2 , строка с индексом 3 — на C3 байт. Значения C1 , C2 , C3 для различных длин информационных блоков Nb представлены в Табл. 4.2.

Nb

C1

C2

C3

 

 

 

 

4

1

2

3

 

 

 

 

6

1

2

3

 

 

 

 

8

1

3

4

 

 

 

 

Табл. 4.2. Величина сдвига для различных длин информационных блоков.

При обратном преобразовании последние три строки циклически сдвигаются соответственно на Nb C1 , Nb C2 и на Nb C3 байт, таким образом, байт, находящийся на позиции j в строке i

переместится на позицию ( j + Nb Ci ) mod Nb .

3. Побайтовая перестановка внутри столбцов

При этом преобразовании столбцы информационной матрицы рассматриваются как многочлены третьей степени с коэффициентами из GF(28) и перемножаются на специально выбранный много-

член c(x) по модулю x4 +1 ,

c(x) = '03' x3 + '01' x2 + '01' x + '02' ,

здесь и далее в описании алгоритма число в кавычках — элемент поля GF(28), представленный в шестнадцатеричной системе счисления.

То есть: '03' = 00000011; '01' = 00000001; '02' = 00000010.

Многочлен c(x) взаимно прост с x4

+1 ,

и таким образом, такая операция умножения обратима.

Это преобразование можно представить в матричной форме: b(x) = c(x) a(x) ,

b0

 

 

'02'

'03'

'01'

'01'

a0

 

b

 

=

'01'

'02'

'03'

'01'

a

 

1

 

 

'01'

'02'

 

×

1

 

b

 

 

'01'

'03'

a

2

 

2

 

 

 

'01'

'01'

 

 

 

b3

 

 

'03'

'02'

a3

47

Используя расширенный алгоритм Евклида, нетрудно определить многочлен d (x) — обратный к c(x) по умножению:

c(x) d (x) =1 mod x4 +1 ,

d(x) = '0B' x3 + '0D' x2 + '09' x + '0E' .

Таким образом, обратное преобразование осуществляется с помощью умножения каждого столбца на многочлен d (x) по модулю x4 +1 .

4. Сложение с ключом, используемым на данном этапе

a00

a01

a02

a03

a04

a05

 

k00

k01

k02

k03

k04

k05

 

b00

b01

b02

b03

b04

b05

a10

a11

a12

a13

a14

a15

 

k10

k11

k12

k13

k14

k15

=

b10

b11

b12

b13

b14

b15

a

20

a

21

a

22

a

23

a

24

a

25

k

20

k

21

k

22

k

23

k

24

k

25

b

b

b

b

b

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20

21

22

23

24

25

a30

a31

a32

a33

a34

a35

 

k30

k31

k32

k33

k34

k35

 

b30

b31

b32

b33

b34

b35

Ключ, используемый на конкретном этапе, получается из основного ключа шифрования по специальной процедуре. Длина ключа для каждого этапа совпадает с длиной информационного блока

Nb . Обратное преобразование в данном случае просто совпадает с прямым преобразованием.

Процедура получения ключей для каждого этапа алгоритма шифрования

Ключи для каждого этапа алгоритма шифрования получаются из основного ключа в соответствии со специальной схемой, состоящей из двух компонент: расширение ключа и выбор ключа для конкретного этапа. При этом руководствуются следующими принципами:

Общее количество бит в ключах для всех этапов совпадает со значением произведения длины информационного блока Nb 32 на количество этапов Nr , увеличенным на единицу (то есть в случае, если длина блока равна 128 бит и используется 10 циклов, потребуется 1408 бит для ключей циклов).

Основной ключ расширяется до расширенного ключа.

Ключи циклов берутся из этого расширенного ключа следующим образом: ключ для первого этапа состоит из первых Nb слов, для второго этапа используются следующие Nb слов, и так далее.

Алгоритм расширения ключа

Расширенный ключ — это одномерный массив, состоящий из четырехбайтных слов W [i], i =0,, Nb (Nr +1) 1. Первые Nk слов содержат основной ключ, остальные слова получаются по рекуррентному алгоритму, зависящему от значения Nk — один вариант для Nk , меньшего или равного 6, второй — для Nk , большего 6.

Если Nk 6 , то

W [i] = (Key[4 i], Key[4 i +1], Key[4 i + 2], Key[4 i + 3]) для i = 0,, Nk 1,

где Key[i] — соответствующие байты основного ключа.

Для остальных i = Nk , , Nb (Nr +1) 1 расширенный ключ получается следующим образом: W[i] =W[i Nk ] W[i 1], если i не кратно Nk ,

W[i] =W[i Nk ] A , если i кратно Nk ,

где A получается из W [i 1] по следующему алгоритму: