diff --git a/bibliography.bib b/bibliography.bib index 85c321ad6..a6dcf2261 100644 --- a/bibliography.bib +++ b/bibliography.bib @@ -1167,6 +1167,15 @@ @misc{MS-VBRAND:2004 language = {English}, } +@inproceedings{McGrew:Viega:2004, + author = {McGrew, David A. and Viega, John}, + title = {The Galois/Counter Mode of Operation (GCM)}, + booktitle = {Submission to NIST Modes of Operation Process}, + year = {2005}, + month = {1}, + url = {https://csrc.nist.rip/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf} +} + @INPROCEEDINGS{WangYu:2005, author = {Wang, Xiaoyun and Yu, Hongbo}, title = {How to Break MD5 and Other Hash Functions}, diff --git a/block-ciphers/modes/GCM.tex b/block-ciphers/modes/GCM.tex new file mode 100644 index 000000000..ff5329d90 --- /dev/null +++ b/block-ciphers/modes/GCM.tex @@ -0,0 +1,33 @@ +\subsection{Счётчик с аутентификаций Галуа} +\selectlanguage{russian} + +Режим счётчика с аутентификацией Галуа был предложен Девидом МакГрю и Джоном Виега в 2004 году (\langen{Galois/Counter Mode, GCM}, рис.~\ref{fig:GCM}, \cite{McGrew:Viega:2004}). Данный режим обеспечивает одновременно конфиденциальность и целостность, при условии правильного использования. + +\begin{figure}[bt] + \centering + \includegraphics[width=1\textwidth]{pic/GCM} + \caption{Режим счётчика с аутентификаций Галуа. Пунктирной рамкой выделена область формирования \emph{гаммы}, независящей от открытого текста.} + \label{fig:GCM} +\end{figure} + +Результатом работы режима, кроме набора шифроблоков, является тег аутентификации, который должен быть использован принимающей стороной для проверки целостности сообщения. Как и в режиме выработки имитовставки, генерация данного тега возможна только легальным пользователем -- знающим секретный ключ, который был использован для шифрования данных. + +<<Верхняя>> часть режима является режимом работы счётчика. В качестве первого значения берётся дополнение нулями вектора инициализации до размера обрабатываемого блока. Потом, как и в режиме CTR, правая часть увеличивается на 1 для каждого следующего блока. Значения счётчика шифруются на секретном ключе $K$ для получения блоков гаммы. Самый первый блок полученной гаммы используется не для шифрования открытого текста, а для формирования тега аутентификации. + +Сам тег аутентификации вырабатывается следующим образом. На вход <<подрежима>> генерации тега сначала (опционально) подаются дополнительные данные (\langen{additional authenticated data, AAD}), которые не нужно шифровать в режиме GCM, но которым нужно обеспечить целостность. Например, это может быть заголовок передаваемого пакета данных. После того, как эти данные закончатся, на вход начнут подаваться блоки шифротекста $C_1, C_2, \dots, C_n$. Использование блоков шифротекста, а не открытого текста, позволяет получателю проверить целостность передаваемых данных до того, как приступит к расшифровке. В качестве последнего блока выступает конкатенация длин дополнительных данных и открытого текста. + +Формирование тега происходит через побитовое сложение результата предыдущего блока с новым блоком AAD или $C_j$ и умножение результата на константу $H$, которая в двоичном виде равна результату шифрования нулевого вектора (блока, заполненного нулями) на ключе $K$: + +\[ \begin{array}{l} + H = E_K ( 0^{\{n\}} ) \\ +\end{array} \] + +Умножение на константу $H$ происходит в поле Галуа $\GF{2^{n}}$. Рекомендуемый порождающий многочлен поля для шифра AES (с размером блока 128 бит): + +\[ \begin{array}{l} + f(x) = x^{128} + x^7 + x^2 + x + 1. +\end{array} \] + +Результат умножения самого последнего блока побитово складывается с первым блоком сформированной гаммы. + +Данный режим обеспечивает и конфиденциальность, и целостность. Шифровать отдельные блоки можно параллельно, а вычисление тега аутентификации делается намного быстрее, чем шифрование. Однако любая ошибка передачи приведёт к вычислению некорректного тега аутентификации, а отличить изменение текста в результате ошибки передачи от вмешательства злоумышленника принципиально невозможно. \ No newline at end of file diff --git a/block-ciphers/modes/GOST_MAC.tex b/block-ciphers/modes/GOST_MAC.tex new file mode 100644 index 000000000..dbef53a4b --- /dev/null +++ b/block-ciphers/modes/GOST_MAC.tex @@ -0,0 +1,28 @@ +\subsection{Режим имитовставки}\index{имитовствка!(} +\selectlanguage{russian} + +Режим выработки имитовставки (рис.~\ref{fig:GOST_MAC}, \cite{GOST-89}) принципиально отличается от рассмотренных ранее режимов тем, что призван обеспечивать не конфиденциальность, а целостность. Результатом является блок данных фиксированного размера (в ГОСТ 28147-89 -- до 32 бит), длина которого не зависит от длины исходного сообщения. + +\begin{figure}[bt] + \centering + \includegraphics[width=1\textwidth]{pic/GOST_MAC} + \caption{Режим выработки имитовставки} + \label{fig:GOST_MAC} +\end{figure} + +Входное сообщение как и ранее разбивается на блоки равной длины $M_1, M_2, \dots, M_n$. Последний блок, при необходимости, дополняется (ГОСТ 28147-89 -- нулями). Формула выработки имитовставки выглядит следующим образом: + +\[ \begin{array}{l} + X_1 = M_1; \\ + Y_j = E_K ( X_j ), ~ j = 1, 2, \dots, n; \\ + X_j = Y_{j-1} \oplus M_j, ~ j = 2, \dots, n; \\ + \textbf{MAC} = Y_n. +\end{array} \] + +В ГОСТ 28147-89 для режима выработки имитовставки функция шифрования использует 16 раундов вместо 32. + +Как уже было сказано, данный режим обеспечивает только целостность информации. Причём саму информацию необходимо передавать, и, возможно, шифровать отдельно. Режим не обеспечивает возможности параллельных вычислений для разных блоков открытого текста. + +Принципиальным недостатком является необходимость использовать секретный ключ\index{ключ!секретный} как для выработки имитовставки, так и для её валидации (путём повторной выработки на принимающей стороне и сравнения с результатом). Позже мы рассмотрим функциональных электронных цифровых подписей, которые по своему назначению схожи с имитовставкой, но обеспечивают вариант более гибкого использования -- без необходимости раскрытия ключа, используемого для генерации ЭЦП. + +\index{имитовствка!)} \ No newline at end of file diff --git a/block-ciphers/modes/index.tex b/block-ciphers/modes/index.tex index c03e9759d..f17a4d237 100644 --- a/block-ciphers/modes/index.tex +++ b/block-ciphers/modes/index.tex @@ -23,3 +23,7 @@ \section{Режимы работы блочных шифров}\label{section-bl \input{CFB} \input{CTR} + +\input{GOST_MAC} + +\input{GCM} diff --git a/block-ciphers/modes/pic/Block Cipher Modes.graphml b/block-ciphers/modes/pic/Block Cipher Modes.graphml index dd98617ff..a542f523e 100644 --- a/block-ciphers/modes/pic/Block Cipher Modes.graphml +++ b/block-ciphers/modes/pic/Block Cipher Modes.graphml @@ -1,6 +1,6 @@ - + true @@ -38,18 +38,23 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -136,7 +141,7 @@ - + @@ -158,7 +163,7 @@ - + @@ -180,7 +185,7 @@ - + @@ -2006,7 +2011,7 @@ - + @@ -2026,7 +2031,7 @@ - + @@ -2048,7 +2053,7 @@ - + @@ -2068,7 +2073,7 @@ - + @@ -2079,7 +2084,7 @@ 156 - + @@ -2091,7 +2096,7 @@ 157 - + @@ -2100,7 +2105,7 @@ 158 - + @@ -2119,7 +2124,7 @@ - + @@ -2139,7 +2144,7 @@ - + @@ -2159,7 +2164,7 @@ - + @@ -2181,7 +2186,7 @@ - + @@ -2201,7 +2206,7 @@ - + @@ -2212,7 +2217,7 @@ 171 - + @@ -2224,7 +2229,7 @@ 172 - + @@ -2233,7 +2238,7 @@ 173 - + @@ -2252,7 +2257,7 @@ - + @@ -2272,7 +2277,7 @@ - + @@ -2294,7 +2299,7 @@ - + @@ -2314,7 +2319,7 @@ - + @@ -2334,7 +2339,7 @@ - + @@ -2353,7 +2358,7 @@ - + @@ -2372,7 +2377,7 @@ - + @@ -2391,7 +2396,7 @@ - + @@ -2410,7 +2415,7 @@ - + @@ -2430,7 +2435,7 @@ - + @@ -2441,7 +2446,7 @@ 186 - + @@ -2457,7 +2462,7 @@ 187 - + @@ -2466,7 +2471,7 @@ 188 - + @@ -2485,7 +2490,7 @@ - + @@ -2506,7 +2511,7 @@ - + @@ -2526,7 +2531,7 @@ - + @@ -2546,7 +2551,7 @@ - + @@ -2557,7 +2562,7 @@ 193 - + @@ -2573,7 +2578,7 @@ 194 - + @@ -2582,7 +2587,7 @@ 195 - + @@ -2601,7 +2606,7 @@ - + @@ -2622,7 +2627,7 @@ - + @@ -2632,7 +2637,7 @@ 198 - + @@ -2644,7 +2649,7 @@ 199 - + @@ -2653,7 +2658,7 @@ 200 - + @@ -2662,7 +2667,7 @@ 201 - + @@ -2673,7 +2678,7 @@ 202 - + @@ -2682,7 +2687,7 @@ 203 - + @@ -2702,7 +2707,7 @@ - + @@ -2817,6 +2822,301 @@ + + 210 + + + + M1 + + + + + + + + + + + + + + + + 211 + + + + M2 + + + + + + + + + + + + + + + + 212 + + + + M3 + + + + + + + + + + + + + + + + 213 + + + + E + + + + + + + + + + + + + + + + + + + + + + 214 + + + + E + + + + + + + + + + + + + + + + + + 215 + + + + E + + + + + + + + + + + + + + + + + + 216 + + + + K + + + + + + + + + + + + + + + + 217 + + + + K + + + + + + + + + + + + + + + + 218 + + + + K + + + + + + + + + + + + + + + + 221 + + + + MAC + + + + + + + + + + + + + + + + 222 + + + + + + + + + + + + + + + + + + + + 223 + + + + + + + + + 224 + + + + + + + + + 225 + + + + + + + + + + + + + + + + + + + + 226 + + + + + + + + + 227 + + + + + + + + + -2 + + + + + + + @@ -2824,122 +3124,122 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2950,7 +3250,7 @@ - + @@ -2961,12 +3261,12 @@ - + - + @@ -2977,87 +3277,87 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3068,7 +3368,7 @@ - + @@ -3079,7 +3379,7 @@ - + @@ -3091,47 +3391,47 @@ - + - + - + - + - + - + - + - + - + @@ -3142,7 +3442,7 @@ - + @@ -3153,7 +3453,7 @@ - + @@ -3164,296 +3464,365 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/block-ciphers/modes/pic/GCM.pdf b/block-ciphers/modes/pic/GCM.pdf index db7139ca8..c77bb1a11 100644 Binary files a/block-ciphers/modes/pic/GCM.pdf and b/block-ciphers/modes/pic/GCM.pdf differ diff --git a/block-ciphers/modes/pic/GOST_MAC.pdf b/block-ciphers/modes/pic/GOST_MAC.pdf new file mode 100644 index 000000000..fb059a666 Binary files /dev/null and b/block-ciphers/modes/pic/GOST_MAC.pdf differ