1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
\documentclass[a4paper,oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[english,russian]{babel}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amsfonts}
\usepackage{enumitem}
\usepackage{amsthm}
\usepackage{minted}
\setminted{fontsize=\small, breaklines=true, style=emacs, linenos}
\usepackage{graphicx}
\graphicspath{ {./images/} }
\usepackage{float}
\usepackage{algorithm}
\floatname{algorithm}{Алгоритм}
\newcommand{\Z}{\mathbb{Z}}
\DeclarePairedDelimiter\ceil{\lceil}{\rceil}
\DeclarePairedDelimiter\floor{\lfloor}{\rfloor}
\newtheorem{theorem}{Теорема}
\newtheorem*{theorem*}{Теорема}
% --- Определение --- %
\theoremstyle{definition}
\newtheorem{definition}{Определение}
\newtheorem*{definition*}{Определение}
% ------------------- %
\theoremstyle{definition}
\newtheorem*{example}{Пример}
\title{{Криптографические методы защиты информации}\\{Лабораторная работа №2}}
\author{Гущин Андрей, 431 группа, 1 подгруппа, 2 вариант}
\date{\the\year{} г.}
\begin{document}
\maketitle
\begin{definition*}
Функция Эйлера $\varphi (n)$ --- мультипликативная арифметическая функция,
значение которой равно количеству натуральных чисел, меньших $n$ и взаимно
простых с ним.
\end{definition*}
\begin{theorem}
\label{thm:euler-mult}
Для любых взаимно простых чисел $m$ и $n$:
\begin{equation*}
\varphi(mn) = \varphi(m) \varphi(n)
\end{equation*}
\end{theorem}
Для простого $p$ значение функции Эйлера задаётся явной формулой: $\varphi(p)
= p - 1$, которая следует из определения. Таким образом, исходя из теоремы
\ref{thm:euler-mult}, функция Эйлера от числа $n = pq$, где $p, q$ --- простые
числа, равна $\varphi(n) = \varphi(p) \varphi(q) = (p - 1) \cdot (q - 1)$.
Рассмотрим алгоритм генерации ключей криптосистемы RSA:
\begin{algorithm}[H]
\caption{Генерация ключей криптосистемы RSA}\label{alg:generate}
\begin{enumerate}
\item
Выбираются два различных случайных простых числа $p$ и $q$ заданного
размера;
\item
Вычисляется их произведение $n = p \cdot q$, которое называется
\emph{модулем};
\item
Вычисляется значение функции Эйлера от числа $n$:
$$\varphi(n) = (p - 1) \cdot (q - 1);$$
\item
Выбирается целое число $e$ (\emph{открытая экспонента}), удовлетворяющее
$1 < e < \varphi(n)$, взаимно простое со значением функции $\varphi(n)$;
\item
Вычисляется число $d$ (\emph{секретная экспонента}), мультипликативно
обратное к числу $e$ по модулю $\varphi(n)$, то есть число,
удовлетворяющее сравнению:
\begin{equation}
d \cdot e \equiv 1 \pmod{\varphi(n)};
\label{eq:d-calc}
\end{equation}
\item Пара $(e, n)$ публикуется в качестве открытого ключа RSA;
\item Пара $(d, n)$ играет роль закрытого ключа RSA.
\end{enumerate}
\end{algorithm}
\begin{algorithm}[H]
\caption{Зашифрование сообщения криптосистемой RSA}\label{alg:encrypt}
\begin{enumerate}
\item Взять открытый ключ $(e, n)$;
\item Взять открытый текст $m : m \in \Z_n, \gcd(m, n) = 1$;
\item
Зашифровать сообщение с использованием открытого ключа:
$$c = E(m) = m^e \pmod{n}$$
\end{enumerate}
\end{algorithm}
\begin{algorithm}[H]
\caption{Расшифрование сообщения криптосистемой RSA}\label{alg:decrypt}
\begin{enumerate}
\item Принять зашифрованное сообщение $c$;
\item Взять закрытый ключ $(d, n)$;
\item
Применить закрытый ключ для расшифрования сообщения:
$$m = D(c) = c^d \pmod{n}$$
\end{enumerate}
\end{algorithm}
\begin{definition}
Порядок элемента в теории групп --- наименьшее положительное целое $m$, такое
что $m$-кратное групповое умножение данного элемента $g \in G$ на себя даёт
нейтральный элемент:
$$\underbrace{g g \dots g}_m = g^m = 1$$
\end{definition}
Предположим, что мы знаем порядок открытой экспоненты $e$ в группе
$Z^*_{\varphi(n)}$ и он равен $k$. Тогда, по определению, справедливо сравнение
\begin{equation}
e^k \equiv 1 \pmod{\varphi(n)}
\label{eq:order1}
\end{equation}
Выражение \ref{eq:order1} также можно записать как
\begin{equation}
e^{k - 1} \cdot e \equiv 1 \pmod{\varphi(n)}
\label{eq:order2}
\end{equation}
Из выражений \ref{eq:order2} и \ref{eq:d-calc} можно заметить, что секретная
экспонента $d = e^{k - 1}$. Таким образом, зная порядок элемента $e$ в группе
$\Z^*_{\varphi(n)}$, можно вычислить секретную экспоненту $d$, и с её
помощью расшифровать сообщение $m^e \pmod{n})$ по алгоритму \ref{alg:decrypt}.
\begin{example}
Пусть $p, q = 7, 13$. Получаем $n = 91, \varphi(n) = (p - 1) \cdot (q - 1)
= 6 \cdot 12 = 72$. Выберем такое $e$, что $1 < e < \varphi(n),\, \gcd(e,
\varphi(n)) = 1$. Пусть $e = 5$. Вычислим секретную экспоненту $d$ с помощью
расширенного алгоритма Евклида.
Для нахождения $d$ можно воспользоваться следующим свойством расширенного
алгоритма Евклида: в случае, когда $\gcd(a, b) = 1$, то в выражении $ax + by
= \gcd(a, b)$, $x$ является модульным обратным числа $a$ по модулю $b$, а $y$
--- модульным обратным числа $b$ по модулю $a$.
Таким образом, $d = x$ в выражении $ex + \varphi(n)y = \gcd(e, \varphi(n)) =
1$. Вычислим это значение: $5x + 72y = \gcd(5, 72) = 1$.
В первую очередь проведём вычисление НОД, несмотря на то, что он нам уже
известен (число $e$ изначально подбиралось таким образом, что $\gcd(e,
\varphi(n)) = 1$). Это нужно из-за того, что для вычисления $x$ и $y$
необходимы промежуточные значения $a$ и $b$.
\begin{align*}
a_1 = 5&, b_1 = 72 \\
a_2 = 72 \mod 5 = 2&, b_2 = 5 \\
a_3 = 5 \mod 2 = 1&, b_3 = 2 \\
a_4 = 2 \mod 1 = 0&, b_4 = 1
\end{align*}
На основе этих значений вычислим решения уравнения:
\begin{align*}
%1
x_1 = 0&,\, y_1 = 1 \\
%2
x_2 = y_1 - \floor*{\frac{b}{a}} \cdot x_1 =
1 - \floor*{\frac{2}{1}} \cdot 0 = 1
&,\, y_2 = x_1 = 0 \\
%3
x_3 = 0 - \floor*{\frac{5}{2}} \cdot 1 = -2&,\, y_3 = x_2 = 1 \\
%4
x_4 = 1 - \floor*{\frac{72}{5}} \cdot (-2) = 29&,\, y_4 = x_3 = -2 \\
\end{align*}
Получаем, что секретная экспонента $d = x_4 = 29$. Проверим это значение.
Зашифруем сообщение $m = 23$ ($0 \leq m \leq n - 1,\, \gcd(m, n) = 1$):
\begin{equation*}
c = m^e \pmod{n} = 23^5 \pmod{91} = 4
\end{equation*}
Полученное значение попробуем расшифровать:
\begin{equation*}
c^d \pmod{n} = 4^29 \pmod{91} = 23
\end{equation*}
Так как получилось исходное сообщение можно сделать вывод, что экспонента $d$
вычислена верно.
Попробуем вычислить порядок $e$ в группе $\Z^*_{\varphi(n)}$. Для этого будем
умножать $e$ на само себя до тех пор, пока не получится единица. Количество
таких умножений и есть порядок элемента $e$.
\begin{align*}
e^1 \pmod{72} &= e \pmod{72} = 5 \pmod{72} = 5 \\
e^2 \pmod{72} &= e^1 \cdot e \pmod{72} = 5 \cdot 5 \pmod {72} = 25 \pmod{72} = 25 \\
e^3 \pmod{72} &= e^2 \cdot e \pmod{72} = 25 \cdot 5 \pmod {72} = 125 \pmod{72} = 53 \\
e^4 \pmod{72} &= e^3 \cdot e \pmod{72} = 53 \cdot 5 \pmod {72} = 265 \pmod{72} = 49 \\
e^5 \pmod{72} &= e^4 \cdot e \pmod{72} = 49 \cdot 5 \pmod {72} = 245 \pmod{72} = 29 \\
e^6 \pmod{72} &= e^5 \cdot e \pmod{72} = 29 \cdot 5 \pmod {72} = 145 \pmod{72} = 1 \\
\end{align*}
Получаем, что порядок $e = 5$ в группе $\Z^*_{72}$ равен $k = 6$. При
вычислении значения $k$ можно заметить, что $e^{k - 1} = e^5 = 29 = d$. Таким
образом, зная порядок элемента $e$ можно легко вычислить секретную экспоненту
$d$.
\end{example}
\end{document}
|