From b57eb3b8db24a95d1d908bd5de4d2e1b5988c26a Mon Sep 17 00:00:00 2001
From: Andrew Guschin <guschin.drew@gmail.com>
Date: Tue, 13 Dec 2022 22:25:36 +0400
Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B?=
 =?UTF-8?q?=20=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8=2014=20=D0=B8=2015?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cryptography/lectures/lecture15.tex | 211 ++++++++++++++++++++++++++++++++++++
 1 file changed, 211 insertions(+)
 create mode 100644 cryptography/lectures/lecture15.tex

(limited to 'cryptography/lectures/lecture15.tex')

diff --git a/cryptography/lectures/lecture15.tex b/cryptography/lectures/lecture15.tex
new file mode 100644
index 0000000..f7c93bf
--- /dev/null
+++ b/cryptography/lectures/lecture15.tex
@@ -0,0 +1,211 @@
+% Лекция 15 (12.12.22)
+
+\subsection{Поточная шифрсистема RC4}
+
+RC4 представляет собой поточный шифр с переменной длиной ключа.
+
+Алгоритм разработан в 1987 году Р. Ривестом для компнии RSA Data Security
+
+Алгоритм работает в режиме обратной связи по выходу. Ключевая последовательность
+не зависит от исходного текста. Структура алгоритма включает блок замены
+размерностью $8 \times 8 : S_0, \dots, S_{255}$.
+
+Блок замены представляет собой зависимую от ключа переменной длины перестановку
+чисел $0, \dots, 255$.
+
+Имеется два счётчика $i$ и $j$, первоначально равные 0.
+
+Для генерирования псевдослучайного байта выполняются следующие действия
+\begin{align*}
+  i &= (i + 1) \pmod{256} \\
+  j &= (j + S_i) \pmod{256} \\
+    &\text{переставить } S_i \text{ и } S_j \\
+  t &= (S_i + S_j) \pmod{256} \\
+  k &= S_i \\
+\end{align*}
+
+Затем байт $k$ складывается по модулю 2 с байтом исходного текста для получения
+криптограммы.
+
+Блок замены инициализируется следующим образом. Сначала он заполняется линейно:
+$S_0 = 0, S_1 = 1, \dots S_{255} = 255$.
+
+Затем заполняется ещё один 256-байтовый массив ключом, при этом ключ может
+повторяться необходимое число раз для заполнения всего массива $k_0, \dots,
+k_{255}$.
+
+Счётчик $j$ устанавливается в 0. После этого производятся следующие действия:
+% TODO: оформить алгоритм
+for i = 0 to 255
+  j = (j + k_i + S_i) \pmod{256}
+  переставить $S_i$ и $S_j$.
+
+
+\subsection{Методы анализа поточных шифров}
+
+Некоторые методы анализа поточных шифров на примере шифров гаммирования:
+\begin{itemize}
+  \item Исследование вероятностных характеристик гаммы;
+  \item
+    Попытки линеаризации уравнений гаммообразования, то есть сведения задачи
+    нахождения ключей криптографических алгоритмов к решению некоторой системы
+    линейных уравнений;
+  \item
+    Применение методов анализа, основанные на наличии у функции усложнения
+    хороших приближений в классе линейных функций;
+  \item
+    Необходимо учитывать наличие между знаками гаммы зависимостей комбинаторного
+    характера.
+\end{itemize}
+
+
+\section{Блочные шифрсистемы}
+
+\emph{Блочный шифр} --- шифр, в котором открытый текст перед шифрованием
+разбивается на блоки, состояние из нескольких знаков, то есть исходное
+сообщение обрабатывается блоками.
+
+\subsection{Принципы построения}
+
+Как правило, алфавитом, на котором действует блочный шифр, является множество
+двоичных векторов-блоков открытого текста одинаковой длины (64, 128 и т. д.).
+
+К. Шеннон сформулировал общий принцип построения шифрующих преобразований ---
+принцип \emph{<<перемшивания>>}.
+
+Суть его состоит в требовании, чтобы применение шифрующего преобразования к
+наборам аргументов, отличающихся в незначительном числе позиций, приводило к
+существенному изменению результата.
+
+Обеспечить выполнение данного требования в сочетании с простотой реализации
+конкретного отображения в общем случае представляется затруднительным.
+
+Поэтому К. Шеннон предложил реализовывать сложные преобразования в виде
+суперпозиции нескольких простых некоммутирующих отображений, что используется
+при построении блочных шифров.
+
+Блочные шифры реализуются путём многократного применения к блокам открытого
+текста некоторых базовых преобразований.
+
+Обычно используются базовые преобразования двух типов:
+\begin{enumerate}
+  \item
+    <<Перемешивающие>> --- сложные в криптографическом отношении локальные
+    преобразования над отдельными частями шифруемых блоков.
+
+    Перемешивание усложняет восстановление взаимосвязи статистических 
+    аналитических свойств открытого текста и криптограммы;
+  \item
+    <<Рассеивающие>> --- простые преобразования, переставляющие между собой
+    части шифруемых блоков.
+
+    Рассеивание распространяет влияние одного знака открытого текста на большое
+    число знаков криптограммы, что позволяет сгладить влияние статистических
+    свойств открытого текста на свойства криптограммы.
+\end{enumerate} 
+
+Алгоритм шифрования выполняет некоторое число циклов (итераций). Каждый цикл в
+применении преобразований первого и второго типов.
+
+Такой принцип построения даёт возможность реализовать каждый цикл шифрования с
+использованием однотипных узлов, а также выполнять расшифрование путём обработки
+данных в обратном направлении.
+
+Удобной моделью для реализации базовых преобразований служат \emph{регистры
+сдвига}. При этом рассеивающие преобразования определяются функциями обратной
+связи, а перемешивающие --- сдвигами информации в регистре.
+
+
+\subsection{Структура алгоритмов}
+
+\paragraph{Сеть Фейстеля.}
+
+Для построения алгоритмов часто используется \emph{Сеть Фейстеля} (см. рисунок).
+
+% TODO: Рисунок 1 (везде индексы i)
+
+Преобразование, реализуемое сетью Фейстеля в $i$-м цикле шифрования имеет вид
+\begin{equation*}
+  \begin{cases}
+    Y_1 = X_2 \\
+    Y_2 = X_1 \oplus f_i(X_2, k_i)
+  \end{cases}
+\end{equation*}
+где $X$ --- входной блок, разделённый на две половины $X_1$ и $X_2$, а $(Y_1,
+Y_2)$ --- результат зашифрования блока $X$ на ключе $k_i$ с помощью функции
+$f_i$.
+
+Алгоритм шифрования реализуется несколькими итерациями преобразования сети
+Фейстеля с использованием ключа $k$.
+
+При этом очередная $i$-я итерация использует в качестве входного блока $X$
+результат предыдущей итерации и ключ $k_i$, вычисляемый определённым образом
+по ключу $k$.
+
+Функция $f_i$ может зависеть или не зависеть от номера итерации.
+
+Даже если $f_i$ не является обратимой функцией, преобразование сети Фейстеля
+обратимо:
+\begin{equation*}
+  \begin{cases}
+    X_1 = Y_2 \oplus f_i(Y_1, k_i) \\
+    X_2 = Y_1
+  \end{cases}
+\end{equation*}
+
+На сети Фейстеля основаны, например, алгоритмы шифрования DES, ГОСТ 28147-89,
+RC5.
+
+\paragraph{SP-сети.}
+
+В отличие от сети Фейстеля, SP-сети (Substitution-Permutation network,
+подстановочно-перестановочная сеть) обрабатывает за один раунд целиком
+шифруемый блок.
+
+Обработка данных сводится в основном к заменам и перестановкам зависящим от
+ключа $k_i$ (см. рисунок).
+
+% TODO: Рисунок 2
+
+SP-сети являются гораздо менее распространёнными, чем сети Фейстеля. На их базе,
+например, основаны алгоритмы шифрования Serpent, SAFER+.
+
+
+\subsection{S-блоки}
+
+Операторы подстановки в блочных шифрах называются S-боксами (блок подстановки,
+узлы замены).
+
+На вход в S-бокса подаётся $n$-битовый блок, а на выходе --- $m$-битовый блок,
+где $m$ может быть отлично от $n$.
+
+Пусть в S-боксе $x_1, x_2, \dots, x_n$ --- входы, $y_1, y_2, \dots, y_m$ ---
+выходы, тогда связь между ними задаёт система уравнений:
+\begin{equation*}
+  \begin{cases}
+    y_1 = f_1(x_1, x_2, \dots, x_n) \\
+    y_2 = f_2(x_1, x_2, \dots, x_n) \\
+    \dots \\
+    y_m = f_m(x_1, x_2, \dots, x_n) \\
+  \end{cases}
+\end{equation*}
+
+S-боксы делятся на линейные и нелинейные. В линейном S-боксе эту связь можно
+записать в виде линейных соотношений:
+\begin{equation*}
+  \begin{cases}
+    y_1 = a_{11} x_1 \oplus a_{12} x_2 \oplus \dots \oplus a_{1n} x_n \\
+    y_2 = a_{21} x_1 \oplus a_{22} x_2 \oplus \dots \oplus a_{2n} x_n \\
+    \dots \\
+    y_m = a_{m1} x_1 \oplus a_{m2} x_2 \oplus \dots \oplus a_{mn} x_n \\
+  \end{cases}
+\end{equation*}
+
+В нелинейном S-боксе нельзя задать линейные соотношения для каждого выхода.
+
+Пример S-бокса представлен на рисунке, где первый бит входа определяет строку,
+два следующих бита входа определяют столбец.
+
+Два бита на выходе --- это значение на пересечении выбранных строки и столбца.
+
+% TODO: Рисунок 3
-- 
cgit v1.2.3

