Мокрoусов_ПЗ_Криптопротоколы
.pdfПроцедура инициализации SEAL
procedure Initialize a(n,l,A,B,C,D,n1,n2,n3,n4) A←n R[4l];
B←(n»»8)R[4l+1];
C←(n»»16)R[4l+2];
D←(n»»24)R[4l+3]; for j ← 1 to 2 do
P←A&0x7fc; B←B+T[P/4]; A←A»»9; P←B&0x7fc; C←C+T[P/4]; B←B»»9; P←C&0x7fc; D←D+T[P/4]; C←C»»9; P←D&0x7fc; A←A+T[P/4]; D←D»»9;
(n1,n2,n3,n4)←(A,B,C,D); P←A&0x7fc; B←B+T[P/4]; A←A»»9; P←B&0x7fc; C←C+T[P/4]; B←B»»9; P←C&0x7fc; D←D+T[P/4]; C←C»»9; P←D&0x7fc; A←A+T[P/4]; D←D»»9;
Для пояснения сути функционирования алгоритма воспользуемся схемой внутреннего цикла алгоритма SEAL, представленной на рис. 7.
Алгоритм управляется тремя полученными из ключа таблицами: R, S и T. Предварительная обработка отображает ключ k на эти таблицы с помощью процедуры, основанной на SHA. 2-килобайтная таблица T представляет собой S-блок
9*32 битов.
SEAL использует четыре 32-битовых регистра, A, B, C и D, начальные значения которых определяются n и полученными по k таблицами R и T. Эти регистры изменяются в ходе итераций, каждая из которых состоит из восьми этапов. На каждом этапе 9 битов первого регистра (все равно A, B, C или D) используются в качестве индекса таблицы T. Затем выбранное из T значение складывается со вторым регистром (снова одному из A, B, C или D) или объединяется с его содержимым с помощью XOR. Потом первый регистр циклически сдвигается на 9 позиций.
29
Рис. 7. Внутренний цикл SEAL
На некоторых этапах второй регистр далее модифицируется с помощью сложения или XOR с содержимым первого регистра (уже сдвинутым). После 8 таких этапов A, B, C и D добавляются к потоку ключей, при этом каждый из них маскируется сложением или XOR с определенным словом из S. Итерация завершается прибавлением к A и C дополнительных значений, зависящих от n, n1, n2, n3, n4, выбор конкретного значения определяется четностью номера итерации. По-видимому, при разработке этой схемы главными были следующие идеи:
1)использование большого, секретного, получаемого из ключа S-блока (T);
2)чередующиеся некоммутируемые арифметические операции (сложение и XOR);
3)использование внутреннего состояния, поддерживаемого шифром, которое не проявляется явно в
30
потоке данных (значения ni, которые модифицируют A и C в конце каждой итерации);
4) изменение функции этапа в соответствии с номером этапа и изменение функции итерации в соответствии с номером итерации.
Задание:
Используя алгоритм шифрования данных SEAL, написать программу шифрования и дешифрования произвольного набора символов на любом языке программирования.
Порядок выполнения работы:
написать на языке программирования функцию шифрования, в которую в качестве параметров передается ключ и символ (или строка символов) исходного текста.
написать функцию дешифрования, в которую в качестве параметров передается ключ и символ (или строка символов) зашифрованного текста.
Оформление отчета:
В отчете следует привести краткие теоретические сведения. Кроме того, должны быть представлены: краткая блок-схема, текст программы, шифруемый набор символов, результаты выполнения программы.
Контрольные вопросы:
1.В чем заключается суть метода шифрования SEAL?
2.Какие главные идеи внутреннего цикла SEAL?
3.Что используется в качестве функции генерации
таблиц?
4.Назовите проблемы, при решении которых могут использоваться криптографические методы.
31
5.В чем отличие криптографии от стеганографии?
6.Какие задачи решает современная криптография?
7.Сформулируйте требования к криптографическим системам защиты информации.
8.Дайте определения понятиям: алфавит, криптограмма, криптографическая система, криптографический протокол, символ, шифр, электронная (цифровая) подпись.
32
Практическая работа № 7 Шифрование данных с помощью алгоритма RC2
Цель работы: изучить методы шифрования данных в алгоритме RC2 и освоить их практическое применение.
Теоретическое введение
Структура алгоритма
Алгоритм RC2 шифрует данные блоками по 64 бита с использованием ключей переменного размера: от 8 до 1024 битов включительно; рекомендуемым размером ключа является 64 бита.
Алгоритм является сетью Фейстеля, в нем выполняются 18 раундов преобразований. Причем раунды алгоритма делятся на 2 типа: смешивающие (mix) раунды и объединяющие (mesh) раунды. Общая структура алгоритма такова:
1.Выполняются 5 смешивающих раундов.
2.Выполняется 1 объединяющий раунд.
3.Выполняются 6 смешивающих раундов.
4.Выполняется 1 объединяющий раунд.
5.Выполняются 5 смешивающих раундов.
Структура смешивающего раунда приведена на рис. 8. Предполагается, что шифруемый блок данных разделен на 4 16-битных слова R0 ,....R3 , над которыми смешивающий раунд
в цикле по i от 0 до 3 выполняет следующие операции (составляющие показанную на рис. 1 функцию f () ):
33
где Kj — фрагмент расширенного ключа, определяемый глобальной переменной j; данная переменная изначально равна нулю и увеличивается на 1 (как показано выше) в каждом смешивающем раунде; процедура расширения ключа подробно описана далее;
&— побитовая логическая операция «и»;
~х — побитовый комплемент к х;
<<< — циклический сдвиг влево на число битов,
определяемое значением |
Si |
(табл. 2). |
||||||
|
|
|
|
|
|
|
|
Таблица 2 |
|
i |
0 |
1 |
2 |
|
3 |
|
|
|
S |
i |
1 |
2 |
3 |
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 8. Смешивающий раунд алгоритма RC2
Таким образом, в каждой i -й итерации смешивающего раунда выполняется описанное выше преобразование f( ) (рис. 9), которое модифицирует Ri , на основе текущих значений трех осталь-
ных слов шифруемого блока и фрагмента расширенного ключа.
34
Рис. 9. Функция f( ) алгоритма RC2
Аналогично смешивающему раунду, в объединяющем раунде выполняется цикл по i от 0 до 3; в каждой итерации цикла выполняется следующая операция:
R i = R i + K n mod216,
где n =
Ri 1mod 4
&63.
Таким образом, итерация объединяющего раунда представляет собой наложение операцией сложения по модулю 216 фрагмента расширенного ключа, индекс которого опреде-
ляется 6 младшими битами текущего значения слова
Ri 1mod 4
.
Процедура расширения ключа
Как было сказано выше, алгоритм RC2 использует ключи шифрования размером от 8 до 1024 битов, т. е. от 1 до 128 байтов.
Расширение ключа подразумевает получение из ключа шифрования 16битных фрагментов расширенного ключа К0...К63, используемых в смешивающих раундах — по одному в каждой из 4 итераций каждого из 16 смешивающих раундов. Данная процедура выполняется в несколько шагов:
1 Инициализируется |
байтовый |
массив |
L0 ...L127 , |
используемый при расширении ключа:
L0 KI0
...
LT 1 KIT 1
35
где
K |
...K |
0 |
T 1 |
— исходный ключ шифрования, имеющий
размер T байтов. Остальные байты массива L обнуляются.
2Инициализируются другие переменные, участвующие в расширении ключа:
|
T 8 (T1 7) / 8 |
|
|
TM 255 mod 2 |
(8*T 1 8*T 8) |
|
|
|
где T1 — размер ключа в битах; |
|
|
T 8 |
— эффективный размер ключа в байтах; |
|
TM |
— битовая маска, учитывающая остаточные биты |
ключа, если его размер в битах не кратен 8.
3В цикле по i от операция:
T
до 127 выполняется следующая
|
|
|
|
|
Li P(Li 1 Li T |
mod 256) , |
|
|
|
|
|||||||
где Р — табличная замена, приведенная в табл. 3. |
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 3 |
||
d9 |
78 |
f9 |
c4 |
19 |
|
dd |
b5 |
ed |
28 |
|
e9 |
fd |
79 |
4a |
aO |
d8 |
9d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
сб |
7е |
37 |
83 |
2b |
|
76 |
53 |
8e |
62 |
|
4c |
64 |
88 |
44 |
8b |
fb |
a2 |
|
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
9а |
59 |
f5 |
87 |
|
b3 |
4f |
13 |
61 |
|
45 |
6d |
8d |
09 |
81 |
7d |
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bd |
8f |
40 |
eb |
86 |
|
b7 |
7b |
0b |
fO |
|
95 |
21 |
22 |
5c |
6b |
4e |
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
d6 |
65 |
93 |
ce |
|
60 |
b2 |
lc |
73 |
|
56 |
cO |
14 |
a7 |
8c |
fl |
dc |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
75 |
ca |
If |
3b |
|
be |
e4 |
dl |
42 |
|
3d |
d4 |
30 |
a3 |
3c |
b6 |
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6f |
bf |
Oe |
da |
46 |
|
69 |
07 |
57 |
27 |
|
f2 |
Id |
9b |
be |
94 |
43 |
03 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f8 |
11 |
c7 |
f6 |
90 |
|
ef |
3e |
e7 |
06 |
|
c3 |
d5 |
2f |
c8 |
66 |
le |
d7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
08 |
e8 |
ea |
de |
80 |
|
52 |
ее |
f7 |
84 |
|
aa |
72 |
ac |
35 |
4d |
6a |
2a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
la |
d2 |
71 |
5a |
|
15 |
49 |
74 |
4b |
|
9f |
dO |
5e |
04 |
18 |
a4 |
ec |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36
Продолжение табл. 3
с2 |
еО |
41 |
бе |
Of |
51 |
cb |
cc |
24 |
91 |
af |
50 |
al |
f4 |
70 |
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
7с |
За |
85 |
23 |
b8 |
b4 |
7a |
fc |
02 |
36 |
5b |
25 |
55 |
97 |
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2d |
5d |
fa |
98 |
еЗ |
8a |
92 |
ae |
05 |
df |
29 |
10 |
67 |
6c |
ba |
c9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d3 |
00 |
еб |
cf |
el |
9e |
a8 |
2c |
63 |
16 |
01 |
3f |
58 |
e2 |
89 |
a9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Od |
38 |
34 |
lb |
ab |
33 |
ff |
bO |
bb |
48 |
0c |
5f |
b9 |
bl |
cd |
2e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
с5 |
f3 |
db |
47 |
e5 |
a5 |
9c |
77 |
0a |
a6 |
20 |
68 |
fe |
7f |
cl |
ad |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таким образом, значение 0 заменяется на D9, 1 — на 78
и т. д.
Псевдослучайная таблица Р сформирована на основе шестнадцатеричной записи дробной части числа .
4 Вычисляется L128 T 8 :
L |
P(L |
&TM ) |
128 T 8 |
128 T 8 |
|
5 В цикле по i от 127-Т8 до 0 выполняется следующее действие:
L P(L |
L |
) |
|
|
|
i |
i 1 |
i T 8 |
|
|
|
6 Для использования в |
шифрующих преобразованиях |
||||
128-байтная последовательность |
L0 ...L127 |
представляется |
|||
в виде 16-битных слов К0...К63: |
|
|
|
||
Ki L2i |
256L2i 1 . |
|
|
Расшифровывание выполняется по той же общей схеме, что и зашифровывание. Однако при расшифровывании используются другие операции, выполняемые в смешивающем и объединяющем раундах.
Смешивающий раунд расшифровывания в цикле по i от 3 до 0 выполняет следующие операции:
37
где >>> — циклический сдвиг определяемое значением
вправо на число битов,
Si |
; |
- начальное значение j устанавливается не в 0, а в 63.
Аналогичным образом изменен и объединяющий раунд при расшифровывании по сравнению с зашифровыванием. В нем в цикле по i от 3 до 0 выполняется следующая операция:
R i = R i - K n mod 216; где
n Ri 1mod 4
& 63
.
Задание:
Используя алгоритм шифрования данных RC2, написать программу шифрования и дешифрования произвольного набора символов на любом языке программирования.
Порядок выполнения работы:
написать на языке программирования функцию шифрования, в которую в качестве параметров передается ключ и символ (или строка символов) исходного текста.
написать функцию дешифрования, в которую в качестве параметров передается ключ и символ (или строка символов) зашифрованного текста.
Оформление отчета:
В отчете следует привести краткие теоретические сведения. Кроме того, должны быть представлены: краткая блок-схема, текст программы, шифруемый набор символов, результаты выполнения программы.
38