Skip to content

Commit e1e2006

Browse files
committed
Переписан раздел про структуру Меркла-Дамгора
1 parent 13ab927 commit e1e2006

File tree

5 files changed

+777
-16
lines changed

5 files changed

+777
-16
lines changed

_settings.tex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ \chapter*{#1}%
147147
\newcommand{\PK}{\textrm{PK}}
148148
\newcommand{\SK}{\textrm{SK}}
149149

150+
\newcommand{\langda}[1]{дат. \foreignlanguage{danish}{\textit{#1}}}
150151
\newcommand{\langde}[1]{нем. \foreignlanguage{german}{\textit{#1}}}
151152
\newcommand{\langfr}[1]{фр. \foreignlanguage{french}{\textit{#1}}}
152153
\newcommand{\langen}[1]{англ. \foreignlanguage{english}{\textit{#1}}}

hash-functions/index.tex

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,6 @@ \chapter{Криптографические хеш-функции}\label{chapter
99

1010
\emph{Коллизией} хеш-функции называется пара значений аргумента, дающая одинаковый выход хеш-функции. Коллизии есть у любых хеш-функций, если количество различных значений аргумента превышает возможное количество значений результата функции (принцип Дирихле). А если не превышает, то и нет смысла использовать хеш-функцию.
1111

12-
\example
13-
Приведём пример метода построения хеш-функции, называемого методом Меркла~---~Дамгарда\index{структура!Меркла~---~Дамгарда}~\cite{Merkle:1979, Merkle:1990, Damgard:1990}.
14-
15-
Пусть имеется файл $X$ в виде двоичной последовательности некоторой длины. Разделяем $X$ на несколько отрезков фиксированной длины, например по 256 символов: $m_{1} ~\|~ m_{2} ~\|~ m_{3} ~\|~ \ldots ~\|~ m_{t}$. Если длина файла $X$ не является кратной 256 битам, то последний отрезок дополняем нулевыми символами и обозначаем $m'_{t}$.
16-
Обозначим за $t$ новую длину последовательности. Считаем каждый отрезок $m_i, ~ i = 1, 2, \dots, t$ двоичным представлением целого числа.
17-
18-
Для построения хеш-функции используем рекуррентный способ вычисления. Предварительно введём вспомогательную функцию $\chi(m, H)$, называемую функцией компрессии или сжимающей функцией. Задаём начальное значение $H_{0} = 0^{256} \equiv \underbrace{000 \ldots 0}_{256} $. Далее вычисляем:
19-
\[ \begin{array}{l}
20-
H_1 = \chi( m_1, H_0), \\
21-
H_2 = \chi( m_2, H_1), \\
22-
\dots,\\
23-
H_t = \chi( m'_t, H_{t-1}). \\
24-
\end{array} \]
25-
Считаем $H_{t} = h(X)$ хеш-функцией.
26-
\exampleend
27-
2812
В программировании к свойствам хорошей хеш-функции относят:
2913
\begin{itemize}
3014
\item быструю скорость работы;
@@ -52,6 +36,8 @@ \chapter{Криптографические хеш-функции}\label{chapter
5236

5337
При произвольной длине последовательности $X$ длина хеш-функции $H(X)$ в российском стандарте ГОСТ Р 34.11-94 равна 256 символам, в американском стандарте SHA несколько различных значений длин: 160, 192, 256, 512 символов.
5438

39+
\input{merkle-damgard.tex}
40+
5541
\input{MD5.tex}
5642

5743
\input{GOST_R_34.11-94.tex}

hash-functions/merkle-damgard.tex

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
\section{Структура Меркла~---~Дамгора}\index{кострукция!Меркла~---~Дамгора|(}
2+
\selectlanguage{russian}
3+
4+
Приведём пример метода построения хеш-функции, называемого структурой (конструкцией, методом) Меркла~---~Дамгора (рис.~\ref{fig:merkle-damgard}), впервые описанной в кандидатской диссертации Ральфа Меркла в 1979 году. Меркл и Дамгор независимо друг от друга показали, что если раундовая функция сжатия (обозначенная $f$ на рис.~\ref{fig:merkle-damgard}) устойчива к коллизиям, то итоговая хеш-функция будет также устойчива (\langen{Ralph Charles Merkle}, \langda{Ivan Bjerre Damgård}, \cite{Merkle:1979, Merkle:1990, Damgard:1990}).
5+
6+
\begin{figure}[htb]
7+
\centering
8+
\includegraphics[width=0.95\textwidth]{pic/merkle-damgard}
9+
\caption{Структура Меркла~---~Дамгора}
10+
\label{fig:merkle-damgard}
11+
\end{figure}
12+
13+
Пусть есть задан открытый текст $M$ в виде двоичной последовательности некоторой длины. Текст дополняется, во-первых, дополнением (паддингом), во-вторых, длиной исходного сообщения таким образом, чтобы после дополнения обрабатываемая последовательность можно было разбить на целое число блоков фиксированной длины $M_1, M_2, \dots, M_n$.
14+
15+
Выбирается некоторый начальный вектор IV. Далее последовательно применяется раундовая функция сжатия к двум аргументам, первым из которых является рещультат предыдущего вызова (IV для самого первого), а вторым аргументом -- соответствующий блок $M_i$ обрабатываемой последовательности.
16+
17+
\[\begin{array}{l}
18+
H_0 = \text{IV},\\
19+
H_i = f ( H_{i-1}, M_i ).\\
20+
\end{array}\]
21+
22+
В зависимости от хеш-функции структура может быть дополнена финальным преобразованием, в котором вторым аргументом будет ещё одна некоторая функция от исходного сообщения. Например, в хеш-функции <<Стрибог>>\index{хеш-функция!Стрибог} таким аргументом является арифметическая функция всех блоков исходного открытого текста.
23+
24+
К плюсам данной конструкции относят доказанный авторами факт, что если раундовая функция сжатия устойчива к коллизиям, то итоговая хеш-функция будет также устойчива. Однако у конструкции присутствуют и недостатки.
25+
26+
\begin{itemize}
27+
\item Атака на нахождение второго прообраза (для некоторого известного открытого текста) может быть выполнена за $2^n / | M |$ операций, где $| M |$ -- длина открытого текста. Это меньше, чем требуется операций для полного перебора ($2^n$), особенно для длинных сообщений.
28+
\item Если известен способ нахождения пары коллизий, то множественные коллизии найти незначительно сложнее.
29+
\item В отсуствие финального преобразования при заданном значении хеш-функции $h = H(M)$ (и неизвестном исходном сообщении $M$) можно легко найти значение $H( pad(M) \| M' )$, где $pad(M)$ -- функция дополнения, а $M'$ -- выбранный злоумышленником дополнительный текст к исходному сообщению.
30+
\end{itemize}
31+
32+
С использованием данной конструкции построены такие криптографические хеш-функции, как MD4\index{хеш-функция!MD4}, SHA-1\index{хеш-функция!SHA-1}, SHA-2\index{хеш-функция!SHA-2}, российский стандарт ГОСТ~Р~34.11-2012 (<<Стрибог>>)\index{хеш-функция!Стрибог} и многие другие.
33+
34+
\index{кострукция!Меркла~---~Дамгора|)}

0 commit comments

Comments
 (0)