Skip to content

Commit

Permalink
Расширение и уточнение раздела про MD5
Browse files Browse the repository at this point in the history
  • Loading branch information
vlsergey committed Jan 14, 2022
1 parent 132c1b3 commit 13ab927
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 186 deletions.
20 changes: 20 additions & 0 deletions bibliography.bib
Original file line number Diff line number Diff line change
Expand Up @@ -1260,6 +1260,16 @@ @inproceedings{McGrew:Viega:2004
url = {https://csrc.nist.rip/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf}
}

@misc{Wang:Feng:Lai:Yu:2004,
title = {Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD},
author = {Wang, Xiaoyun and Feng, Dengguo and Lai, Xuejia and Yu, Hongbo},
howpublished = {Cryptology ePrint Archive, Report 2004/199},
year = {2004},
totalpages = {4},
url = {https://ia.cr/2004/199},
language = {English}
}

@INPROCEEDINGS{WangYu:2005,
author = {Wang, Xiaoyun and Yu, Hongbo},
title = {How to Break MD5 and Other Hash Functions},
Expand Down Expand Up @@ -1449,6 +1459,16 @@ @book{Pogorelov:Sachkov:2006
language = {Russian},
}

@misc{Klima:2006,
author = {Klima, Vlastimil},
title = {Tunnels in Hash Functions: MD5 Collisions Within a Minute},
howpublished = {Cryptology ePrint Archive, Report 2006/105},
year = {2006},
totalpages = {17},
url = {https://ia.cr/2006/105},
language = {English}
}

@book{Brittain:Darwin:2007,
author = {Brittain, Jason and Darwin, Ian F.},
title = {Tomcat -- The Definitive Guide: Vital Information for Tomcat Programmers and Administrators: Tomcat 6.0 (2. ed.).},
Expand Down
10 changes: 6 additions & 4 deletions hash-functions/MD5.tex
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
\section{MD5}\index{хеш-функция!MD-5|(}
\selectlanguage{russian}

Одна из наиболее популярных в прошлом, но криптографически нестойкая хеш-функция MD5 (от \langen{message digest 5}), разработана Рональдом Ривестом (\langen{Ronald Linn Rivest}) в 1991 году как развитие хеш-функии MD4 и представлена как RFC 1321 в апреле 1992 года (\cite{rfc1321}).
Одна из наиболее популярных в прошлом, но криптографически нестойкая в настоящий момент хеш-функция MD5 (от \langen{message digest 5}) разработана Рональдом Ривестом (\langen{Ronald Linn Rivest}) в 1991 году как развитие хеш-функии MD4\index{хеш-функция!MD-4} и представлена как RFC 1321 в апреле 1992 года (\cite{rfc1321}).

MD5 разрабатывалась как криптографически-стойкая хеш-функция с длиной выходного блока 128 бит. Исходный текст сначала дополняется до целого числа обрабатываемых блоков по 512 бит (рис.~\ref{fig:md5-padding}).

Expand Down Expand Up @@ -38,9 +38,9 @@ \section{MD5}\index{хеш-функция!MD-5|(}
\label{fig:md5-round}
\end{figure}

Каждый из этапов вычисления $H_i = f ( H_{i-1}, M_i )$ состоит из 16 раундов (рис.~\ref{fig:md5-round}), на котором выполняется преобразование четырёх 8-битовых блоков $A, B, C, D$. Основное преобразование выполняется с первым из блоков $A$ (который в конце раунда становится блоком $B$, и далее по кругу, что делает процедуру чем-то похожей на схему Фейстеля). К значению $A_{x-1}$ из результата предыдущего раунда (или предыдущего блока, если это первый раунд) прибавляется значение нелинейной функции $F(B, C, D)$, числовое значение некоторого байта из $M_i$ (индекс байта определяется константой $g_x$), значение раундового <<ключа>> $K_x$. Полученное значение сдвигается влево на количество бит, определяемое ещё одной константой раунда $s_x$, арифметически складывается со значением блока $B_{x-1}$ и считается новым значением блока $B_x$. Остальные блоки циклически сдвигаются без изменений ($B_{x-1} \to C_x$, $C_{x-1} \to D_x$, $D_{x-1} \to A_x$).
Каждый из раундов вычисления $H_i = f ( H_{i-1}, M_i )$ состоит из 16 итераций (рис.~\ref{fig:md5-round}), в которых выполняется преобразование четырёх 8-битовых блоков $A, B, C, D$. Основное преобразование выполняется с первым из блоков $A$ (который в конце итерации становится блоком $B$, и далее по кругу, что делает процедуру чем-то похожей на схему Фейстеля). К значению $A_{x-1}$ из результата предыдущей итерации (или предыдущего раунда, если это первая итерация) прибавляется значение нелинейной функции $F(B, C, D)$, числовое значение некоторого байта из $M_i$ (индекс байта определяется константой $g_x$), значение <<ключа>> итерации $K_x$. Полученное значение сдвигается влево на количество бит, определяемое ещё одной константой итерации $s_x$, арифметически складывается со значением блока $B_{x-1}$ и считается новым значением блока $B_x$. Остальные блоки циклически сдвигаются без изменений ($B_{x-1} \to C_x$, $C_{x-1} \to D_x$, $D_{x-1} \to A_x$).

Вид нелинейной функции $F$ и значения констант $g_x$, $K_x$, $s_x$ отличаются для каждого из 16 раундов и заданы в описании на хеш-функции.
Вид нелинейной функции $F$ и значения констант $g_x$, $K_x$, $s_x$ отличаются для каждой из 16 итераций и заданы в описании на хеш-функции.

Значения $A, B, C, D$ результата обработки самого последнего блока $M_i$ конкатенируются и считаются результатом вычисления хеш-функции.

Expand All @@ -51,6 +51,8 @@ \section{MD5}\index{хеш-функция!MD-5|(}
\item Во-вторых, наличие некоторой функции преобразования $H_i = f ( H_{i-1}, M_i )$, которую можно рассматривать как фактически функцию шифрования некоторого блочного шифра. Но при этом в качестве шифруемого текста выступает результат хеширования предыдущего блока $H_{i-1}$, а блок исходного хешируемого сообщения $M_i$ выступает в качестве ключа шифрования. От стойкости данного шифра зависит возможность (при известных $H_{i-1}$ и $H_{i}$) восстановить <<ключ шифрования>>, то есть часть исходного сообщения, особенно если оно короткое (меньше одного блока, то есть фактически осуществить атаку на восстановление прообраза.
\end{itemize}

В будущем подобный подход будет формализован более явно, в том числе с помощью описания конструкций Меркла~---~Дамгарда и Миагучи~---~Пренеля (см. раздел~\ref{section-stribog} про хеш-функцию <<Стрибог>>).
В 1996 году Ханс Доббертин нашёл коллизии в модификации MD5, которая отличалась от оригинальной только изменением инициализирующих значений $A, B, C, D$, что явно показало наличие уязвимости в дизайне хеш-функции. В 2004 году было объявлено о существовании алгоритма нахождения коллизий к оригинальной хеш-функции с помощью суперкомпьютера, в 2005 году был опубликован подобный алгоритм с примером коллизии, а в 2006 году исследователь из Чехии Властимил Клима представил алгоритм для обычного персонального компьютера с возможностью использования любых начальных значений $A, B, C, D$ (\cite{Wang:Feng:Lai:Yu:2004, WangYu:2005, Klima:2006}).

В настоящий момент данная хеш-функция считается криптографически нестойкой, но ранее она широко использовалась для обеспечения защиты информации, например для хеширования паролей в некоторых версиях Linux и FreeBSD, для генерации имитовставки HMAC-MD5, для проверки целостности файлов и прочих целей. Большое количество стандартных библиотек времени исполнения, систем управления базами данных и даже программ обработки электронных таблиц содержат встроенные функции для вычисления значений хеш-функции MD5.

\index{хеш-функция!MD-5|)}
Loading

0 comments on commit 13ab927

Please sign in to comment.