Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Шифрование содержимого базы данных



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

В качестве алгоритма шифрования выбран алгоритм AES. На текущий момент этот алгоритм считается достаточно надежным, имеет приемлемую длину ключа и отсутствие метода простого взлома [14].

AES является стандартом, основанным на алгоритме Rijndael. Для AES длина блока входных данных (input) и длина блока с промежуточным результатом шифрования (State) постоянна и равна 128 бит, а длина шифроключа K составляет 128, 192, или 256 бит. При этом, исходный алгоритм Rijndael допускает длину ключа и размер блока от 128 до 256 бит
с шагом в 32 бита. Для обозначения выбранных длин input, State и K
в 32-битных словах используются обозначения: для input и State, для K соответствующих длин [15].

В начале шифрования input копируется в массив State по правилу:

 

, (5)

 

для и {\displaystyle 0\leq c< Nb}.

После этого к State применяется процедура AddRoundKey() и затем State проходит через процедуру трансформации (раунд) 10, 12, или 14 раз
(в зависимости от длины ключа), при этом надо учесть, что последний раунд несколько отличается от предыдущих. В итоге, после завершения последнего раунда трансформации, State копируется в блок выходных данных (output)
по правилу:

, (6)

для и {\displaystyle 0\leq c< Nb}.

Отдельные трансформации SubBytes(), ShiftRows(), MixColumns() и AddRoundKey() обрабатывают State. Массив w [ ] содержит key schedule.

В рассматриваемой версии алгоритма AES-128 ключ шифра состоит из 128 битов, поделенных на 16 байтов: k0, k1, k2, … k15 и записывается
в столбцы матрицы InputKey. Каждый столбец матрицы InputKey образует слово, то есть фактически ключ шифра – это четыре слова w0, w1, w2, w3,
где w0 = k0, k1, k2, k3, w1 = k4, k5, k6, k7 и так далее (рисунок 9).

 

k0 k4 k8 k12
k1 k5 k9 k13
k2 k6 k10 k14
k3 k7 k11 k15
w0 w1 w2 w3 w4 w5 w6 w7 w42 w43

 

ключ первого раунда
ключ второго раунда


 

Рисунок 10 – Формирование ключей раунда

 

Из этих слов с помощью специального алгоритма (о нем позже) образуется последовательность из 44 слов: w0, w1, w2, …, w43 (каждое слово по 32 бита).

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

 

Рисунок 11 – Схема шифрования и дешифрования AES

 

Перед первым раундом выполняется операция AddRoundKey (суммирование по модулю 2 с начальным ключом шифра). Преобразования, выполненные в одном раунде, обозначают Round (State, RoundKey)
где переменная State является матрицей, описывающей данные на входе раунда и на его выходе после шифрования; переменная RoundKey – матрица, содержащая раундовый ключ.

Раунд состоит из 4 различных преобразований (рисунок 11).

В данные преобразования входят:

1) побайтовая подстановка в S–боксе с фиксированной таблицей замен (SubBytes);

2) побайтовый сдвиг строк матрицы State на различное количество байт (ShiftRows);

3) перемешивание байт в столбцах (MixColumns);

4) сложение по модулю 2 с раундовым ключом (AddRoundKey).

Последний раунд несколько отличается от предыдущих тем, что не задействует функцию MixColumns [16, 17].

 

Рисунок 12 – Схема раундов шифрования и дешифрования AES

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

Поскольку алгоритм использует конечное поле Галуа GF(28), рассмот-рим математические основы шифра AES.

Для описания алгоритма используется конечное поле Галуа GF(28), построенное как расширение поля GF(28) = {0, 1} по модулю неприводимого многочлена. Элементами поля GF(28) являются многочлены вида:

 

. (7)

 

Степень многочленов меньше 8, а коэффициенты b7, b6, …, b0Î {0, 1}. Операции в поле выполняются по модулю . Всего в поле GF(28) насчитывается 256 многочленов.

Представление двоичного числа b7b6b5b4b3b2b1b0 в виде многочлена
с коэффициентами b7, b6, …, b0 позволяет интерпретировать байт как битовый многочлен в конечном поле GF(28):

 

. (8)

 

Например, байт 63 задает последовательность битов 01100011
и определяет конкретный элемент поля 01100011 « .

Рассмотрим основные математические операции в поле GF(28):

1) сложение байт можно выполнить любым из трех способов:

1.1) представить байты битовыми многочленами и сложить
их по обычному правилу суммирования многочленов с последующим приведением коэффициентов суммы по модулю 2 (операция XOR над коэффициентами);

1.2) суммировать по модулю 2 соответствующие биты в байтах;

1.3) сложить байты в шестнадцатеричной системе исчисления;

Например, следующие три записи эквивалентны:

– представление в виде многочленов:

 

; (9)

 

– битовое представление:

 

; (10)

 

– шестнадцатеричное представление:

 

{57} Å {83}= {D4}; (11)

 

2) умножение байт выполняется с помощью представления их многочленами и перемножения по обычным алгебраическим правилам. Полученное произведение необходимо привести по модулю многочлена (результат приведения равен остатку
от деления произведения на ).

Перемножение многочленов в поле можно упростить, введя операцию умножения битового многочлена на :

 

. (12)

 

Для любого ненулевого битового многочлена в поле GF(28) существует многочлен обратный к нему по умножению, то есть

 

). (13)

 

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

 

2.7.1 Многочлены с коэффициентами,
принадлежащими полю GF(28)

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

(14)

Таким образом, в этих многочленах в роли коэффициентов при неизвестных задействованы байты вместо бит. Далее такие многочлены будем представлять в форме слова [a0, a1, a2, a3].

В стандарте AES при умножении многочленов используется приведение по модулю другого многочлена .

Для изучения арифметики рассматриваемых многочленов введем дополнительно многочлен:

 

, (15)

где Î GF(28).

 

Тогда сумма многочленов и имеет вид:

 

. (16)

 

Умножение является более сложной операцией. Пусть, мы перемножаем
два многочлена:

,

. (18)

 

Результатом умножения будет многочлен

 


, (19)

 

где ;

;

;

;

;

;

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

. (20)

 

Поэтому в произведении коэффициенты при степенях , 0, 1, 2, 3 равны сумме произведений по индексам, для которых ,

, = 0, 1, 2, 3. Таким образом, после приведения по модулю получим:

 

, (21)

 

где ;

;

;

Рассмотрим подробнее преобразования раунда шифрования:

1) операция SubBytes. Операция выполняет нелинейную замену байтов, выполняемую независимо с каждым байтом матрицы State. Замена обратима и построена путем комбинации двух преобразований над входным байтом (рисунок 12);

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

3) выполнение некого аффинного преобразования: умножение инвертированного байта на многочлен

 

(22)

 

и суммирование с многочленом

 

(23)

в поле F2.

В матричной форме процедура SubBytes записывается как

 

, (24)

 

где через обозначены входные биты, а через – выходные.

Если на вход функции попадает нулевой байт, то результатом замены будет число . Процесс замены байтов с помощью таблицы подстановки иллюстрирует рисунок 12. Нелинейность преобразования обусловлена нелинейностью инверсии , а обратимость – обратимостью матрицы.

 

Рисунок 13 – Операция SubBytes

 

Созданную на основе операции SubBytes специальную таблицу замен байтов в шестнадцатеричной системе называют S–боксом или таблицей преобразований SubBytes (таблица 13).

 

Таблица 13 – Таблица преобразований SubBytes

  A B C D E F
7C 7B F2 6B 6F C5 2B FE D7 AB
CA C9 7D FA FO AD D4 A2 AF 9C A4 CO
B7 FD 3F F7 CC A5 E5 F1 D8
C7 C3 9A E2 EB B2
2C 1A 1B 6E 5A AO 3B D6 B3 E3 2F
D1 ED FC B1 5B 6A CB BE A4 AC CF
DO EF AA FB 4D F9 F7 3C 9F A8
A3 8F 9D F5 BC B6 DA FF F3 D2
CD 0C EC 5F C4 A7 7E 3D 5D
4F DC 2A EE B8 DE 5E 0E DE
A E0 3A 0A 5C C2 D3 AC AE
B E7 CB 6D 8D D5 4E A9 6C F4 EA E7 8B
C BA 2E 1C A6 B4 C6 F8 DD IF 4B BD 1D 8A
D 3E B5 F6 OE B9 C1 2B 9E
E E1 F8 D9 8E 9B 1E E9 CE DF
F 8C A1 OD BF E6 2D OF BO BB

 

Например, если 1, 1 = , то результат замены этого байта следует искать на пересечении строки с индексом и столбца с индексом .

Операция ShiftRows применяется к строкам матрицы State – ее первая строка неподвижна, а элементы нижних трех строк циклически сдвигаются вправо на 1, 2 и 3 байта соответственно (рисунок 14).

По сути это перестановка элементов матрицы, в которой участвуют только элементы строк, поэтому преобразование обратимо.

 

.

Рисунок 14 – Операция ShiftRows

 

С помощью операции MixColumns выполняется перемешивание байтов в столбцах матрицы State. Каждый столбец этой матрицы принимается
за многочлен над полем GF(28) и умножается на фиксированный многочлен

 

(25)

 

по модулю многочлена (рисунок 15).

Как показано выше, такую операцию можно записать в матричном виде как

 

(26)

Рисунок 15 – Операция MixColumns

 

Функция AddRoundKey(State, RoundKey) побитово складывает элементы переменной RoundKey и элементы переменной State по принципу: i–й столбец данных ( 0, 1, 2, 3) складывается с определенным 4–байтовым фрагментом расширенного ключа , где – номер поточного раунда алгоритма (рисунок 16).

При шифровании первое сложение ключа раунда происходит
до первого выполнения операции SubBytes.

Рисунок 16 – Операция AddRoundKey

 

Рисунок 17 демонстрирует свойства рассеивания и перемешивания информации в ходе шифрование алгоритмом AES. Видно, что два раунда обеспечивают полное рассеивание и перемешивание информации. Достигается это за счет использования функций ShiftRows и MixColumns. Операция SubBytes придает шифрованию стойкость против дифферен-циального криптоанализа, а операция AddRoundKey обеспечивает необходимую секретную случайность.

 

Рисунок 17 – Перемешивание информации

 

Для трех вариантов ключей AES полный перебор требует 2127, 2191
или 2255 операций соответственно.

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

1) дифференциальный криптоанализ;

2) линейныйкриптоанализ;

3)криптоанализ на основе связанных ключей (слабых ключей
в алгоритме нет)

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-08; Просмотров: 743; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.079 с.)
Главная | Случайная страница | Обратная связь