2 @unnumbered Пасьянс (шифр Solitaire)
4 @url{https://www.schneier.com/solitaire.html, Алгоритм Solitaire}
5 (пасьянс) изобретён @url{https://www.schneier.com/, Брюсом Шнайером}
6 специально по запросу Нила Стивенсона для его книги "Криптономикон". Его
7 вопросом было изобретение возможности обмена зашифрованными сообщениями
8 в тяжелейших условиях, когда невозможно пользоваться какими-либо
9 подручными средствами в виде электроники или других компрометирующих
10 устройств, не вызывая подозрений.
12 Шнайер придумал как для этого можно использовать обычную игральную
13 колоду карт. Очень доступная и дешёвая вещь, которая не привлечёт
14 особого внимания полицию.
16 Сама по себе колода используется как генератор псевдослучайных чисел,
17 вывод которого необходимо сложить по модулю 26 с цифровыми значениями
18 букв алфавита. Алгоритм очень легко запоминается, прост,
19 криптографически достаточно стоек, можно без проблем выполнить и на
22 Использоваться должна полная колода карт: 4 масти по 13 карт каждой и
23 два различимых джокера. Интересный и очень полезный факт
24 @verb{|2 * 13 = 26|}: столько же, сколько и букв в латинском алфавите.
26 Всего колода (ключ) может иметь
27 @verb{|((4 * 13) + 2)! = 54! ~ 2.31 * 10^71|} значений.
29 @strong{Шифрование/дешифрование}
33 Уберите @strong{все} знаки пунктуации. Их можно заменить буквенными
34 эквивалентами. Все буквы переведите в один регистр.
36 Переведите буквы в их численное представление: @verb{|A=1, B=2, ..., Z=26|}
38 Сгенерируйте последовательность псевдослучайных чисел по алгоритму
39 Solitaire. Длина должна быть равна длине открытого текста.
41 Поочерёдно сложите каждое числовое представление буквы открытого текста
42 с этой случайной последовательностью по модулю 26.
44 Преобразуйте получившиеся числа в буквенное представление: получите
47 Для дешифрования необходимо проделать всё то же самое, только вместо
48 сложения, использовать вычитание случайной последовательности из
54 Мы хотим зашифровать сообщение @verb{|DO NOT USE PC|}. В криптографии
55 любят разбивать сообщения на группы по пять символов:
61 Преобразуем в численный вид:
64 4 15 14 15 20 21 19 5 16 3
67 Используйте Solitaire для генерирования ключевой последовательности
68 (случайной последовательности, зависящей от ключа). Предположим что мы
75 Преобразуем в численный вид:
78 11 4 23 21 16 15 14 15 23 20
81 Сложим их по модулю 26 (если сумма больше 26, то тогда необходимо
82 вычесть 26 из результата (1 + 1 = 2, 26 + 1= 27 - 26 = 1):
85 15 19 11 10 10 10 7 20 13 23
88 Преобразуем этот шифротекст в буквенное представление:
94 Это сообщение можно передать собеседнику. Собеседник использует
95 Solitaire для получения ключевой последовательности. Если все правила её
96 генерирования совпадают, то его последовательность тоже получится
99 Ему необходимо преобразовать шифротекст в численное представление и
100 вычесть из него числа ключевой последовательности по модулю 26 (то есть,
101 если первое число больше или равно второму, то добавьте к первому 26
102 (22 - 21=21, 1 - 22=5)):
105 4 15 14 15 20 21 19 5 16
108 Преобразуйте получившуюся последовательность в буквенное представление:
114 @strong{Генерирование случайных чисел}
116 Каждая карта имеет своё собственно число. От 1 (туз) до 13 (король), от
117 14 до 26, итд. Сначала одна масть, затем другая, итд. Необходимо
118 условиться какой порядок мастей будет идти. Разницы никакой -- главное
119 чтобы обе стороны договорились об этом. Шнайер предлагает правила
120 бриджа: трефы (♣), бубны (♦), черви (♥), пики (♠).
122 Также джокеры необходимо отличать друг от друга. Условимся и назовём
123 одного джокера как A, а другого как B.
125 Для удобства колоду лучше иметь не перемешанную. Сначала туз треф, потом
126 двойка треф,..., король треф, туз бубен,..., король пик, джокер A,
129 Чтобы получить одну букву "вывода" из Solitaire проделайте следующее:
132 @item Найдите джокера A. Переместите на одну карту вниз. То есть,
133 поменяйте местами с картой под ним. Если он внизу колоды, то поместите
136 @item Найдите джокера B. Переместите на две карты вниз. Если он внизу
137 колоды, то значит его необходимо поместить под первую карту сверху.
138 Колода это зацикленная структура. Если колода до первого пункта была
145 то, после второго пункта она должна быть такой:
163 @item Сделайте тройной отрез (triple cut). То есть, обменяйте карты над
164 верхним джокером и под нижним.
166 Если колода была такая:
169 2 4 6 B 5 8 7 1 A 3 9
175 3 9 B 5 8 7 1 A 2 4 6
178 Помните, что джокеры и карты между ними места не меняют.
180 Если колода была такой:
198 то на этом шаге не изменится.
200 @item Сделайте отрез с отсчётом (count cut). Посмотрите на нижнюю карту.
201 Преобразуйте в число от 1 до 53. (если ♣, то число показано на карте;
202 если ♦, то значение @verb{|+13|}; если джокер, то значение @verb{|= 53|}).
203 Отсчитайте от верхней карты такое количество карт и поместите их над
206 Если колода была такая:
209 7...cards...4 5...cards...8 9
212 а @verb{|4|} является девятой картой, то колода станет такой:
215 5...cards...8 7...cards...4 9
218 Если нижней картой является джокер, то колода останется неизменной.
220 @item Найдите выходную карту (output card). Посмотрите на верхнюю карту.
221 Преобразуйте в число то 1 до 53. Отсчитайте столько же карт (верхняя
222 карта является первой). Запишите/запомните карту до которой дошёл счёт.
224 @item Преобразуйте карту (числовое значение) в буквенное представление.
225 Так как в алфавите 26 букв, то трефы (♣) от 1-13, бубны (♦) от 14-26,
226 черви (♥) от 1-13, пики (♠) от 14-26.
229 Для получение следующего символа ключевой последовательности просто
232 @strong{Начальное состояние колоды}
234 Начальное состояние колоды перед генерирование ключевой
235 последовательности является, по сути, ключом шифрования. Стойкость
236 алгоритма основана полностью на стойкости (качестве) ключа. Алгоритм
237 может быть известен любой полиции, но вся сила заключена в ключе.
238 Как это применимо и к любому другому серьёзному "боевому" алгоритму.
239 @strong{Ключевание} колоды -- самая ответственная часть.
243 В идеале лучше иметь две идентичные как можно более случайно
244 перемешанные колоды. Одна идёт отправителю, а другая получателю
245 сообщений. Но полиция может найти колоды -- это опасно.
247 Использовать сторонний независимый источник и правила перемешивания
248 колоды относительно его. Например газеты или журналы.
250 Использовать парольную фразу для ключевания колоды. Просто используйте
251 алгоритм Solitaire, только вместо пятого шага (output card) произведите
252 ещё один отрез с отсчётом (count cut) -- то есть ещё один четвёртый шаг
253 повторно, только в качестве числа отсчёта используйте символ из
254 парольной фразы. И так повторяйте для каждого символа парольной фразы.
257 @strong{Пример использования}
259 Первый выходной символ:
287 @item пятый шаг производит выходной символ, так как наверху 2, то
288 отсчитайте до 4 -- это и есть выход.
291 Второй выходной символ:
296 2 3 4 ... 49 50 51 52 B A 1
301 2 3 4 ... 49 50 51 52 A 1 B
306 A 1 B 2 3 4 ... 49 50 51 52
311 51 A 1 B 2 3 4 ... 49 50 52
315 Пятый шаг производит выход. Наверху карта 51, отсчёт 51-ой карты
320 @strong{Заметки по применению}
323 @item @strong{Никогда} не используйте один и тот же ключ для шифрования
324 двух различных сообщений.
325 @item Шифруйте достаточно короткие сообщения, не более нескольких тысяч
327 @item Как и все потоковые шифры, одна ошибка приводит к сбою всего
328 алгоритма и дешифровать сообщение уже не получится. Желательно всегда
329 дважды зашифровать сообщение, чтобы убедиться в отсутствии ошибок.
330 @item Весь процесс Solitaire может быть обращён. Если вы оставите хотя
331 бы что-то (записи, какую-то часть колоды), то полиция может обратить
332 весь процесс шифрования.
333 @item Пытайтесь всё делать в своей голове, иметь как можно меньше
334 записей. Если полиция врывается, то перемешайте колоду. Если на бумаге
335 вы имеет записи, то лучше всего сжечь их. Папиросная бумага может быть