Алгоритм Райндал (Rijndael). Основные особенности шифра Райндал

Автор работы: Пользователь скрыл имя, 07 Января 2014 в 09:01, курсовая работа

Краткое описание

Цель курсового проекта: Рассмотреть алгоритм шифрования AES (Rijndael). Рассмотреть основные математические операции. Разобрать и реализовать процедуры AddRoundKey, SubBytes, ShiftRows, MixColumns.
Задачи:
1. Рассказать о шифровании AES.
2. Понять принцип построение стандарта шифрования.
3. Разобрать алгоритм Rijndael.

Содержание

Введение 2
Глава 1. Стандарт шифрования данных AES. 3
1.1 Алгоритм шифрования AES 3
1.2 Перспективный стандарт AES 8
1.3 Атака на алгоритм шифрования AES 12
Глава 2. Алгоритм Райндал (Rijndael). Основные особенности шифра Райндал. 14
2.1 Алгоритм Rijndael. Предварительные математические понятия 14
2.2 Сложение 14
2.3 Умножение 15
2.4 Умножение на Х 16
2.5 Обоснование разработки 17
2.6 Спецификация алгоритма 18
2.7 Состояние, ключ шифрования и число раундов 19
2.8 Преимущества алгоритма 20
2.9 Расширения 21
2.10 Другие возможности 22
2.11 Преимущества алгоритма шифрования Rijndael (AES) 23
Заключение 24
Литература 25

Прикрепленные файлы: 1 файл

Курсовая.docx

— 139.87 Кб (Скачать документ)

m(x) = x8 + x4 + x3 + x + 1

или '11B' в шестнадцатеричном представлении.

Пример: '57' • '83' = 'C1'

Или

(x6 + x4 + x2 + х + 1) (x7 + х + 1) =

= x13 + x11 + x9 + x8 + x7 + x7 + x5 + x3 + x2 + x + x6 + x4 + x2 + х + 1 =

= x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1


(x8 + x4 + x3 + х + 1) (x5 + x3) + x7 + x6 + 1 = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 +1

Следовательно,

x13 + x11 + x9 + x8 + x6 + x5 + x4 + x8 + 1 mod (x8 + x4 + x3 + х + 1) = x7 + x6 + 1

Ясно, что результат является двоичным полиномом не выше 8 степени. В отличие  от сложения, простой операции умножения  на уровне байтов не существует.

Умножение, определенное выше, является ассоциативным, и существует единичный  элемент ('01'). Для любого двоичного полинома b(x) не выше 8-й степени можно использовать расширенный алгоритм Евклида для вычисления полиномов a(x) и c(x) таких, что

b(x) a(x) + m(x) c(x) = 1

Следовательно,

a(x) • b(x) mod m(x) = 1

или

b-1(x) = a(x) mod m(x)

Более того, можно показать, что

a(x) • (b(x) + c(x)) =

a(x) • b(x) + a(x) • c(x)

Из всего этого следует, что  множество из 256 возможных значений байта образует конечное поле GF (28) c XOR в качестве сложения и умножением, определенным выше.

 

2.4 Умножение на Х

Если умножить b(x) на полином х, мы будем иметь:

b7x8 + b6x7 + b5x6 + b4x5 + b3x4 + b2x3 + b1x2 + b0x

x • b(x) получается понижением предыдущего результата по модулю m(x). Если b7 = 0, то данное понижение является тождественной операцией. Если b7 = 1, m(x) следует вычесть (т.е. XORed). Из этого следует, что умножение на х может быть реализовано на уровне байта как левый сдвиг и последующий побитовый XOR c '1B'. Данная операция обозначается как b = xtime (a).

Полиномы с коэффициентами из GF

Полиномы могут быть определены с коэффициентами из GF(28). В этом случае четырехбайтный вектор соответствует полиному степени 4.

Полиномы могут быть сложены  простым сложением соответствующих  коэффициентов. Как сложение в GF(28) является побитовым XOR, так и сложение двух векторов является простым побитовым XOR.

Умножение представляет собой более  сложное действие. Предположим, что  мы имеем два полинома в GF(28).

a(x) = a3x3 + a2x2 + a1x + a0

b(x) = b3x3 + b2x2 + b1x + b0

c(x) = a(x) b(x) определяется следующим образом:

с(x) = с6x6 + с5x5 + с4x4 + с3x3 + с2x2 +

с1x + с0

с0 = a0 • b0

с1 = a1 • b0 a0 • b1

с2 = a2 • b0 a1 • b1 a0 • b2

с3 = a3 • b0 a2 • b1 a1 • b2 a0 • b3

с4 = a3 • b1 a2 • b2 a1 • b3

с5 = a3 • b2 a2 • b3

с6 = a3 • b3

Ясно, что в таком виде с(х) не может быть представлен четырехбайтным вектором. Понижая с(х) по модулю полинома 4-й степени, результат может быть полиномом степени ниже 4. В Rijndael это сделано с помощью полинома

M(x) = x4 + 1

так как

xj mod (x4 + 1) = xj mod 4

Модуль, получаемый из а(х) и b(x), обозначаемый d(x) = a(x) b(x), получается следующим образом:

d0 = a0 • b0 a3 • b1 a2 • b2 a1 • b3

d1 = a1 • b0 a0 • b1 a3 • b2 a2 • b3

d2 = a2 • b0 a1 • b1 a0 • b2 a3 • b3

d3 = a3 • b0 a2 • b1 a1 • b2 a0 • b3

Операция, состоящая из умножения  фиксированного полинома а(х), может быть записана как умножение матрицы, где матрица является циклической. Мы имеем

Замечание: х4 + 1 не является несократимым полиномом в GF (28), следовательно, умножение на фиксированный полином необязательно обратимо. В алгоритме Rijndael выбран фиксированный полином, который имеет обратный.

 

2.5 Обоснование разработки

При разработке алгоритма учитывались  следующие три критерия:

  • противодействие всем известным атакам;
  • скорость и компактность кода для широкого круга платформ;
  • простота разработки.

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

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

  1. Нелинейный слой состоит из параллельного применения S-boxes для оптимизации нелинейных свойств в наихудшем случае.
  2. Слой линейного перемешивания строк гарантирует высокую степень диффузии для нескольких раундов.
  3. Слой линейного перемешивания столбцов также гарантирует высокую степень диффузии для нескольких раундов.
  4. Дополнительный слой ключа состоит из простого XOR промежуточного состояния с ключом раунда.

Перед первым раундом применяется дополнительное забеливание с использованием ключа. Причина этого состоит в следующем. Любой слой после последнего или до первого добавления ключа может быть просто снят без знания ключа и тем самым не добавляет безопасности в алгоритм (например, начальная и конечная перестановки в DES). Начальное или конечное добавление ключа применяется также в некоторых других алгоритмах, например IDEA, SAFER и Blowfish.

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

 

2.6 Спецификация алгоритма

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

 

2.7 Состояние, ключ шифрования и число раундов

Различные преобразования выполняются  над промежуточным результатом, называемым состоянием.

Состояние можно рассматривать  как двумерный массив байтов. Этот массив имеет четыре строки и различное  число столбцов, обозначаемое как Nb, равное длине блока, деленной на 32. Ключ также можно рассматривать как двумерный массив с четырьмя строками. Число столбцов ключа шифрования, обозначаемое как Nk, равно длине ключа, деленной на 32.

В некоторых случаях эти блоки  также рассматриваются как одномерные массивы четырехбайтных векторов, где  каждый вектор состоит из соответствующего столбца. Такие массивы имеют  длину 4, 6 или 8 соответственно, и индексы  в диапазонах 0 … 3, 0 … 5 или 0 … 7. Четырехбайтные вектора иногда мы будем называть словами.

Если необходимо указать четыре отдельных байта в четырехбайтном векторе, будет использоваться нотация (a, b, c, d), где a, b, c и d являются байтами в позициях 0, 1, 2 и 3, соответственно, в рассматриваемом столбце, векторе или слове.

 
Рис. 6  Пример состояния (с Nb = 6) и ключа шифрования (с Nk = 4)

 

Входы и выходы Rijndael считаются одномерными массивами из 8 байтов, пронумерованными от 0 до 4* Nb - 1. Следовательно, эти блоки имеют длину 16, 24 или 32 байта, и массив индексируется в диапазонах 0 … 15, 0 … 23 или 0 … 31. Ключ считается одномерным массивом 8-битных байтов, пронумерованных от 0 до 4* Nk - 1. Следовательно, эти блоки имеют длину 16, 24 или 32 байта, и массив индексируется в диапазонах 0 … 15, 0 … 23 или 0 … 31.

Входные байты алгоритма отображаются в байты состояния в следующем  порядке: А0,0, А1,0, А2,0, А3,0, А0,1, А1,1, А2,1, А3,1, … Байты ключа шифрования отображаются в массив в следующем порядке: K0,0, K1,0, K2,0, K3,0, K0,1, K1,1, K2,1, K3,1, … После выполнения операции шифрования выход алгоритма получается из байтов состояния аналогичным образом.

Следовательно, если одноразмерный  индекс байта в блоке есть n, и двухмерный индекс есть (i,j), то мы имеем:

I = n mod 4

J = n / 4

N = i + 4*j

Более того, индекс i является также номером байта в четырехбайтном векторе или слове, j является индексом вектора или слова во вложенном блоке.

Число раундов обозначается Nr и зависит от значений Nb и Nk, что показано в следующей таблице.

Таблица 1. Число раундов как функция от длины блока и длины ключа

Nr

Nb = 4

Nb = 6

Nb = 8

Nk = 4

10

12

14

Nk = 6

12

12

14

Nk = 8

14

14

14


 

2.8 Преимущества алгоритма

Преимущества, относящиеся к аспектам реализации:

  • Rijndael может выполняться быстрее, чем обычный блочный алгоритм шифрования. Выполнена оптимизация между размером таблицы и скоростью выполнения.
  • Rijndael можно реализовать в смарт-карте в виде кода, используя небольшой RAM и имея небольшое число циклов. Выполнена оптимизация размера ROM и скорости выполнения.
  • Преобразование раунда допускает параллельное выполнение, что является важным преимуществом для будущих процессоров и специализированной аппаратуры.
  • Алгоритм шифрования не использует арифметические операции, поэтому тип архитектуры процессора не имеет значения.

Простота разработки:

  • Алгоритм шифрования полностью "самоподдерживаемый". Он не использует других криптографических компонентов, S-box'ов, взятых из хорошо известных алгоритмов, битов, полученных из специальных таблиц, чисел типа p и тому подобных уловок.
  • Алгоритм не основывает свою безопасность или часть ее на неясностях или плохо понимаемых итерациях арифметических операций.
  • Компактная разработка алгоритма не дает возможности спрятать люки.

Переменная длина блока:

  • Длины блоков от 192 до 256 бит позволяют создавать хэш-функции без коллизий, использующие Rijndael в качестве функции сжатия. Длина блока 128 бит сегодня считается для этой цели недостаточной.

Расширения:

  • Разработка позволяет специфицировать варианты длины блока и длины ключа в диапазоне от 128 до 256 бит с шагом в 32 бита.
  • Хотя число раундов Rijndael зафиксировано в данной спецификации, в случае возникновения проблем с безопасностью он может модифицироваться и иметь число раундов в качестве параметра.

 

2.9 Расширения

Различная длина  блока и ключа шифрования

Обработка ключа поддерживает длину  ключа, которая была бы кратна 4 байтам. Единственным параметром, который необходим  для определения другой длины  ключа, отличной от 128, 192 или 256 бит, является число раундов алгоритма.

Структура алгоритма допускает  произвольную длину блока, кратную 4 байтам, с минимумом в 16 байтов. Добавление ключа и ByteSub и MixColumn преобразования не зависят от длины блока. Единственным преобразованием, которое зависит от длины блока, является ShiftRow. Для каждой длины блока должен быть определен специальный массив С1, С2, С3.

Можно определить расширение Rijndael, которое также поддерживает длины блока и ключа между 128 и 256 битами с приращением в 32 бита. Число раундов определяется так:

Nr = max (Nk, Nb) + 6

Это расширяет правило для количества раундов для альтернативных длин блока и ключа.

Дополнительные значения С1, С2 и С3 определены в следующей таблице.

 

 

 

 

Таблица 2 Величина сдвига в зависимости от длины блока

Nb

С1

С2

С3

5

1

2

3

7

1

2

4

Информация о работе Алгоритм Райндал (Rijndael). Основные особенности шифра Райндал