Лабораторная работа: Методы и средства защиты компьютерной информации

Далее в описании внутренних функций алгоритма Rijndael, через Lb будем обозначать длину блока в четырехбайтовых словах, через Lk - длину ключа пользователя в четырехбайтовых словах (то есть Lb , Lk Î {4, 6, 8}) и через Lr - число раундов (см. таблицу 1).

Открытый и зашифрованный тексты представлены в виде полей байтов и являются соответственно входом и выходом алгоритма.

Блок открытого текста, обрабатываемый как поле m0 ,..., m4L b-1 ,представлен в виде двумерной структуры B (см. таблицу 2). в которой байты открытого текста отсортированы в следующем порядке:

т.е. , где i = n mod 4 и; j = ën/4û.

Таблица 2

b0 ,0 b0,1 b0,2 b0,3 b0,4 b0,Lb-1
b1,0 b1,1 b1,2 b1,3 b1,4 b1,Lb-1
b2,0 b2,1 b2,2 b2,3 b2,4 b2,Lb-1
b3,0 b3,1 b3,2 b3,3 b3,4 b3,Lb-1

Доступ к структуре B в функциях алгоритма Rijndael осуществляется по-разному, в зависимости от операции. S -блок оперирует с битами, ShiftRow - со строками (bi,0 , bi,1 , bi,2 , …, bi,Lb-1 ) структуры B, а функции AddRoundKey и MixColumn - с четырехбайтовыми словами, обращаясь к столбцам .

2.1 ВЫЧИСЛЕНИЕ КЛЮЧА РАУНДА

И для зашифрования, и для расшифрования требуется сгенерировать Lr раундовых ключей, совокупность которых называется разверткой ключа (keyschedule). Развертка строится путем присоединения к секретному ключу пользователя, рекурсивно получаемых: четырехбайтовых слов

.

Первые Lk слов развертки ключа - это сам секретный ключ пользователя. Для Lk Î {4, 6} очередное четырехбайтовое слово ki определяется как сумма по модулю 2 предыдущего слова ki -1 со словом ki - Lk . При iº 0 modLk перед операцией XOR нужно применить функцию FLk (k, i), которая включает в себя циклический сдвиг k байтов влево (операция r (k)), подстановку S (r (k)) с использованием S -блока алгоритма Rijndael (к этой операции мы еще вернемся) и сложение по модулю 2 с константой c (ëi/Lk û). Итоговое уравнение функции F таково:

FLk (k, i) = S (r (k)) Åc (ëi/Lk û).

Константы c (j) задаются равенством c (j) = (rc (j), 0, 0, 0), где значения rc (j) определяются рекурсивно как элементы поля F2 8:

rc (1) = 1, rc (j) = rc (j-1) х = хj-1 .

Или в виде численных значений:

rc (1) = '01’, rc (j) = rc (j-1) •'02'.

Программно значение rc (j) реализуется (j- 1) - кратным рекурсивным вызовом функции xtime, с начальным значением аргумента, равным 1 или более быстро - с использованием таблицы предвычислений (см. таблицу 3).

Таблица 3. Константы rc (j) (в шестнадцатеричном виде)

'01’ '02' '04' '08' '10' '20' '40' '80' '1B' '36'
'6C 'D8' 'AB' '4D' '9A' '2F' '5E' 'ВС '63' 'C6'
'97' '35' '6A' 'D4' 'B3' 7O' 'FA' 'EF' 'C5 '91'

Для ключей длины 256 бит (то есть при Lk = 8) введена дополнительная операция подстановки: при iº 4 modLk перед операцией XOR значение ki -1 заменяется на s (ki -1 ).

Таким образом, развертка ключей состоит из Lb (Lr + 1) четырехбайтовых слов, включая и секретный ключ пользователя. На каждом раунде i = 0,..., Lr - 1 очередные Lb , четырехбайтовых слова с kLbi по kLb ( I+1) выбираются из развертки и используются в качестве ключа раунда. Раундовые ключи рассматриваются, по аналогии с блоками открытого текста, как двумерная структура (см. таблицу 4).

Таблица 4. Представление раундовых ключей

k0,0 k 0,1 k 0,2 k 0,3 k 0,4 k 0, Lb-1
k 1,0 k 1,1 k 1,2 k 1,3 k 1,4 k 1, Lb-1
k 2,0 k 2,1 k 2,2 k 2,3 k 2,4 k 2, Lb-1
k 3,0 k 3,1 k 3,2 k 3,3 k 3,4 k 3, Lb-1

Для ключей длины 128 бит процесс генерации ключа изображен на рис.2.

Рис.2. Диаграмма раундовых ключей для Lk = 4

Пока не известны слабые ключи, использование которых неблагоприятно сказалось бы на стойкости алгоритма Rijndael

2.2 S-БЛОК

Блок подстановки, или S -блок алгоритма Rijndael показывает, каким значением следует заменять каждый байт блока текста на каждом раунде. S -блок представляет собой список из 256 байтов. Сначала каждый ненулевой байт рассматривается как элемент поля F2 8 и заменяется мультипликативно обратным (нулевые байты остаются неизменными). Затем выполняется следующее аффинное преобразование над полем F2 путем умножения на матрицу и сложения с вектором (11000110):

Здесь через х0 и у0 обозначены младшие, а через х7 и у7 - старшие биты в байте; вектор (11000110) длины 8 соответствует шестнадцатеричному числу '63'.

S -блок построен так, чтобы свести к минимуму чувствительность алгоритма к дифференциальному и линейному методам криптоанализа, а также к алгебраическим атакам. Последовательно применяя приведенную выше процедуру к числам от 0 до 255, получаем таблицу 5 (значения идут по строкам слева направо).

К-во Просмотров: 328
Бесплатно скачать Лабораторная работа: Методы и средства защиты компьютерной информации