summaryrefslogtreecommitdiff
path: root/reports/lab5
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-12-11 12:43:48 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-12-11 12:43:48 +0400
commit032e1fa27ff9faa9a5d82624dbfc5fe8a48c339c (patch)
tree40083b63867a6517254e9b27a3a81c8f9aac5d37 /reports/lab5
parenta28703315e4628b41e1d7d1d0628189b44b656b8 (diff)
Добавлена 5 лабораторная
Diffstat (limited to 'reports/lab5')
-rw-r--r--reports/lab5/lab5.pdfbin0 -> 162192 bytes
-rw-r--r--reports/lab5/lab5.tex135
-rwxr-xr-xreports/lab5/maker.sh35
3 files changed, 170 insertions, 0 deletions
diff --git a/reports/lab5/lab5.pdf b/reports/lab5/lab5.pdf
new file mode 100644
index 0000000..1798093
--- /dev/null
+++ b/reports/lab5/lab5.pdf
Binary files differ
diff --git a/reports/lab5/lab5.tex b/reports/lab5/lab5.tex
new file mode 100644
index 0000000..5505297
--- /dev/null
+++ b/reports/lab5/lab5.tex
@@ -0,0 +1,135 @@
+\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}
diff --git a/reports/lab5/maker.sh b/reports/lab5/maker.sh
new file mode 100755
index 0000000..e847acf
--- /dev/null
+++ b/reports/lab5/maker.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+watch() {
+ [ -z "$1" ] && echo "Необходимо указать название основного документа" && help
+ set -o xtrace
+ latexmk -pdf -f -shell-escape -interaction=nonstopmode -pvc $1
+}
+
+doc() {
+ [ -z "$1" ] && echo "Необходимо указать название основного документа" && help
+ set -o xtrace
+ latexmk -pdf -f -shell-escape -interaction=nonstopmode $1
+}
+
+clean() {
+ set -o xtrace
+ rm -rf _minted-*
+ find . -name "*.aux" -exec rm {} \;
+ rm -f *.dvi *.fdb_latexmk *.fls *.log *.out *.toc
+}
+
+help() {
+ echo "Использование:"
+ echo "./maker.sh watch <main-doc>.tex -> Запуск процесса, пересобирающего документ при изменениях"
+ echo "./maker.sh doc <main-doc>.tex -> Пересобрать документ"
+ echo "./maker.sh clean -> Удаление сгенерированных файлов"
+ exit 1
+}
+
+case "$1" in
+ watch) watch $2 ;;
+ doc) doc $2 ;;
+ clean) clean ;;
+ *) help ;;
+esac