Skip to content

Commit

Permalink
Merge pull request #4 from vlsergey/master
Browse files Browse the repository at this point in the history
Merge pull  from vlsergey/master
  • Loading branch information
TBaklanova committed Dec 6, 2015
2 parents 1cc8590 + 41051a9 commit ae08bb9
Show file tree
Hide file tree
Showing 60 changed files with 224 additions and 222 deletions.
16 changes: 8 additions & 8 deletions AES.tex
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
\section{Стандарт шифрования США AES}\index{шифр!AES|(}
\selectlanguage{russian}

До 2001 г. стандартом шифрования данных в США был DES\index{шифр!DES} (аббревиатура от Data Encryption Standard), который был принят в 1980 году. Входной блок открытого текста и выходной блок шифрованного текста DES составляли по 64 бита каждый, длина ключа -- 56 бит (до процедуры расширения). Алгоритм основан на ячейке Фейстеля\index{ячейка Фейстеля} с S-блоками и таблицами расширения и перестановки бит. Количество раундов -- 16.
До 2001 г. стандартом шифрования данных в США был DES\index{шифр!DES} (аббревиатура от Data Encryption Standard), который был принят в 1980 году. Входной блок открытого текста и выходной блок шифрованного текста DES составляли по 64 бита каждый, длина ключа~--- 56 бит (до процедуры расширения). Алгоритм основан на ячейке Фейстеля\index{ячейка Фейстеля} с S-блоками и таблицами расширения и перестановки бит. Количество раундов~--- 16.

Для повышения криптостойкости и замены стандарта DES был объявлен конкурс на новый стандарт AES (аббревиатура от Advanced Encryption Standard). Победителем конкурса стал шифр Rijndael. Название составлено с использованием первых слогов фамилий его создателей (Rijmen и Daemen). В русскоязычном варианте читается как <<Рэндал>>~\cite{Kiwi:1999}. Шифр был утверждён в качестве стандарта FIPS 197 в ноябре 2001 г. и введён в действие 26 мая 2002 года~\cite{FIPS-PUB-197}.
Для повышения криптостойкости и замены стандарта DES был объявлен конкурс на новый стандарт AES (аббревиатура от Advanced Encryption Standard). Победителем конкурса стал шифр Rijndael. Название составлено с использованием первых слогов фамилий его создателей (Rijmen и Daemen). В русскоязычном варианте читается как <<Рэндал>>~\cite{Kiwi:1999}. Шифр был утверждён в качестве стандарта FIPS 197 26 ноября 2001 г. и введён в действие 26 мая 2002 года~\cite{FIPS-PUB-197}.

AES -- это раундовый\index{шифр!раундовый} блочный\index{шифр!блочный} шифр с переменной длиной ключа (128, 192 или 256 бит) и фиксированной длиной входного и выходного блоков (128 бит).
AES~--- это раундовый\index{шифр!раундовый} блочный\index{шифр!блочный} шифр с переменной длиной ключа (128, 192 или 256 бит) и фиксированной длиной входного и выходного блоков (128 бит).

\subsection[Состояние, ключ шифрования и число раундов]{Состояние, ключ шифрования и число \protect\\ раундов}

Expand Down Expand Up @@ -60,7 +60,7 @@ \subsection{Операции в поле}
\item строками матрицы.
\end{itemize}

В алгоритме шифрования AES байты рассматриваются как элементы поля $\GF{2^8}$, а вектор-столбцы из четырёх байт -- как многочлены третьей степени над полем $\GF{2^8}$. В приложении~\ref{chap:discrete-math} дано подробное описание этих операций.
В алгоритме шифрования AES байты рассматриваются как элементы поля $\GF{2^8}$, а вектор-столбцы из четырёх байт~--- как многочлены третьей степени над полем $\GF{2^8}$. В приложении~\ref{chap:discrete-math} дано подробное описание этих операций.

Хотя определение операций дано через их математическое представление, в реализациях шифра AES активно используются таблицы с заранее вычисленными результатами операций над отдельными байтами, включая взятие обратного элемента и перемножение элементов в поле $\GF{2^8}$ (на что требуется 256 байт и 65 Кбайт памяти соответственно).

Expand Down Expand Up @@ -135,7 +135,7 @@ \subsubsection{Замена байтов $\mathsf{SubBytes}$}

\subsubsection{Сдвиг строк $\mathsf{ShiftRows}$}

Для выполнения операции <<сдвиг строк>> строки в таблице текущего состояния циклически сдвигаются влево. Величина сдвига различна для различных строк. Строка $0$ не сдвигается вообще. Строка $1$ сдвигается на $C_1=1$ позицию, строка $2$ -- на $C_2=2$ позиции, строка $3$ -- на $C_3=3$ позиции.
Для выполнения операции <<сдвиг строк>> строки в таблице текущего состояния циклически сдвигаются влево. Величина сдвига различна для различных строк. Строка $0$ не сдвигается вообще. Строка $1$ сдвигается на $C_1=1$ позицию, строка $2$~--на $C_2=2$ позиции, строка $3$~--- на $C_3=3$ позиции.
%Величины $C1,C2$ и $C3$ зависят от $Nb$. Их значения приведены в таблице~\ref{tab:AES-shift-rows}.
%
%\begin{table}[!ht]
Expand Down Expand Up @@ -218,10 +218,10 @@ \subsection{Процедура расширения ключа}
\begin{itemize}
\item суммарная длина ключей всех раундов равна длине блока, умноженной на увеличенное на 1 число раундов. Для блока длины 128 бит и 10 раундов общая длина всех ключей раундов равна 1408;
\item с помощью ключа шифра находят \emph{расширенный ключ};
\item ключи \emph{раунда} выбираются из \emph{расширенного} ключа по правилу: ключ первого раунда состоит из первых 4-х столбцов матрицы расширенного ключа, второй ключ -- из следующих 4-х столбцов и т.~д.
\item ключи \emph{раунда} выбираются из \emph{расширенного} ключа по правилу: ключ первого раунда состоит из первых 4-х столбцов матрицы расширенного ключа, второй ключ~-- из следующих 4-х столбцов и т.~д.
\end{itemize}

Расширенный ключ -- это матрица $\mathsf{W}$, состоящая из $4 \cdot (\mathsf{Nr} + 1)$ 4-байтных вектор-столбцов, каждый столбец $i$ обозначается $\mathsf{W}[i]$.
Расширенный ключ~--- это матрица $\mathsf{W}$, состоящая из $4 \cdot (\mathsf{Nr} + 1)$ 4-байтных вектор-столбцов, каждый столбец $i$ обозначается $\mathsf{W}[i]$.

Далее рассматривается только случай, когда ключ шифра состоит из $16$ байт. Первые $\mathsf{Nk} = 4$ столбца содержат ключ шифра. Остальные столбцы вычисляются рекурсивно из столбцов с меньшими номерами.

Expand Down Expand Up @@ -289,7 +289,7 @@ \subsection{Процедура расширения ключа}

Константы раундов определяются следующим образом:
\[ \mathsf{Rcon}[i] = (\mathsf{RC}[i], \mathrm{'00'}, \mathrm{'00'}, \mathrm{'00'})^T, \]
где байт $\mathsf{RC}[1] = \mathrm{'01'}$, а байты $\mathsf{RC}[i] = \alpha^{i-1}, ~ i = 2, 3, \dots$. Байт $\alpha = \mathrm{'02'}$ -- это примитивный элемент поля $\GF{2^8}$.
где байт $\mathsf{RC}[1] = \mathrm{'01'}$, а байты $\mathsf{RC}[i] = \alpha^{i-1}, ~ i = 2, 3, \dots$. Байт $\alpha = \mathrm{'02'}$~-- это примитивный элемент поля $\GF{2^8}$.

\example
Пусть $\mathsf{Nk} = 4$. В этом случае ключ шифра имеет длину 128 бит. Найдём столбцы расширенного ключа. Столбцы $\mathsf{W}[0], \mathsf{W}[1], \mathsf{W}[2], \mathsf{W}[3]$ непосредственно заполняются битами ключа шифра. Номер следующего столбца $\mathsf{W}[4]$ кратен $\mathsf{Nk}$, поэтому
Expand Down
6 changes: 3 additions & 3 deletions Avalanche_effect.tex
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ \subsubsection{Лавинный эффект в DES}
Пусть на входе правой части $R_i$ содержится $r$ бит, на которые уже распространилось влияние одного бита, выбранного вначале. После расширения получим
\[ n_1 \approx \min(1.5 \cdot r, 32) \]
зависимых бит. Предполагая случайные попадания в 8 $s$-блоков, мы увидим, что, согласно задаче о размещении, биты попадут в
\[ s_2 = 8 \left( 1 - \left( 1 - \frac{1}{8} \right)^{n_1} \right) \approx 8 \left( 1 - e^{-\frac{n_1}{8}} \right) \]
\[ s_2 = 8 \left( 1 - \left( 1 - \frac{1}{{8}{n_1}} \right)^{n_1} \right) \approx 8 \left( 1 - e^{-\frac{n_1}{8}} \right) \]
$s$-блоков. Одно из требований NSA к $s$-блокам заключалось в том, чтобы изменение каждого бита входа \emph{изменяло} 2 бита выхода. Мы предположим, что каждый бит входа $s$-блока \emph{влияет} на все 4 бита выхода. Зависимыми станут
\[ n_2 = 4 \cdot s_2 \approx 32 \left( 1 - e^{-\frac{n_1}{8}} \right) \]
бит. При дальнейшем XOR с величиной $L_i$, содержащей $l$ зависимых бит, результатом будет
Expand All @@ -35,7 +35,7 @@ \subsubsection{Лавинный эффект в DES}
\end{tabular}
\end{table}

В таблице~\ref{tab-DES-avalance-effect} приводится расчёт распространения 1 бита левой части. Посчитано число зависимых битов по раундам в предположении об их случайном расположении и том, что каждый бит на входе $s$-блока \emph{влияет} на все биты выхода. Полная диффузия достигается за 5 раундов, что совпадает с экспериментальной проверкой. Для достижения максимального лавинного эффекта требуется аккуратно выбрать расширение, $s$-блоки, а также перестановку в функции $F$.
В таблице~\ref{tab-DES-avalance-effect} приводится расчёт распространения 1 бита левой части. Посчитано число зависимых битов по раундам в предположении об их случайном расположении и о том, что каждый бит на входе $s$-блока \emph{влияет} на все биты выхода. Полная диффузия достигается за 5 раундов, что совпадает с экспериментальной проверкой. Для достижения максимального лавинного эффекта требуется аккуратно выбрать расширение, $s$-блоки, а также перестановку в функции $F$.


\subsubsection{Лавинный эффект в ГОСТ 28147-89}
Expand Down Expand Up @@ -71,6 +71,6 @@ \subsubsection{Лавинный эффект в AES}

В первом раунде один бит оказывает влияние на один байт в операции <<замена байт>> и затем на столбец из четырёх байт в операции <<перемешивание столбцов>>\index{лавинный эффект}.

Во втором раунде операция <<сдвиг строк>> сдвигает байты изменённого столбца на разное число байт по строкам, в результате получаем диагональное расположение изменённых байт, то есть в каждой строке присутствует по изменённому байту. Далее, в результате операции <<перемешивание столбцов>> изменение распространяется от байта в столбце на весь столбец и, следовательно, на всю матрицу.
Во втором раунде операция <<сдвиг строк>> сдвигает байты изменённого столбца на разное число байт по строкам, в результате получаем диагональное расположение изменённых байт, то есть в каждой строке присутствует по изменённому байту. Далее, в результате операции <<перемешивания столбцов>> изменение распространяется от байта в столбце на весь столбец и, следовательно, на всю матрицу.

Диффузия по входу достигается за 2 раунда.
6 changes: 3 additions & 3 deletions Block_cipher_modes.tex
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ \subsection{Электронная кодовая книга}

Шифрование в режиме электронной кодовой книги не использует сцепление блоков и синхропосылку\index{синхропосылка} (вектор инициализации)\index{вектор инициализации}. Поэтому для данного режима применима атака на различение сообщений, так как два одинаковых блока или два одинаковых открытых текста шифруются идентично.

На рис.~\ref{fig:ecb-demo} приведён пример шифрования графического файла морской звезды в формате BMP, 24 бит цветности на пиксель (рис.~\ref{fig:starfish}), блочным шифром AES с длиной ключа 128 бит в режиме электронной кодовой книги (рис.~\ref{fig:starfish-aes-128-ecb}). В начале зашифрованного файла был восстановлен стандартный заголовок формата BMP. Как видно, в зашифрованном файле изображение все равно различимо.
На рис.~\ref{fig:ecb-demo} приведён пример шифрования графического файла морской звезды в формате BMP, 24 бит цветности на пиксель (рис.~\ref{fig:starfish}), блочным шифром AES с длиной ключа 128 бит в режиме электронной кодовой книги (рис.~\ref{fig:starfish-aes-128-ecb}). В начале зашифрованного файла был восстановлен стандартный заголовок формата BMP. Как видно, в зашифрованном файле изображение всё равно различимо.
\begin{figure}[!ht]
\centering
\subfloat[Исходный рисунок]{\label{fig:starfish} \includegraphics[width=0.45\textwidth]{pic/starfish}}
Expand Down Expand Up @@ -65,7 +65,7 @@ \subsection{Сцепление блоков шифротекста}
C_1 = E_K(M_1 \oplus C_0), \\
C_j = E_K(M_j \oplus C_{j-1}), ~ j = 1, 2, \dots, n,
\end{array} \]
где $C_0 = \textrm{IV}$ -- вектор, называемый вектором инициализации (обозначение $\textrm{IV}$ от Initialization Vector). Другое название -- синхропосылка.
где $C_0 = \textrm{IV}$~--- вектор, называемый вектором инициализации (обозначение $\textrm{IV}$ от Initialization Vector). Другое название~--- синхропосылка.

Благодаря сцеплению, \emph{одинаковым} блокам открытого текста соответствуют \emph{различные} шифрованные блоки. Это затрудняет криптоаналитику статистический анализ потока шифрованных блоков.

Expand Down Expand Up @@ -130,7 +130,7 @@ \subsection{Счётчик}
K_j = E_K(\textrm{Nonce} ~\|~ j - 1), ~ j = 1, 2, \dots, n, \\
C_j = M_j \oplus K_j,
\end{array} \]
где $\textrm{Nonce} ~\|~ j - 1$ -- конкатенация битовой строки одноразовой метки $\textrm{Nonce}$ и номера блока, уменьшенного на единицу.
где $\textrm{Nonce} ~\|~ j - 1$~--- конкатенация битовой строки одноразовой метки $\textrm{Nonce}$ и номера блока, уменьшенного на единицу.
%Для стандарта AES значение $\textrm{Nonce}$ занимает 16 бит, номер блока -- 48 бит. С одним ключом выполняется шифрование $2^{48}$ блоков.

Правило расшифрования идентичное:
Expand Down
Loading

0 comments on commit ae08bb9

Please sign in to comment.