summaryrefslogtreecommitdiff
path: root/cryptography/lectures/lecture7.tex
blob: ae00dbe5da4536fa3147dc80094cfd7d789e65aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
% Лекция 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$
пар блоков открытого текста и соответствующих их блоков шифртекста, полученные
на данном ключе.