% Лекция 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: дописать
