summaryrefslogtreecommitdiff
path: root/crypto-algebra/lectures/lecture13.tex
blob: 7b6414f65c6badfb116ec742d5c8fdfca4adab2a (plain)
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
% Лекция 13 (04.12.23)

Соответствие $x \\ x'$ является взаимно однозначным и легко вычислимым.

\begin{example}
  Встроим открытый текст в координату точки эллиптической кривой, определённой
  над конечным полем $\FF_{32} = \FF_{2^5}$. Пусть эллиптическая кривая $E(\FF_{32})$
  задана уравнением
  \begin{equation*}
    y^2 + xy = x^3 + t;
  \end{equation*}
  поле $\FF_{32}$ задано полиномом
  \begin{equation*}
    t^5 + t^2 + 1,
  \end{equation*}
  таким образом, $\FF_{32} = \FF_2 / (t^5 + t^2 + 1)$.

  Кривая имеет 16 точек. Открытый текст $t^3 + 1$ не является $x$-координатой
  точки кривой. Вычисляем
  \begin{align*}
    \sqrt{t} &= t^{2^{5 - 1}} = t^{16} = * \\
    t^5 &= -t^2 - 1 = t^2 + 1; \\
    t^6 &= tt^5 = t(t^2 + 1) = t^3 + t; \\
    t^7 &= t^4 + t^2; \\
    t^8 &= t^5 + t^3 = t^3 + t^2 + 1; \\
    t^{16} &= (t^8)^2 = t^6 + 2t^5 + t^4 + 2t^3 + 2t^3 + 2t^2 + 1
    = t^4 + t^3 + t + 1. \\
    * &= t^4 + t^3 + t + 1.
  \end{align*}

  Заменяем элемент $t^3 + 1$ на элемент, заданный уравнением
  \begin{equation*}
    \frac{1}{x} = \frac{1}{t^4 + t^3 + t + 1} + \frac{1}{t^3 + 1}.
  \end{equation*}

  Получаем необходимую $x$-координату точки кривой:
  \begin{align*}
    \frac{1}{x} &= \frac{t^4 + t^3 + t + 1 + t^3 + 1}{(t^4 + t^3 + t + 1)(t^3 + 1)} = \\
                &= \frac{t(t^3 + 1)}{(t^4 + t^3 + t + 1)(t^3 + 1)} = \\
                &= \frac{t}{t^4 + t^3 + t + 1}; \\
    x &= t^3 + t^2 + \frac{1}{t} + 1 = \\
      &= t^3 + t^2 + (t^4 + t) + 1 = \\
      &= t^4 + t^3 + t^2 + t + 1.
  \end{align*}
\end{example}

%% NOTE: 3.3.2
\subsubsection{Установление сеансового ключа}

Рассмотрим аналог ключевого обмена Диффи--Хеллмана. Предположим, что Алиса и Боб
хотят договориться о ключе, которым будут впоследствии пользоваться в некоторой
классической криптосистеме.

Ключом может служить <<случайная>> точка на эллиптической кривой $E$, так как
Алиса и Боб могут заранее договориться о способе преобразования её в целое число
(например, взять образ её координаты $x$ при некотором установленном в системе
простом отображении из $\FF_q$ в натуральные числа).

Итак, предположим, что $E$ --- эллиптическая кривая над $\FF_q$, а $Q$ ---
согласованная (и общеизвестная) точка на кривой. Желательно, чтобы точка $Q$
имела весьма большой порядок (равный либо $\#E(\FF_q)$, либо большому делителю
$\#E(\FF_q)$).

Здесь точка $Q$ играет ту же роль, что и образующий элемент $g$ в системе
Диффи--Хеллмана для конечных полей.

Договорённость может быть предварительной, или эллиптическая кривая может
создаваться непосредственно в ходе сеанса связи.

Для установления сеансового ключа Алиса и Боб выполняют следующий протокол:
\begin{enumerate}
  \item
    Алиса случайным образом выбирает целое число $k_A$, которое держит в секрете.
  \item
    Алиса вычисляет точку $k_A Q \in E$ и посылает её Бобу (возможно открыто).
  \item
    Боб случайным образом выбирает целое число $k_B$, которое держит в секрете.
  \item
    Боб вычисляет точку $k_B Q \in E$ и посылает её Алисе (возможно открыто).
  \item
    Алиса умножает точку, которую она получила от Боба, на свой секретный ключ
    $k_A$. Боб умножает точку, которую он получил от Алисы, на свой секретный
    ключ $k_B$, тем самым получая общий ключ
    \begin{equation*}
      P = k_A k_B Q \in E
    \end{equation*}
\end{enumerate}

Ева, которая бы хотела шпионить за Алисой и Бобом, должна была бы определить $P
= k_A k_B Q$, зная $Q$, $k_A Q$ и $k_B Q$, но не зная $k_A$ или $k_B$.

Задача подслушивателя называется <<задачей Диффи--Хеллмана для эллиптических
кривых>>.

Систему Диффи--Хеллмана можно взломать, если решить <<проблему дискретного
логарифма>> в группе точек эллиптической кривой $E$.

\subsubsection{Шифрование}

Протокол Диффи--Хеллмана модифицируется для передачи сообщений, используя
идею Эль-Гамаля. Пусть $E$ --- эллиптическая кривая над $\FF_q$, а $Q$ ---
согласованная (и общеизвестная) точка на кривой.

Предположим, что набор единиц сообщения был встроен в $E$ некоторым
согласованным образом, и Боб хочет послать Алисе сообщение $M \in E$.

\begin{enumerate}
  \item
    Алиса случайным образом выбирает целое число $k_A$, которое держит в секрете.
  \item
    Алиса вычисляет точку $k_A Q \in E$ и посылает её Бобу (возможно открыто).
  \item
    Боб случайным образом выбирает целое число $k_B$, которое держит в секрете.
  \item
    Боб вычисляет точку $k_B Q \in E$ и посылает её Алисе (возможно открыто).
  \item
    Боб выбирает другое секретное случайное целое число $l$.
  \item
    Боб отправляет Алисе пару точек
    \begin{equation*}
      (lQ, M + l(k_A q)).
    \end{equation*}
  \item
    Чтобы расшифровать сообщение, Алиса умножает первую точку в паре на своё
    секретное $k_A$, а затем вычитает результат из второй точки в паре:
    \begin{equation*}
      (M + l(k_A Q)) - k_A(lQ) = M.
    \end{equation*}
\end{enumerate}

Данную систему также можно будет взломать, если решить <<проблему дискретного
логарифма>> в группе точек эллиптической кривой $E$.


\subsubsection{Цифровая подпись}

\paragraph{Протокол цифровой подписи Эль-Гамаля.}

В протоколе цифровой подписи Эль-Гамаля открытый ключ проверки подписи сожержит
уравнение эллиптической кривой $E(F)$, образующую $Q$ простого порядка $r$ и
точку $P = lQ$.

Секретным ключом формирования подписи является показатель $l$. Кроме того, в
протоколе подписи используется хэш-функция $h$ и функция $f$. В качестве
функции $f(R)$ могут использоваться функции от координат: $x_R$, $y_R$,
$x_R + y_R$ и т. п.

Для получения цифровой подписи под сообщением $M$ необходимо выполнять
следующие действия (шаги) по алгоритму:
\begin{enumerate}
  \item вычислить хэш-код сообщения $M: h(m)$;
  \item
    сгенерировать случайное (псевдослучайное) целое число $k$, удовлетворяющее
    неравенству
    \begin{equation*}
      0 < k < r;
    \end{equation*}
  \item
    вычислить точку эллиптической кривой $R = kQ$, $R = (x_R, y_R)$;
  \item
    вычислить значение $s$ из решения сравнения
    \begin{equation}
      h(m) \equiv lf(R) + ks \pmod{r}
      \label{eq:23}
    \end{equation}
\end{enumerate}

При этом необходимо, чтобы выполнялось неравенство $f(R) \neq 0 \pmod{r}$, в
противном случае вернуться к шагу 2. Если $f(R) \equiv 0 \pmod{r}$, то подпись
не зависит от персонального ключа.

Исходными данными этого процесса являются ключ подписи $l$ и подписываемое
сообщение $M$, а входным результатом --- цифровая подпись $(R, s)$.

При этом можно сократить объём подписи, задав вместо $R$ только координату
$x_R$ и знак координаты $y_R$ (0, если $y_R < \frac{p}{2}$, и 1, если $y_R
> \frac{p}{2}$), тогда при проверке подписи необходимо будет восстановить
координату $y_R$ решением квадратного уравнения в поле $F$.

Для проверки цифровой подписи $(R, s)$ под полученным сообщением $M$ необходимо
выполнять следующие действия (шаги) по алгоритму:

%% TODO: дописать