% Лекция 28 (05.05.23) % TODO: дописать В 1977--78 годах, работая в Массачусетском технологическом институте, они создали шифр, названный RSA (по первым буквам фамилий), который произвёл переворот в криптографии и открыл новый период в сфере защиты информации. В настоящее время RSA --- самый распространённый метод шифрования используемый в компьютерных сетях. В этом шифре осуществлена другая казавшаяся несбыточной мечта криптографов: возможность защищённой связи без передачи секретного ключа. \begin{enumerate} \item Пусть имеется компьютерная сеть, абоненты которой хотят обмениваться информацией, не предназначенной для непредусмотренных пользователей. Абонент A выбирает два больших (примерно по 100--300 цифр) простых числа $p$ и $q$, находит их произведение $n = pq$. Затем вычисляется $\varphi(n) = \varphi(pq) = \varphi(p) \varphi(q) = (p - 1)(q - 1)$. Затем в кольце $\Z_{\varphi(n)}$ подбирает целое число $e > 1$ взаимно простое с $\varphi(n)$. Затем он опубликовывает пару $(n, e)$ --- это его \emph{открытый ключ}, он применяется для шифрования сообщений. \item Предположим, что другой абонент B желает отправить для A секретное сообщение. Он переводит открытый текст в числовую форму $m$ (например, заменяя a на 01, b --- на 02, $\dots$, z --- на 26, а пробел между словами --- на 00). Если полученное число $m$ превышает $n$, его можно разбить на последовательные части, каждая меньше $n$, так что для простоты пусть $m < n$. Далее B вычисляет $c = m^e \pmod{n}$. Это криптограмма, которую он и посылает абоненту A. \item Для того, чтобы её прочитать, A уже заготовил свой \emph{закрытый ключ} --- число $d$, удовлетворяющее двум требованиям: $1 < d < n$ и $ed \equiv 1 \pmod{\varphi(n)}$. Так как $e$ взаимно просто с $\varphi(n)$, то это сравнение имеет решение, то есть такое число существует и притом только одно. Теперь A вычисляет $c^d \pmod{n}$ и получает $m$. \end{enumerate} \begin{theorem}[Корректность метода шифрования RSA, Ривест, 1978 г.] По построению шифра RSA $c^d \pmod{n} = m$. \end{theorem} \begin{example} $p = 3, q = 11, n = pq = 3 \cdot 11 = 33$. $\varphi(n) = \varphi(pq) = \varphi(p) \varphi(q) = (p - 1) (q - 1) = 2 \cdot 10 = 20$. $e = 7$ (из кольца $Z_{20}$). То есть открытый ключ --- (33, 7). $ex = 7x \equiv 1 \pmod{20}$. $d = 3; m = 2$. \end{example} Составим криптограмму: \begin{equation*} c = m^e \pmod{n} = 2^7 \pmod{33} = 128 \pmod{33} = 29 \end{equation*} Таким образом, Боб посылает Алисе криптограмму $c = 29$. Теперь $m = c^d \pmod{n} = 29^3 \pmod{33} = 2$. Стойкость шифра RSA основана на задаче разложения на множители для больших составных чисел, которая в настоящее время вычислительно (эффективно) не разрешима. \subsection{Криптосистема Эль-Гамаля} Криптосистема Эль-Гамаля была предложена в 1985 году. Криптографическая стойкость данной системы основа на сложности проблемы дискретных логарифмов. \begin{enumerate} \item \textbf{Формирование системы.} \begin{enumerate} \item Все участники разделяют в качестве системных параметров простое число $p$ и образующий элемент $\alpha$ и мультипликативной группы $\Z^*_p$; \item Каждый участник $P$ случайным образом выбирает целое число $x_p$, $1 \leq x_p \leq p - 2$, которое держит в секрете; \item Каждый участник P вычисляет $y_p = \alpha^{x_p} \pmod{p}$ и объявляет $y_p$ публичным ключом. \end{enumerate} \item \textbf{Шифрование сообщения для Боба.} Предположим, Алиса хочет послать секретное сообщение Бобу. Сообщение представлено целым числом $0 \leq m \leq p - 1$. \begin{enumerate} \item Алиса выбирает случайное секретное число $0 \leq r \leq p - 1$; \item Алиса вычисляет $R = \alpha^r \pmod{p}$; \item Алиса вычисляет $S = m \cdot y_B^r \pmod{p}$; \item Алиса посылает Бобу пару $(R, S)$. \end{enumerate} \item \textbf{Расшифрование сообщения Бобом.} \begin{enumerate} \item Боб получает пару $(R, S)$ и, используя своё секретное $x_B$, восстанавливает сообщение $m$ путём следующего вычисления: \begin{equation*} \frac{s}{R^{x_B}} = m \end{equation*} \end{enumerate} \end{enumerate}