\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{{Криптографические методы защиты информации}\\{Лабораторная работа №5}}
\author{Гущин Андрей, 431 группа, 1 подгруппа, 2 вариант}
\date{\the\year{} г.}

\begin{document}
\maketitle

\section{Схема}

Рассмотрим следующее упрощение схемы Эль-Гамаля. Пусть $p$ --- простое число,
$g$ --- порождающий элемент мультипликативной группы $Z^\cdot_p$. Эти данные
открыты.

Пользователь выбирает секретное число $1 \leq a \leq p - 1$ и открывает значение
$y = g^a \pmod{p}$.

К сообщению $m \in \{ 0, 1 \}^*$ применяется известная хэш-функция, дающая
значение $h = h(m) \in Z_p$.

Допустим, что $\gcd(h, p - 1) = 1$. Этого можно добиться, внеся необходимые
коррективы в случае невыполнения.

При генерации подписи пользователь вычисляет значение
\begin{equation}
  z = h^{-1} a \pmod{(p - 1)}
  \label{eq:zpow}
\end{equation}

В качестве подписи под документом $m$ предлагается использовать $g^z$.

Проверка правильности подписи элементарна:
\begin{equation}
  (g^z)^h = g^{h^{-1} h a} = g^a \pmod{p}
  \label{eq:check}
\end{equation}

Подпись принимается, если полученное значение совпадает с $y$.

Необходимо объяснить почему упомянутая схема неприемлема.


\section{Неверность схемы}

Заметим, что в выражении \ref{eq:check} подразумевается, что значения $z$
и $h$ находятся в одном кольце и поэтому можно написать $z \cdot h =
h^{-1} \cdot a \cdot h = h^{-1} \cdot h \cdot a = a$.

Но, также можно заметить, что при вычислении $z$ в выражении \ref{eq:zpow}
умножаемые значения берутся по модулю $(p - 1)$. То есть, значение $z$
является элементом мультипликативной группы $Z^\cdot_{(p - 1)}$. При этом
значение $h$ является элементом группы $Z^\cdot_p$ по условию.

Таким образом, в общем случае мы можем сказать, что
\begin{equation*}
  z \cdot h 
  = (h^{-1} \cdot a \pmod{(p - 1)}) \cdot h
  \neq h^{-1} \cdot a \cdot h
\end{equation*}

Например, пусть $p = 31, a = 19, h = 11$. При этом $h^{-1} = 17$, где обратное
берётся в группе $Z^\cdot_p$.

\begin{align*}
  z &= 17 \cdot 19 \pmod{30} = 23 \\
  z \cdot h &= 23 \cdot 11 \pmod{31} = 5 \\
  h^{-1} \cdot a \cdot h &= 17 \cdot 19 \cdot 11 \pmod{31} = 19
\end{align*}

Получаем
\begin{equation*}
  z \cdot h = 5 \neq 19 = h^{-1} \cdot a \cdot h
\end{equation*}

Таким образом, получаем, что сгенерированную подпись невозможно проверить и
данная схема является неприменимой и неприемлемой.

\section{Взлом схемы}

Будем считать схему подписи \emph{неприемлемой}, если имеется возможность
создать подпись для произвольного сообщения не имея при этом секретного ключа.

Рассмотрим выражение \ref{eq:check}. Можно заметить, что $(g^z)^h = y$. Также
можем получить 
\begin{equation*}
  \left( \left( g^z \right)^h \right)^{h^{-1}} = y^{h^{-1}}
\end{equation*}

То есть
\begin{equation*}
  g^z = y^{h^{-1}}
\end{equation*}

Но значение $y$ является частью открытого ключа, а $h^{-1}$ вычисляется из
публично известной хэш-функции для произвольного сообщения.

Таким образом, можно создать подпись для произвольного сообщения не имея при
этом секретного ключа, а основываясь только на публичных данных.

\end{document}
