Стандартные криптографические алгоритмы шифрования
Автор: Чернявский Э.А., Ледяев В.П.
Журнал: Экономика и социум @ekonomika-socium
Рубрика: Информационные и коммуникативные технологии
Статья в выпуске: 7 (26), 2016 года.
Бесплатный доступ
В статье рассматриваются симметричные алгоритмы шифрования данных. Рассматриваются стандарты ГОСТ 28147-89, DES, AES128. Осуществляется сравнение производительности данных алгоритмов при различных входных данных в режиме последовательного и параллельного выполнения Также рассматривается возможность параллелизма в используемых алгоритмах.
Криптография, открытый ключ, секретный ключ, гост 28147-89
Короткий адрес: https://sciup.org/140121157
IDR: 140121157
Текст научной статьи Стандартные криптографические алгоритмы шифрования
Шифрование используется для защиты данных от посторонних. Процесс шифрования данных делится на две составляющие: зашифрование и расшифрование информации. Перед отправлением данных они зашифровываются, при получении – расшифровываются.
Шифрование обеспечивает три состояния безопасности информации:
-
1. Конфиденциальность – шифрование используется для скрытия информации от неавторизованных при передаче или хранении.
-
2. Целостность – шифрование не допускает изменения данных при передаче или хранении.
-
3. Идентифицируемость – ограничивает доступ к данным посторонним пользователям без специального ключа.
Шифром называется пара алгоритмов, реализующих зашифрование и расшифрование, т.е. пара шифрующей и расшифровывающей функций:
-
• Шифрующая функция: Е: М ^ С
-
• Расшифровывающая функция: D:C ^ М
Преобразование зашифровывающей функции происходит с использованием некоторого ключа К 1 . Преобразование расшифровывающей функции - ключа К2 .
-
• Симметричные алгоритмы – алгоритмы, в которых для
расшифрования и зашифрования используется один и тот же ключ, т.е. К = К = К 2 .
-
• Ассиметричные алгоритмы (алгоритмы с открытым ключом) –
алгоритмы, в которых для расшифрования и зашифрования используются различные ключи.
В данной статье рассматриваются симметричные алгоритмы шифрования данных. В настоящее время наиболее популярными являются AES (USA), DES (USA), ГОСТ 28147-89 (СССР, РФ).
Рассмотрим в подробностях каждый алгоритм с теоретической точки зрения.
ГОСТ 28147-89
Описание
ГОСТ 28147-89 – советский и российский стандарт симметричного шифрования, ведённый в 1990 году. Также является стандартом СНГ. Представляет из себя блочный шифр с 256-битным ключом и 32 циклами преобразования. Данные на входе разбиваются на блоки по 64 бита. Основа алгоритма – сеть Фейстеля.
Режимы работы
Существует 4 основные режима работы данного алгоритма:
-
1. Простая замена
-
2. Гаммирование
-
3. Гаммирование с обратной связью
-
4. Режим выработки имитовставки
Остановимся на режиме простой замены подробнее.
Режим простой замены
Известен как «режим электронной кодовой книги» (ECB – Electronic Codebook).
На входе: 64-битный блок данных, 256-битный ключ.
Рассмотрим алгоритм зашифрования по шагам:
-
1. Разбиванием входной блок данных на две половины: пусть младшие 32 бита - это А, старшие 32 бита - это В.
-
2. Генерируем 8 32-битных ключей из исходного ключа. Для этого
-
3. Далее генерируются ключи К9 . К24 как циклическое повторение ключей К1 ...К8. Ключи К25 . К32 - как обратный цикл К8 ... К1.
-
4. Далее производится зашифрование данных в 32 раунда, т.е. 32 раза применяется сеть Фейстеля. Выполняются операции А;+1 = B j ф КА^КУ Bl+ i = At :
разбиваем 256-битный входной ключ на 8 блоков по 32 бита. 0-ой бит исходного ключа - это 0-ой бит ключа К 1 , 32-ой бит исходного ключа - это 0-ой бит ключа К2, ... , 224-ый бит исходного ключа - это 0-ой бит ключа К8.
-
а. Содержимое A j суммируется с ключом К по модулю 2 32 и помещается в S.
-
b. Содержимое S разбивается на восемь 4-битных блоков, каждый из которых проходит через таблицу замен. Таблица замен представляет собой матрицу 8х16, каждая строка которой соответствует номеру блока, а столбец - значению блока. Т.е. если S j = j, то мы берём из таблицы замен значение i- ой строки, j-ого столбца и помещаем его в Sj . Далее все блоки собираем обратно в 32-битное слово.
-
с. Полученный результат S циклически сдвигаем на 11 бит влево (к старшим разрядам).
-
d. Результирующее значение сдвига суммируем с В по модулю 2, т.е. R = S®B.
-
e. Старое значение А заменяем на В.
-
f. В А помещаем результат R.
-
5. После последнего (32-ого) цикла информация в А сохраняется, а в В помещается последнее значение R.
-
6. В конечном итоге значение А является старшим блоком, а В -младшим.
Алгоритм расшифрования выполняется также, за исключением того что ключи вычисляются следующим образом: с 1 по 8 в прямом порядке, с 9 по 32 – в обратном.
Схема работы сети Фейстеля в алгоритме зашифрования методом простой замены:

Рис. 1 Преобразование сетью Фейстеля в алгоритме ГОСТ 28147-89
DES (Data Encryption Standard)
Описание
DES – симметричный алгоритм шифрования, разработанный IBM и утверждённый правительством США в 1977 годом, как официальный стандарт.
DES имеет блоки по 64 бита и 16-цикловую структуру сети Фейстеля. Использует ключ длиной 56 бит.
Схема шифрования алгоритма DES
В основе алгоритма лежит преобразование сетью Фейстеля. Для зашифрования используется прямое преобразование сетью Фейстеля, для расшифрования – обратное.

Рис. 2 Прямое преобразование сетью Фейстеля в алгоритме DES

Рис. 3 Обратное преобразование сетью Фейстеля в алгоритме DES
Начальная перестановка
На входе получаем 64-битный блок данных Т. Этот блок преобразуется с помощью начальной перестановки (Input Permutation) IP, которая определяется таблицей:
58 |
50 |
42 |
34 |
26 |
18 |
10 |
2 |
60 |
52 |
44 |
36 |
28 |
20 |
12 |
4 |
62 |
54 |
46 |
38 |
30 |
22 |
14 |
6 |
64 |
56 |
48 |
40 |
32 |
24 |
16 |
8 |
57 |
49 |
41 |
33 |
25 |
17 |
9 |
1 |
59 |
51 |
43 |
35 |
27 |
19 |
11 |
3 |
61 |
53 |
45 |
37 |
29 |
21 |
13 |
5 |
63 |
55 |
47 |
39 |
31 |
23 |
15 |
7 |
Табл. 1 Начальная перестановка
По таблице 0-ой бит заменяется на 58, 1-ый на 50, …, 63-ий на 7.
На выходе преобразованный блок IP(T).
Циклы шифрования
Разбивает блок IP(T) на 2 половины по 32 бита: IP(T) = L0R0.Далее идут 16 циклов преобразования Фейстеля.
Результат i-ой итерации Т = L i R i определяется как:
L t = R i-i
R i = L — QKR i-b k i )
k i - результат преобразования 56-битного исходного ключа (подробнее про генерацию ключей ниже).
Рассмотрим подробнее функцию f.
Функция Фейстеля
На входе: 32-битный блок данных R i-1 и 48-битный ключ k i .
Ri-1 (32 бит)

A
перестановка битов Р
f(Ri-1,ki) (32 бит)
Рис. 4 Краткая схема работы функции f
Для начала необходимо расширить блок данных до размера ключа, т.е. до 48 бит. Для этого используется функция расширения Е. Функция Е расширяет 32-битный блок до 48-битного путём дублирования некоторых битов из исходного блока. Преобразование выполняется по следующей таблице:
32 |
1 |
2 |
3 |
4 |
5 |
4 |
5 |
6 |
7 |
8 |
9 |
8 |
9 |
10 |
11 |
12 |
13 |
12 |
13 |
14 |
15 |
16 |
17 |
16 |
17 |
18 |
19 |
20 |
21 |
20 |
21 |
22 |
23 |
24 |
25 |
24 |
25 |
26 |
27 |
28 |
29 |
28 |
29 |
30 |
31 |
32 |
1 |
Табл. 2 Функция расширения E
После расширения, полученный блок E(R i-1 ) складывается с ключом по модулю 2, т.е. В = E(Ri-1)^kl .
Далее блок В разбивается на 8 одинаковых последовательных блоков длиной 6 бит. Выполняется замена 6-битных блоков на 4-битные с помощью таблицы преобразований S.
Преобразование Si выполняется над блоком В ^ следующим образом:
0-ой и 5-ый бит блока представляют число т от 0 до 3 в двоичном виде. Это число - номер строки в таблице подстановок S i . Средняя часть блока -биты 1-4 - это двоичное представление числа п от 0 до 15 - номера столбца в таблице подстановок S i . Таким образом получаем:
В\= S i (m,n)
Конечное значение функции f(R i-1 ,k i ) получается перестановкой Р, применяемой к 32-битному блоку В'.
6 |
1 |
7 |
0 |
2 |
1 |
2 |
9 |
2 |
2 |
1 |
8 |
2 |
7 |
1 |
|
1 |
5 |
1 |
3 |
2 |
6 |
2 |
5 |
8 |
1 |
1 |
3 |
0 |
1 |
||
2 |
8 |
4 |
2 |
4 |
1 |
2 |
3 |
7 |
2 |
3 |
9 |
||||
9 |
1 |
3 |
1 |
0 |
3 |
6 |
2 |
2 |
1 |
1 |
4 |
5 |
2 |
Табл. 3 Таблица перестановок P
Таким образом получаем f(Ri-1, ki) = Р(В') - искомое значение функции Фейстеля.
Генерирование ключей k
16 ключей k i получаются из начального ключа k следующим образом.
Из исходного ключа убираются 8 бит: 7, 15, 23, 31, 39, 47, 55, 63 (№ битов от 0 до 63). Далее выполняется следующая перестановка:
67 |
49 |
41 |
33 |
26 |
17 |
9 |
1 |
58 |
50 |
42 |
34 |
26 |
18 |
10 |
2 |
59 |
51 |
43 |
36 |
27 |
19 |
11 |
3 |
60 |
62 |
44 |
36 |
63 |
55 |
47 |
39 |
31 |
23 |
15 |
7 |
62 |
54 |
46 |
38 |
30 |
22 |
14 |
6 |
61 |
63 |
45 |
37 |
29 |
21 |
13 |
5 |
28 |
20 |
12 |
4 |
Табл. 4 Таблица перестановок расширенного ключа
Перестановка применяется к каждого из ключей k i со смещением, в зависимости от i по следующей таблице:.........
i |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
|||||||||
дви г |
Табл. 5 Таблица сдвигов i-ого ключа
Далее идёт сжатие ключа с 56-битного до 48-битного по следующей таблице:
14 |
17 |
11 |
24 |
1 |
5 |
3 |
28 |
15 |
6 |
21 |
10 |
23 |
19 |
12 |
4 |
26 |
8 |
16 |
7 |
27 |
20 |
13 |
2 |
41 |
52 |
31 |
37 |
47 |
55 |
30 |
40 |
51 |
45 |
33 |
48 |
44 |
49 |
39 |
56 |
34 |
53 |
46 |
42 |
50 |
36 |
29 |
32 |
Табл. 6 Таблица сжатия ключей
Таким образом на выходе получаем 16 48-битных ключей для каждой итерации цикла.
Конечная перестановка
На входе: зашифрованный блок Т длиной 64 бита.
Над блоком выполняется конечная перестановка 1Р-1(Т) обратная начальной по следующей таблице:
40 |
8 |
48 |
16 |
56 |
24 |
64 |
32 |
39 |
7 |
47 |
15 |
55 |
23 |
63 |
31 |
38 |
6 |
46 |
14 |
54 |
22 |
62 |
30 |
37 |
5 |
45 |
13 |
53 |
21 |
61 |
29 |
36 4 44 12 52 20 60 28 35 3 43
34 2 42
10 50 18 58 26 33
1 41 9
19 59 27
49 17 57 25
Табл. 7 Конечная перестановка IP-1
AES128 (Advanced Encryption Standard)
Описание
Алгоритм AES, также известный как Rijndael – симметричный алгоритм блочного шифрования (блок 128 бит, ключ 128/192/256 бит). Принят в качестве стандарта шифрования правительством США по результатам конкурса AES. 26.05.2002 официально объявлен стандартом шифрования США.
AES является упрощенной версией алгоритма Rijndael. Rijndael поддерживает блоки длиной 128/192/256 бит.
Терминология
Байт – последовательность из 8 бит. В данном алгоритме байт – элемент поля Галуа GF(2 8 ), т.е. байту соответствует многочлен Y i= 0biXi в поле GF(2Q)
Слово – последовательность из 4 байтов.
Блок – последовательность из 16 байтов.
Ключ – последовательность из 16 байтов.
Форма (state) – двумерный массив байтов из 4 строк. В алгоритме AES байты располагаются в следующей форме:
Раунд – итерация цикла преобразований над формой. Для длины ключа 128 бит определено 10 раундов.
Таблица подстановок – таблица, задающая биективное отображение байта в байт.
1 |
|||||||||||||||||
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
a |
b |
c |
e |
f |
|||
X |
0 |
63 |
7с |
77 |
7Ь |
f2 |
6b |
6f |
c5 |
30 |
01 |
67 |
2b |
fe |
d7 |
ab |
76 |
1 |
са |
82 |
с9 |
7d |
fa |
59 |
47 |
fO |
ad |
d4 |
a2 |
af |
9c |
a4 |
72 |
cO |
|
2 |
Ь7 |
fd |
93 |
26 |
36 |
3f |
f7 |
cc |
34 |
a5 |
e5 |
fl |
71 |
d8 |
31 |
15 |
|
3 |
04 |
с7 |
23 |
сЗ |
18 |
96 |
05 |
9a |
07 |
12 |
80 |
e2 |
eb |
27 |
b2 |
75 |
|
4 |
09 |
83 |
2с |
1а |
lb |
6e |
5 a |
aO |
52 |
3b |
d6 |
b3 |
29 |
e3 |
2f |
84 |
|
5 |
53 |
dl |
00 |
ed |
20 |
fc |
bl |
5b |
6a |
cb |
be |
39 |
4a |
4c |
58 |
cf |
|
6 |
dO |
ef |
аа |
fb |
43 |
4d |
33 |
85 |
45 |
f9 |
02 |
7f |
50 |
3c |
9f |
a8 |
|
7 |
51 |
аЗ |
40 |
8f |
92 |
9d |
38 |
f5 |
be |
b6 |
da |
21 |
10 |
ff |
f3 |
d2 |
|
8 |
cd |
Ос |
13 |
ес |
5f |
97 |
44 |
17 |
c4 |
a7 |
3d |
64 |
5d |
19 |
73 |
||
9 |
60 |
81 |
4f |
de |
22 |
2a |
90 |
88 |
46 |
ее |
b8 |
14 |
de |
5e |
Ob |
db |
|
а |
eO |
32 |
За |
Оа |
49 |
06 |
24 |
5c |
c2 |
d3 |
ac |
62 |
91 |
95 |
e4 |
79 |
|
Ь |
е7 |
с8 |
37 |
6d |
8d |
d5 |
4a |
a9 |
6c |
56 |
£4 |
ea |
65 |
7a |
ae |
08 |
|
С |
Ьа |
78 |
25 |
2е |
1c |
a6 |
b4 |
c6 |
e8 |
dd |
74 |
If |
4b |
bd |
8b |
8a |
|
d |
70 |
Зе |
Ь5 |
66 |
48 |
03 |
f6 |
Oe |
61 |
35 |
57 |
b9 |
86 |
cl |
Id |
9a |
|
е |
el |
f 8 |
98 |
11 |
69 |
d9 |
8e |
94 |
9b |
le |
87 |
e9 |
ce |
55 |
28 |
df |
|
f |
8с |
al |
89 |
Od |
bf |
e6 |
42 |
68 |
41 |
99 |
2d |
Of |
bO |
54 |
bb |
16 |
Табл. 8 Таблица подстановок (S-box) Nb – количество слов в блоке.
Nk – количество слов в ключе. (В нашем случае всегда 4) Nr – количество раундов. (В нашем случае всегда 10)
Шифрование
Общая схема шифрования приведена ниже:

Рис. 5 Схема шифрования AES
В алгоритме используются следующие процедуры преобразования:
• ExpandKey – вычисление раундных ключей для всех раундов.
• SubBytes – подстановка байтов с помощью таблицы подстановок.
• ShiftRows – циклический сдвиг строк в форме на различные величины.
-
• MixColumns – смешивание данных внутри каждого столбца
формы (state).
-
• AddRoundKey – сложение ключа раунда с формой.
Рассмотрим подробнее каждую составляющую алгоритма:
Преобразование SubBytes
Преобразование заключается в замене каждого байта 0xXY на соответствующий по таблице подстановок (табл. 8).
Преобразование ShiftRows
Преобразование заключается в циклическом сдвиге влево каждой строки формы. Преобразование выполняется по следующей схеме:
*0 0 |
*01 |
*0;2 |
*0;3 |
1Ш5 |
*о,о |
Jo3i |
\2 |
*0 3 |
*10 |
'Sy |
$1 ' |
Лз |
SU |
*12 |
*1,3 |
*1,0 |
|
*20 |
*2,1 |
*2.2 |
*2,3 |
рД^] |
’$2,2 |
*2.3 |
*2.0 |
*2.1 |
*зо |
*зд |
*30 |
*3.3 |
1 1 1 ^ |
S33 |
^3.0 |
*зд |
*3 2 |
Рис. 6 Преобразование ShiftRows
Первая строка не сдвигается, вторая сдвигается на 1 байт, третья – на 2, четвертая – на три.
Преобразование MixColumns

Рис. 7 Преобразование MixColumns
Преобразование заключается в следующем: каждый столбец представляется как полином четвёртой степени, умножается на многочлен c(x) = 3x3 + x2 + x + 2 по модулю %4 + 1 в поле GF(28). Т.к. у нас количество строк фиксировано и равно 4, программно мы можем заменить данную операцию на умножение каждого столбца на квадратную матрицу 4ого порядка:
’ 4,' |
’ 02 03 01 01 ’ |
So,с |
||
*V |
01 02 03 01 |
31,с |
||
SL |
01 01 02 03 |
32,с |
||
_ *3,с _ |
03 01 01 02 |
_ S'V _ |
Над каждым столбцом умножение производится отдельно
Преобразование AddRoundKey
В преобразовании 32-битные слова раундового ключа прибавляются к столбцам формы по модулю 2.

Рис. 8 Преобразование AddRoundKey
Над каждым столбцом операция производится отдельно.
Функция расширения ключа ExpandKey
В алгоритме AES генерируются раундовые ключи на основе ключа шифрования с помощью процедуры ExpandKey. Процедура создаёт Nb * (N'T + 1) слов. Необходим начальный ключ размером Nb. Каждый раунд требует ключ из Nb слов. В нашем случае со 128-битным ключом получается 44 слова для 11 ключей.
Алгоритм заполнения таблицы ключей (4х11) состоит из 4 итераций
цикла:
-
• На каждой итерации идёт работа с колонкой таблицы. Колонки 0…3 заполнены значениями из исходного ключа. Начинаем с колонки 4. (4 – для 128 битного ключа)
Если номер текущей колонки i кратен Nk (4 в нашем случае), то берём колонку слева (i — 1), выполняем над ней циклический сдвиг влево на
1 элемент, затем над каждым байтом выполняем преобразование SubBytes из таблицы подстановок. Далее выполняется операция XOR между колонкой i —
Nk, колонкой i — 1 и колонкой таблицы RCon( ^ )
(см. табл. 9). Результат
заносится в колонку i.
• Для остальных колонок выполняется команда сложения по модулю 2 (XOR) между колонками i — 1 и i — Nk.__
01 |
02 |
04 |
08 |
10 |
20 |
40 |
80 |
1b |
36 |
00 |
ОО |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ОО |
00 |
ОО |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ОО |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
Табл. 9 Таблица RCon
На выходе имеется таблица, содержащая 11 раундовых ключей.
Расшифрование
Общая схема расшифрования AES:

Рис. 9 Общая схема расшифрования алгоритма AES
При расшифровании все преобразования производятся в обратном порядке. Используются следующие обратные преобразования вместо соответствующих шифрующих:
InvSubBytes – подстановка байтов с помощью обратной таблицы подстановок.
InvShiftRow – циклический сдвиг вправо.
InvMixColumns – смешивание данных внутри каждого столбца формы.
Остальные процедуры остаются неизменными.
0 |
1 |
2 3 |
4 5 6 |
7 8 9 a |
b c |
def |
|||||||||||
X |
0 |
52 |
09 |
6a |
d5 |
30 |
36 |
a5 |
38 |
bf |
40 |
a3 |
9e |
81 |
f3 |
d7 |
fb |
1 |
7c |
e3 |
39 |
82 |
9b |
2f |
ff |
87 |
34 |
Be |
43 |
44 |
c4 |
de |
e9 |
cb |
|
2 |
54 |
7Ь |
94 |
32 |
аб |
C2 |
23 |
3d |
ее |
4c |
95 |
Ob |
42 |
fa |
c3 |
4 e |
|
3 4 |
08 72 |
2a f8 |
al f6 |
66 64 |
28 86 |
d9 68 |
24 98 |
b2 16 |
76 d4 |
5b a4 |
a2 5c |
49 cc |
6d 5d |
fib 65 |
dl b6 |
25 92 |
|
5 |
6c |
70 |
48 |
50 |
fd |
ed |
b9 |
da |
5c |
15 |
46 |
57 |
a7 |
Bd |
9d |
84 |
|
6 |
90 |
d8 |
ab |
00 |
8c |
be |
d3 |
Oa |
f7 |
e4 |
58 |
05 |
b8 |
ьз |
45 |
06 |
|
J? a |
dO 3a |
2 c 91 |
le 11 |
8f 41 |
ca 4f ' |
3f 67 |
Of de |
02 ea |
cl 9 7 |
af f 2 |
bd 03 cf ce |
01 f 0 |
13 Ь4 |
8a 06 |
6b 73 |
||
9 |
96 |
ac |
74 |
22 |
a7 |
ad |
35 |
85 |
e2 |
f9 |
37 |
e8 |
1c |
75 |
df |
6e |
|
a |
47 |
fl |
la |
71 |
Id |
29 |
c5 |
89 |
6f |
b7 |
62 |
Oe |
aa |
18 |
be |
lb |
|
b |
£c |
56 |
3e |
4b |
c6 |
d2 |
79 |
20 |
9a |
db |
cO |
fe |
78 |
cd |
5a |
f4 |
|
c d |
If 60 |
dd 5 1 |
a8 7f |
33 a9 |
88 19 |
07 b5 |
c7 4a |
3 1 Od |
bl 2d |
12 e5 |
10 59 7a 9f |
27 80 93 ' c9 |
ec 9c |
5f ef |
|||
e |
aO |
eO |
3b |
4d |
ae |
2a |
f5 |
bo |
c8 |
eb |
bb |
3c |
83 |
53 |
99 |
61 |
|
f |
17 |
2b |
04 |
7e |
ba |
77 |
d6 |
26 |
el |
69 |
14 |
63 |
55 |
21 |
Oc |
7d |
Табл. 10 Обратная таблица подстановок
Режимы применения
-
1. Режим ECB (Electronic Codebook) – каждый блок шифруется независимо от других.
-
2. Режим CBC (Cipher Block Chaining) – к каждому следующему блоку добавляется результат шифрования предыдущего блок по модулю 2.
-
3. Режим CFB (Cipher Feed Back) – к каждому следующему блоку прибавляются s битов предыдущего блока по модулю 2.
-
4. Режим OFB (Output Feed Back) – входной блок – результат применения AES к предыдущему входному блоку.
Реализация алгоритмов
Диаграмма классов

Классы для алгоритма ГОСТ 28147-89
Базовым классом реализации данного алгоритма является класс GOSTCrypto со следующим набором методов и свойств:
-
• SubstitutionBox – 2-мерный массив байт таблицы постановки.
-
• GenerateKeys – метод генерации 8 ключей из исходного ключа.
-
• Substitution – метод подстановки из SubstitutionBox согласно
алгоритму ГОСТ 29147-89.
Данный класс имеет 2 наследника: GOSTCryptoEncoder и
GOSTCryptoDecoder. Оба класса содержат по три метода для зашифрования/расшифрования блока, в зависимости от входных данных, и метод зашифрования/расшифрования одного блока.
Классы для алгоритма DES
Базовым классом реализации данного алгоритма является класс DESCrypto. Он содержит необходимые методы и поля для зашифрования/расшифрования:
-
• InputPermutation - таблица IP подстановки.
-
• FinalPermutation - таблица IP-1 подстановки.
-
• ExpansionPermutation - таблица для преобразования Е
(расширение ключа).
-
• SubstituionBoxes - матрица подстановок S.
-
• Permutation - таблица перестановки P.
-
• PC1Permutation и PC2Permutation – таблицы подстановок для
генерации ключей.
-
• Rotations – таблица сдвигов при генерации ключей.
-
• Substitution6x4 – функция Фейстеля.
-
• GenerateSubkeys – метод для генерации ключей из исходного
ключа.
-
• Остальные методы данного класса являются вспомогательными
для различных разбиений/объединений/логических операций.
Данный класс также имеет 2 наследника: DESCryptoEncoder и DESCryptoDecoder, которые содержат по 3 метода для зашифрования/расшифрования входных данных и один метод для зашифрования/расшифрования одного блока.
Классы алгоритма AES128
Базовым классом реализации данного алгоритма является класс AESCrypto. Он содержит следующие поля и методы:
-
• NumberOfColumns – количество колонок в форме. В теоретических данных - Nb.
-
• NumberOfRounds – количество раундов. В теоретических данных - N'T.
-
• KeyLength – длина ключа в байтах.
-
• SubstitutionBox – таблица подстановок для зашифрования.
-
• InverseSubstitutionBox – таблица подстановок для
расшифрования.
-
• RCon – матрица RCon.
-
• SubBytes – метод для шага SubBytes алгоритма. Параметр invert
указывает на направление операции шифрования.
-
• MixColumns – метод для шага MixColumns алгоритма. Параметр
invert указывает на направление операции шифрования.
-
• ShiftRows – метод для шага ShiftRows алгоритма. Параметр invert
указывает на направление операции шифрования.
-
• KeyExpansion – метод для шага ExpandKey алгоритма.
Расширение исходного ключа.
-
• AddRoundKey – метод для шага AddRoundKey алгоритма. В
качестве параметров принимает текущую форму, матрицу ключей, номер раунда.
-
• Остальные методы являются вспомогательными и реализуют
сдвиги массивов байт влево/вправо, а также умножение в поле GF(2Q).
Данный класс также имеет 2 наследника: AESCryptoEncoder и AESCryptoDecoder, которые содержат по 3 метода для зашифрования/расшифрования входных данных и один метод для зашифрования/расшифрования одного блока.
Параллелизм в алгоритмах
Распараллеливание в процессе шифрования одного блока в каждом из этих алгоритмов практически не имеет смысла, т.к. каждый следующий шаг в шифровании зависит от предыдущего. Теоретически возможно распараллелить отдельные операции при шифровании блока, однако время, затраченное на создание/синхронизацию потоков, будет значительно превышать время, если бы это выполнялось в одном потоке. Из этого следует, что единственное, что мы можем распараллелить с выгодой во времени, будет распараллеливание шифрования блоков в целом, т.к. блоки между собой не связаны, и изменения в процессе шифрования одного блока не влияют на процесс шифрования любого другого блока.
Заключение
Наиболее объективным выводом о проделанной работе будет сравнение производительности данных алгоритмов при различных входных данных в режиме последовательного и параллельного выполнения.
Объём |
16 байт |
32 байта |
64 байта |
512 байт |
1 кбайт |
2 кбайта |
10 кбайт |
AES Not Parallel |
4 |
72 |
70 |
102 |
111 |
166 |
264 |
AES Parallel |
30 |
35 |
25 |
15 |
68 |
71 |
210 |
DES Not Parallel |
1 |
2 |
1 |
16 |
28 |
60 |
169 |
DES Parallel |
1 |
2 |
1 |
12 |
26 |
50 |
120 |
ГОСТ Not Parallel |
1 |
1 |
1 |
8 |
18 |
39 |
237 |
ГОСТ Parallel |
1 |
1 |
1 |
10 |
16 |
30 |
170 |
Значения в ячейках таблицы – время в милисекундах, затраченное на зашифрование данных.
Составим аналогичную таблицу для расшифрования.
Объём |
16 байт |
32 байта |
64 байта |
512 байт |
1 кбайт |
2 кбайта |
10 кбайт |
AES Not Parallel |
2 |
2 |
2 |
12 |
24 |
48 |
263 |
AES Parallel |
16 |
3 |
3 |
10 |
22 |
39 |
224 |
DES Not Parallel |
1 |
1 |
3 |
17 |
37 |
63 |
319 |
DES Parallel |
2 |
2 |
3 |
13 |
24 |
49 |
234 |
ГОСТ Not Parallel |
1 |
1 |
1 |
11 |
16 |
37 |
187 |
ГОСТ Parallel I 2 I 1 I 1 I 10 I 16 I 36 I 126 I
Исходя из этих двух таблиц можно сделать следующие выводы:
-
1. Алгоритм AES наиболее трудоёмкий и ресурсозатратный. В общем-то это оправдано тем, что в настоящее время он является наиболее криптостойким алгоритмом.
-
2. Выгода параллельных вычислений заметно увеличивается при увеличении объёма данных.
-
3. Соотношение между параллельным и последовательным алгоритмом в производительности получается относительно небольшим значением в алгоритмах DES и ГОСТ, т.к. время, затраченное на разбиение данных на блоки, примерно равно времени шифрования одного блока.
-
4. Для алгоритма AES128 это же соотношение довольно заметно на больших объёмах данных. Объясняется тем, что у AES процесс шифрования одного блока значительно более трудоемкий, чем у DES или ГОСТ, в связи с этим разница становится более заметно.
Список литературы Стандартные криптографические алгоритмы шифрования
- «AES Proposal: Rijndael» -Joan Daemen, Vincent Rijmen, 1998
- «Криптография на Си и С++ в действии.» -М. Вельшенбах, ISBN 5-89392-083-X, 2004
- ГОСТ 28147-89 “Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования.»
- «Основы криптографии» -А. П. Алферов, А. Ю. Зубов
- http://ru.wikipedia.org/
- http://habrahabr.ru/