% Лекция 7 (17.10.22)
Обычно выделяют следующие этапы алгоритма:
\begin{enumerate}
  \item
    Подсчёт частот шифробозначений, а также некоторых их сочетаний
    (например, биграмм).

    Если длина текста достаточно велика, то найденные частоты окажутся
    близкими к значениям частот знаков открытого текста;
  \item
    Выявление шифробозначений, заменяющих гласные и согласные буквы.

    Основано на характерных свойствах этих букв, например, удвоение гласных в
    открытом тексте происходит реже, чем согласных.
  \item
    Выдвижение гипотез о значениях шифробозначений и их проверка.

    Восстановление истинных значений шифробозначений.

    При этом учитывается, что каждая буква имеет предпочтительных связей,
    которые составляют её наиболее характерную особенность.

    Как правило, такие гипотезы подтверждаются не полностью.

    Хорошим критерием при этом является <<читаемость>> восстанавливаемого
    открытого текста.
\end{enumerate}

Приведём описание эвристического алгоритма дешифрования, основанного на идее
Томаса Якобсена.
\begin{enumerate}
  \item
    Построить начальный вариант ключа $k$ на основе сравнения частот знаков
    криптограмм и открытого текста.
  \item
    Положить $v = f(D_k(y))$, где $f(t) = \sum_{i,j}|\Delta_{ij}(t) - b_{ij}|$
    --- <<целевая функция>>, $\Delta(t) = (\Delta_{ij}(t))_{n \times m}$ ---
    матрица биграмм данного текста $t$, $n$ --- число букв алфавита. $B =
    (b_{ij})_{n \times m}$ --- эталонная матрица биграмм открытого текста.
  \item Положить $k' = k$.
  \item
    Поменять местами в нижней строке подстановки $k'$ некоторую пару букв,
    например, $\alpha$ и $\beta$.
  \item Положить $v' = f(D_{k'}(y))$.
  \item Если $v' < v$, то положить $k = k', \, v' = v$ и перейти к 4).
  \item Перейти к шагу 3).
\end{enumerate}

Алгоритм заканчивается, когда условие $v' < v$ не выполняется в течение
некоторого числа итераций, например, 100.

Если шифр простой замены не является однобуквенным, то при вскрытии криптограммы
необходимо попытаться восстановить множество шифрвеличин.

Если задача решена, то дальнейшая работа аналогична.

\paragraph{}
Некоторые особенности вскрытия равнозначных шифров простой замены.

\begin{enumerate}
  \item
    Длины повторений фрагментов и расстояния между ними должны быть кратны
    значности шифра (\emph{значность шифра} --- количество знаков (цифр или
    букв), образующих одно шифробозначений).
  \item
    Находя НОД этих чисел с большей вероятностью получается искомая значность.
  \item
    Подсчитать общее число шифробозначений, если это число близко к ожидаемому
    числу шифробозначений (например, к числу букв алфавита), и диаграмма их
    повторяемости близка к табличной, то, скорее всего, значность определена
    верно.
\end{enumerate}

\paragraph{}
Некоторые особенность вскрытия разнозначных шифров простой замены

\begin{enumerate}
  \item
    В этом случае числа, равные длинам повторений и расстояниям между ними,
    скорее всего, взаимно просты в совокупности.

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

    Оно связано с требованием однозначности расшифрования и заключается в том,
    чтобы ни одно из шифрообозначений не являлось началом никакого другого
    шифрообозначения (в теории кодирования в подобной ситуации говорит о
    \emph{префиксном коде});
  \item
    Если значность шифрообозначений колеблется в незначительных пределах,
    то перебор сравнительно небольшого числа вариантов приводит (с учётом
    ограничения) к правильному определению большинства шифрообозначений.

    Некоторые затруднения могут возникать лишь при определении значности
    шифрообозначений, редко встречающихся в тексте.

    Как правило, эти проблемы решаются вместе с попытками прочтения тех участков
    криптограммы, для которых восстановленная значность шифрообозначений не
    вызывает сомнений.
\end{enumerate}

Увеличение значности шифрообозначений делает шифр неэкономным, поэтому получили
распространение шифры, использующие одно- и двузначные шифрообозначения.

Для таких шифров наибольшую повторяемость в шифртексте имеют цифры, с которых
начинаются двузначные шифрообозначения.

Выдвигая гипотезы о таких цифрах и отмечая в шифртексте соответствующие
двузначные шифрообозначения, можно восстановить и однозначные шифрообозначения,
оказавшиеся в шифртексте между некоторыми двузначными шифрообозначениями.

\subsubsection{(6) Блочные шифры простой замены.}

Пример --- Шифр Хилла.

Шифр Хилла --- полиграммный шифр подстановки, основанный на линейной алгебре и
модульной арифметике.

Изобретён американским математиком  Л. Хиллом в 1929 году.

Пусть мощность алфавита равна $m$. Каждой букве присваивается число, равное
порядковому номеру алфавита, последней букве --- 0 (полная система вычетов по
модулю $m$).

/ !!!ТАБЛИЦА С БУКВАМИ И ИХ НОМЕРАМИ /

Пусть открытый текст разбивается на блоки длины $n$. Шифрование осуществляется
поблочно. Пусть $\vec{x}$ --- вектор-строка длины $n$ (над кольцом
вычетов $Z_m$). Сообщение преобразуется из открытого текста заменой букв
соответствующими числами.

Рассмотрим кольцо $Z_m$. Выбирается обратимая матрица $A$ размерности $n \times
n$ над кольцом $Z_m$ и вектор-строка $\vec{a}$ размерности $n$ над $Z_m$.
Шифрование осуществляется по формуле $\vec{y} = \vec{x} A + \vec{a}$ (все
действия осуществляются по модулю $m$, то есть в кольце $Z_m$).

Ключом шифра является пара $(A, \vec{a})$. Тогда дешифрование $\vec{x} =
(\vec{y} - \vec{a}) A^{-1}$.

\begin{example}
  <<еду>> = $(6, 5, 20) = \vec{x}, m = 32, \vec{x} = (6, 5, -12)$

  Матрица $A = \begin{pmatrix}
    1 & 1 & 1 \\
    1 & 2 & 2 \\
    1 & 2 & 3
  \end{pmatrix}$

  Матрица $A^{-1} = \begin{pmatrix}
     2 & -1 &  0 \\
    -1 &  2 & -1 \\
     0 & -1 &  1
  \end{pmatrix}$

  \begin{equation*}
    \vec{a} = (1, 8, -12)
  \end{equation*}

  \begin{align*}
    \vec{y} &= \vec{x} A + \vec{a} = \\
            &= (6, 5, -12) \begin{pmatrix}
                  2 & -1 &  0 \\
                 -1 &  2 & -1 \\
                  0 & -1 &  1
               \end{pmatrix} + (1, 8, -12) = \\
            &= (-1, -8, -20) + (1, 8, -12) = \\
            &= (0, 0, 0) = \text{<<яяя>>}
  \end{align*}

  \begin{equation*}
    \vec{x} = (\vec{y} - \vec{a}) A^{-1} = (-1, -8, 12) \begin{pmatrix}
       2 & -1 &  0 \\
      -1 &  2 & -1 \\
       0 & -1 &  1
    \end{pmatrix} = (6, 5, 20) = \text{<<еду>>}
  \end{equation*}
\end{example}


Для нахождения обратимых матриц над кольцом $Z_m$ предложен следующий
практический способ:
\begin{enumerate}
  \item
    Нужно взять произвольную нижнюю треугольную матрицу над $Z_m$ с
    определителем, равным 1 (для этого достаточно положить равными 1 все
    элементы главной диагонали).
  \item Далее берётся верхняя треугольная матрица над $Z_m$ с определителем, равным 1.
  \item Перемножив эти матрица, получаем обратимую матрицу над кольцом $Z_m$.
\end{enumerate}

\begin{example}
  \begin{equation*}
    \begin{pmatrix}
      1 & 0 & 0 \\
      1 & 1 & 0 \\
      1 & 1 & 1
    \end{pmatrix} \cdot
    \begin{pmatrix}
      1 & 1 & 1 \\
      0 & 1 & 1 \\
      0 & 0 & 1
    \end{pmatrix} =
    \begin{pmatrix}
      1 & 1 & 1 \\
      1 & 2 & 2 \\
      1 & 2 & 3
    \end{pmatrix}
  \end{equation*}
\end{example}

Особенно удобно для практического применения шифра Хилла, когда матрица $A$
является \emph{инволютивной}, то есть $A^{-1} = A$. Тогда $\vec{x} = (\vec{y}
- \vec{a}) A$.

Как построить инволютивную матрицу?
\begin{enumerate}
  \item
    Пусть для заданных $m$ и $n$ имеется пара взаимнообратных матриц $A$
    и $A^{-1}$. Возьмём любую диагональную инволютивную матрицу $I$ (можно
    просто выбрать элементы главной диагонали равными 1 и -1).
  \item Тогда $A I A^{-1}$ --- инволютивная матрица.
\end{enumerate}

\begin{remark}
  К настоящему времени не найдена простая формула для подсчёта
  количества инволютивных матриц над $Z_m$.
\end{remark}

Увеличение значности шифрвеличин резко усложняет попытки вскрытия открытого
текста по известному тексту криптограмм.

Однако свойство линейности является их криптографической слабостью, например,
задача нахождения ключа является не слишком трудоёмкой, если известны $n + 1$
пар блоков открытого текста и соответствующих их блоков шифртекста, полученные
на данном ключе.
