-
Notifications
You must be signed in to change notification settings - Fork 0
/
lecture_06.tex
104 lines (102 loc) · 13.3 KB
/
lecture_06.tex
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
\section{Загальні схеми побудови геш-функцій. Характеристики відомих геш-функцій. Цифровий підпис Ель-Гамаля.}
\begin{flushright}
\emph{(Автор: Яна Євсюкова. Редагувалось.)}
\par \emph{(Версія від 22 січня 2017 р.)}
\end{flushright}
\subsection{Загальні схеми побудови геш-функцій.}
Геш-функція необхідна для того, щоб перетворювати послідовність будь-якої довжини в зазначену. Існує декілька схем побудови геш-функції:
\subsubsection*{Схема l. Побудова геш-функції}
Нехай \textit{M}--відкритий текст. Відкритий текст розбивається на блоки \textit{$M=M_1M_2\ldots M_t$}. Довжина \textit{$M_i$}--ого блоку дорівнює \textit{m} біт, де \textit{$i=\overline{1,t}$}.\\
Будується функція стиснення. Зазвичай дана функція є односторонньою, що володіє лавинним ефектом та іншими характеристиками. Причому можна брати вже відомі нам односторонні функції. Наприклад, функція Діффі-Гелмана, RSA, тобто ті функції, що використовуються в асиметричній криптографії з відкритими ключами. Однак, в стандартних геш-функціях, вони зазвичай не використовуються, оскільки працюють досить повільно.\\
Функції стиснення будуються завдяки деяким стандартним операціям: \textit{XOR, додавання за модулем, циклічний зсув, логічні операції} та інші.\\
Наприклад,\\ \textit{$$(n,m)-f$$} функція, на вході якої \textit{n} біт, а на виході \textit{m} біт.\\
Далі, по рекурентній процедурі обчислюється $$H_i=F(M_i \oplus H_{i-1}), \textit{$i=\overline{1,t} \: ,$}$$
де \textit{$H_0$} початковий вектор (зазвичай, відкритий).\\
Останній блок \textit{$H_t$} -- це вихідне значення геш-функції \textit{$h(x)$}.$$H_t=h(M)$$
Тобто дана процедура є покрокова. На кожному кроці оброблюється один блок відкритого тексту \textit{M} та весь час замішуються попередні результати з наступними блоками. І в останньому значенні \textit{$H_t$} будуть замішані всі біти повідомлення.\\
Існує й інша процедура гешування. Наприклад,
\textit{$$(2m,m)-f$$}функція, на вході якої \textit{2m} біт, а на виході \textit{m} біт.\\
Тоді функція \textit{$H_i$} будується наступним чином:
$$H_i=F(M_i , H_{i-1}), \textit{$i=\overline{1,t} \:.$}$$
\subsubsection*{Схема ll. Побудова геш-функції}
Нехай \textit{M}-відкритий текст. Відкритий текст розбивається на блоки \textit{$M=M_1M_2\ldots M_t$}, \textit{$\left\|M_i\right\|=m$} біт, \textit{$i=\overline{1,t}$}.\\
Нехай, відповідно \textit{$E_k(x)$}--алгоритм блочного шифрування. При цьому розмір входу, виходу та ключа однакові (m біт).
\textit{$$\left\|E_k \right\| = \left\| k \right\| = \left\| x \right\| = m $$}
Тоді, відповідно, рекурентно обчислюється:
$$H_i=E_A(B) \oplus C, \textit{$i=\overline{1,t}\: ,$}$$
де \textit{A,B,C}-\textit{m}-вимірні вектора.\\
\textit{A,B,C} можуть приймати одне із значень:
\begin{enumerate}
\item значення блоку \textit{$M_i$}
\item значення попереднього гешу \textit{$H_{i-1}$}
\item $M_i \oplus H_{i-1}$
\item $D=const$ - \textit{m}-вимірний вектор
\end{enumerate}
Усього отримаємо 64 можливих варіанти (на кожен із трьох векторів маємо по чотири можливих значення, тобто $4^3=64$). $52$ з них признані слабкими, тому використовують лише $12$ останніх варіантів.\\
Наприклад,
\begin{enumerate}
\item $H_i=E_{M_i}(M_i) \oplus H_{i-1}$
\item $H_i=E_{H_{i-1}}(M_i) \oplus M_i$
\item $H_i=E_{M_i}(M_i \oplus H_{i-1}) \oplus H_{i-1}$
\item $H_i=E_{H_{i-1}}(M_i \oplus H_{i-1}) \oplus M_i$
\end{enumerate}
Вихідним значенням геш-функції \textit{$h(M)$} є останній блок.$$h(M)=H_t$$
\subsection*{Характеристики відомих геш-функцій.}
Розглянемо випадок, коли геш-функції побудовані по \textbf{Схемі l}, тобто, коли використовується не шифратор, а лише бінарні операції.
\begin{enumerate}
\item Автором перших геш-функцій,що використовувались, став Рівест (один з авторів RSA). Ним були створені такі геш функції:
\begin{enumerate}
\item[] \textit{MD2} (1989р.)
\item[] \textit{MD4} (1990р.)
\item[] \textit{MD5} (1991р.)
\end{enumerate}
Вихідна строка даних геш-функцій складає $128$ біт, що зараз є недодтатнім для використання.\\
Геш-функція \textit{MD2} майже не використовувалась. Вона створена для 8-розрядних процесорів, а \textit{MD4} та \textit{MD4} для 32-розрядних процесорів.\\
При цьому, коли запропонували геш-функцію \textit{MD4}, майже одразу було знайдено вразливості з точки зору побудови колізій. Тому Рівест трохи ускладнив функцію та отримав \textit{MD5}. Вона працює повільніше, ніж \textit{MD4}, однак знайдена колізія була усунена. Після чого \textit{MD5} років 20 була найпопулярнішою геш-функцією, але зараз вона знімається з використання.
\item \textit{SHA-1} - стандарт США (1995р).\\
\textit{SHA-1} використовувалсь у стандарті цифрового підпису \textit{SHS}.\\
Вихідна строка даної геш-функцій складає $160$ біт.\\
Функції стиснення в пункті 1 та пункті 2 будувалися чергуванням операцій XOR, циклічного сзуву, додавання за модулем $2^{32}$, логічних операцій AND та OR. Чергуя дані операції, будувалась функція, яка обчислювально була одностороння та володіла гарними властивостями перемішування.
\item Переможець конкурсу \textit{SHA-3} (2007-2012рр.).\\
В 2010 році на конкурсі було відібрано 14 кандитатів на перемогу. А в 2012 році проголосили переможця. Ним став \textit{Кесеак} з вихідною строкою у $256$ біт.
\end{enumerate}
Розглянемо випадок, коли геш-функції побудовані по \textbf{Схемі ll}, тобто, коли використовується шифратор.
\begin{enumerate}
\item \textit{ГОСТ Р 34-11} (1994р.).\\
В Україні є стандартом з 1995 року. Також є стандартом Россії та деяких держав СНД.\\
Вихідна строка даної геш-функцій складає $256$ біт.\\
Для побудови функції стиснення використовується шифр \textit{ГОСТ Р 28147-89}.\\
Довгочасні ключі фіксуються(декілька варіантів на вибір).
\end{enumerate}
Таким чином, усі зазначені геш-функції є функціями без секрету, тобто кожен може використовувати їх.
\subsection*{Цифровий підпис Ель-Гамаля.}
Більшість європейских держав будують сучасний цифровий підпис за схемою Ель-Гамаля. Розглядатиметься базовий варіант підпису Ель-Гамаля, в той час як існують сотні варіантів даного цифрового підпису. Вони мають однакову односторонню функцію що визначає стійкість, а саме функцію Діффі-Геллмана. Стійкість цифрового підпису Ель-Гамаля побудована на складності залачі дискретного логарифмування. Побудова підпису подібна до схеми шифрування Ель-Гамаля.\\
\subsubsection*{Побудова схеми цифрового підпису Ель-Гамаля користувачем \textbf{А}:}
\begin{enumerate}
\item \textbf{А} обирає велике просте число \textit{p} та примітивний елемент $\alpha$ поля \textit{$F_p$}, де \textit{$p$} та $\alpha$ не є секретними.
\item \textbf{А} обирає секретний ключ \textit{k} та обчислює: $$y=\alpha^{k}mod p$$ Також обирається геш-функція \textit{h(x)}.
\item \textbf{А} оголошує відкритий ключ \textit{$(p,\alpha,y)$} для перевірки цифрового підпису. Секретний ключ \textit{k} створений для формування цифрового підпису.
\end{enumerate}
\subsubsection*{Формування цифрового підпису до повідомлення \textit{M} довільної довжини з геш-функцією користувачем \textbf{А}}
\begin{enumerate}
\item \textbf{А} обирає випадковий параметр цифрового підпису \textit{$x_M$} (для кожного попідомлення \textit{$M$} параметр обирається знову), $1<x_M<p-1$, gcd$(x_M,p-1)=1$.\\
Обчислюється $$r=\alpha^{x_M}mod p$$
\item Знаходимо розв'язок рівняння відносно \textit{$S$}: $$H=kr+x_{M}Smod(p-1) \: ,$$
де $H=h(M)$, тобто $$S=(H-kr)x^{-1}_{M}mod (p-1)$$
\item \textbf{А} формує підписане повідомлення \textit{$(M,r,S)$} де \textit{$(r,S)$} є цифровим підписом.
\end{enumerate}
\subsubsection*{Перевірка цифрового підпису користувачем \textbf{B}}
\begin{enumerate}
\item Користувач \textbf{B} ділить повідомлення на три частини:$$(M,r,S)\rightarrow M,r,S$$
\item Обчислює \textit{$h(M)=H$}
\item Перевіряє рівність: $$?y^rr^Smodp=\alpha^H?$$
Якщо рівність виконується, то підпис вірний, і навпаки, якщо рівність не виконується, то підпис хибний.\\
Дійсно, якщо спотворення відсутні, то виконується: $$y^rr^Smodp=\alpha^{kr+x_{M}S}modp=\alpha^{t(p-1)+H}modp=(\alpha^{p-1})^t\alpha^{H}modp=\alpha^{H} \: ,$$
де $(\alpha^{p-1})modp\equiv1$ за малою теоремою Ферма.
\end{enumerate}
\textit{\textbf{Зауваження!}} Під час формування цифрових підписів різних повідомлень \textit{$M_1$} та \textit{$M_2$}, парметри цифрового підпису \textit{$x_{M_1}$} та \textit{$x_{M_2}$} не мають співпадати.\\
Нехай \textit{$x_{M_1}=x_{M_2}$}. Криптоаналітик може виконати успішну атаку, оскільки він має: $$(M_1,r_1,S_1)=(M_2,r_2,S_2)$$
Криптоаналітик помічає, що \textit{$r=r_1=r_2=\alpha^{x}modp$}, тобто \textit{$x_{M_1}=x_{M_2}$} та складає систему рівнянь:
$$h(M_1)=H_1=kr+xS_1mod(p-1)$$
$$h(M_2)=H_2=kr+xS_2mod(p-1)$$
Відповідно, криптоаналітик знаходить секретний ключ \textit{k} та параметр \textit{x}. Таким чином, система повністю зламана.