Криптономикон

22
18
20
22
24
26
28
30

Генерация букв ключевого потока

Это суть «Пасьянса». Приведенное выше описание зашифрования и расшифрования работает для любого поточного шифра с обратной связью по выходу. Дальше объясняется, как работает «Пасьянс».

«Пасьянс» генерирует ключевой поток с помощью колоды карт. Колоду в 54 листа (помните про джокеров) можно представить как 54-элементную перестановку. Существует 54! или 2,31×1071 возможных раскладов колоды. Что еще лучше, в колоде 52 листа (без джокеров), а в латинском алфавите — 26 букв. Мимо такого совпадения грех пройти.

Для «Пасьянса» в колоде должен быть полный набор из 52 карт и двух джокеров. Джокеры должны как-то отличаться. (Обычно так оно и есть. В колоде, на которую я смотрю, когда пишу, на джокерах звезды: на одном большая, на другом маленькая.) Пусть один джокер будет А, другой Б. Обычно графический элемент у джокеров одинаковый, отличается только размер. Назовите больший джокер «Б» от слова «больше». Если вам так проще, напишите на джокерах «А» и «Б», но помните, что, если вас поймают, вам придется объяснять это тайной полиции.

Для инициализации колоды возьмите ее в руку, лицом вверх. Потом разложите карты в начальной последовательности, которая представляет собой ключ. (Про ключ я объясню позже, но это не то же, что ключевой поток.) Теперь мы готовы сгенерировать цепочку букв ключевого потока.

Вот «Пасьянс»:

1. Найдите джокер А. Переложите его на одну карту вниз. (То есть поменяйте местами с картой, которая лежит сразу под ним.) Если джокер — нижняя карта в колоде, положите его под верхнюю карту.

2. Найдите джокер Б. Переложите его на две карты вниз. Если джокер — нижняя карта в колоде, положите его под две верхние карты. Если предпоследняя, положите сразу под верхнюю. (В общем, представьте, что колода — это петля… ну, поняли.)

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

Так что если колода до шага 1 выглядела так:

3 A Б 8 9

то после шага 2 она будет выглядеть:

3 A 8 Б 9

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

3. Подснимите колоду. То есть поменяйте карты над первым джокером и картами под вторым джокером. Если колода выглядела так:

2 4 6 Б 4 8 7 1 A 3 9

то после подснимания она будет выглядеть:

3 9 Б 4 8 7 1 A 2 4 6

«Первый» и «второй» джокер относятся к джокерам, которые лежат соответственно ближе и дальше от верха колоды. На этом шаге не важно, какой из них А, какой Б.

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