Смекни!
smekni.com

Криптографическая защита информации 2 (стр. 3 из 7)

В качестве стандарта принят вариант шифра только с размером блока 128 бит (16 байт). Число раундов шифрования определяется в зависимости от размера блока и ключа по следующей таблице:

размер ключа 128 192 256
размер блока
128 10 12 14
192 12 12 14
256 14 14 14

Иными словами, из двух размеров выбирается максимальный, и если он равен 128 бит, то используется 10 раундов, если 192 бита, то 12, и если 256 - то 14 раундов шифрования.

В данном продукте решено использовать стандартный размер блока в 128 бит и размер ключа в 256 бит, как наиболее стойкий вариант. Следовательно, будет 14 раундов шифрования.

Шифр Rijndael выполнен в архитектуре "Квадрат" (Square), получившей свое название от первого, построенного в соответствии с ее принципами, криптоалгоритма. В Rijndael блоки открытых и шифрованных данных, соответственно T и T', представляются в виде массивов из 16, 24 или 32 байтов:

T = (t1, t2,...,tN)

T' = (t'1, t'2,...,t'N)

| t | = | t' | = 8, N

{16, 24, 32}.

В соответствии с использованными архитектурными принципами в ходе криптографических преобразований исходный и зашифрованный блоки данных, а также все промежуточные результаты процесса шифрования интерпретируются как матрицы байтов размером 4´n, откуда получаем n = N/4, nÎ{4, 6, 8}. Матрицы заполняются байтами входного блока (открытых данных при шифровании и шифрованных данных при дешифрации соответственно) по столбцам сверху вниз и слева направо, и в точно таком же порядке извлекаются байты из матрицы-результата:

Схема преобразования данных при шифровании:

Схема алгоритма шифрования:

На рисунках использованы следующие обозначения:

T, T' - открытый и зашифрованный блоки данных соответственно;

ki - i-тый ключевой элемент;

F, F' - регулярное нелинейное преобразование и преобразование последнего раунда соответственно;

Xi - промежуточное состояние шифруемого блока после прибавления i-того ключевого элемента.

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

T' = EK(T) = kR+1

F'(kR
F(kR-1
... F(k2
F(k1
T))...)).

Число R раундов шифрования переменное и зависит от размера блока данных и ключа. Прибавление ключевых элементов, которым начинается и заканчивается процесс шифрования, а также некоторые другие операции раундового преобразования выполняется побайтно в конечном поле Галуа GF(28), полевой операцией сложения в нем является побитовое суммирование по модулю 2. Соответственно, каждый ключевой элемент является байтовой матрицей того же самого размера, что и блок данных. За один раунд шифрования преобразуется полный блок данных, а не его часть, как в сетях Файстеля. На последнем раунде функция нелинейного преобразования отличается от аналогичной функции, используемой в остальных раундах - это сделано для обеспечения алгоритмической эквивалентности прямого и обратного преобразований шифрования.

Процесс дешифрации блока данных алгоритмически идентичен процессу его шифрования и, следовательно, рисунки 1 и 2 также справедливы и для него, если через T обозначить блок зашифрованных данных, а через T' - открытых. Однако различия между этими двумя процедурами в архитектуре "Квадрат" несколько более существенны, чем в сетях Файстеля - они различаются не только порядком использования ключевых элементов в раундах шифрования, но и самими этими элементами, и некоторыми другими константами, используемыми в алгоритме.

Нелинейное преобразование F матрицы данных состоит из трех шагов: замены байтов матрицы на новые значения (S[]), циклического сдвига строк матрицы влево (R¬), умножения матрицы данных слева на постоянную матрицу-циркулянт M:

X' = F(X) = M´ R¬(S(X)).

Схема преобразования блока данных при нелинейном преобразовании:

Схема алгоритма нелинейного преобразования:

Все входные (X), выходные (X') и промежуточные (Y, Z) значения преобразования являются матрицами байтов одинакового размера 4´n. Функция преобразования последнего раунда F' отличается от регулярной функции преобразования F отсутствием шага умножения матрицы данных слева на постоянную матрицу.

Вся нелинейность преобразования сосредоточена в его первом шаге - замене, второй и третий шаги являются линейными. Первый шаг служит для перемешивания информации внутри байтов, второй обеспечивает "экспорт" изменений в другие столбцы, третий осуществляет диффузию изменений в одном элементе матрицы на весь соответствующий столбец. Таким образом, за два раунда достигается диффузия изменений в одном единственном бите на весь блок данных. Ниже каждый из указанных шагов рассмотрен подробно, при этом некоторые преобразования байтов определены в терминах операций в конечном поле GF(28), порожденном неприводимым полиномом m(x) над полем GF(2): m(x) = x8+x4+x3+x+1. Операция сложения в этом поле является ни чем иным, как побитовым суммированием по модулю 2, умножение в соответствие с определением поля выполняется как обычное умножение полиномов над GF(2) по модулю полинома m(x). При манипулировании с байтами данных как с элементами поля GF(28) каждый бит соответствует слагаемому вида xi в соответствии со старшинством бита в байте. Можно сказать, что если байт с целочисленным значением b представлен в виде полинома B(x), то справедливо b = B(2).

Побайтовая замена

В ходе побайтовой замены каждый байт матрицы данных заменяется на новое значение того же размера, индексируя общий для всех байтов вектор замен S 8-в-8 бит:

yij = S[xij], 1£i£4, 1£j£n,

где n - число столбцов матрицы данных - 4,6 или 8. Единственный узел замен в шифре Rijndael конструируется с помощью следующего алгебраического соотношения:

S[y] = (x4+x3+x2+x+1) + y-1

(x7+x6+x5+x4+1) mod (x8+1).

При этом обращение ненулевых байтов осуществляется в описанном выше конечном поле GF(28), для нулевого байта полагают 0-1 = 0. Таким образом, байтовая замена определяется как обращение элемента-байта в конечном поле GF(28), доопределенное для нулевого элемента поля, с последующим аффинным преобразованием результата. Коэффициенты этого преобразования выбраны таким образом, чтоб у полученного узла замен отсутствовали точки неподвижности (S[y] = y), и "антинеподвижности" (S[y] = ~y). Тильдой (знаком "~") обозначена операция побитового дополнения своего аргумента.

Естественно, указанная выше формула для построения узла замен не предназначена для использования непосредственно во время шифрования - гораздо эффективнее использовать уже готовый узел замен:

x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0x 63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76
1x ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0
2x b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15
3x 04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75
4x 09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84
5x 53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf
6x d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8
7x 51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2
8x cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73
9x 60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db
Ax e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79
Bx e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08
Cx ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a
Dx 70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e
Ex e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df
Fx 8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16

Заменяющее значение выбирается на пересечении строки, определяемой старшей 16-ричной цифрой заменяемого значения, и столбца, определяемого его младшей цифрой.