Криптономикон, часть 2, стр. 130

Началу предшествуют молитвы. Ави привез раввина из Израиля, Енох Роот пригласил архиепископа Манилы, Гото Денго притащил какого-то синтоистского настоятеля, и вдобавок приехала уйма представителей из других стран Юго-Восточной Азии. Все они молятся или поют, хотя молитвы практически тонут в реве вертолетов. Слишком многие не желают трогать Голгофу, и Рэнди чувствует, что, по сути, они правы. Но он «прозвучил» акустическим томографом туннель Ина, щупальце пустоты, тянущееся к хранилищу, опубликовал трехмерные карты и аргументирование — как ему кажется — заявил, что гораздо лучше сделать что-нибудь конструктивное, чем просто позволить Ину ограбить сокровищницу. Некоторые согласились с доводами, некоторые нет, однако никто из несогласных не попал на обложки «Тайм» и «Ньюсуик».

Последним берет слово Дуг Шафто. Он снимает бейсбольную кепку и, прижав ее к сердцу, со слезами на глазах начинает рассказывать что-то о своем отце, которого едва помнит. Говорит о битве за Манилу, как впервые увидел отца на развалинах церкви святого Августина, как тот носил его на руках по ступенькам перед тем, как обрушить адский огонь на головы японцев. Говорит о прощении и других отвлеченных понятиях; слова приглушены шумом вертолетов, но Рэнди кажется, что это только придает им выразительности, потому что слова — это обрывки воспоминаний, таких же невнятных и приглушенных.

Наконец Дуг жмет на кнопку.

За несколько минут насосы нагнетают в Голгофу горючую смесь. Дуг жмет на другую кнопку. В глубине горы раздается приглушенный взрыв. Затем мир содрогается и ревет; рев переходит в вибрирующий вой. Из дренажного отверстия внизу вырывается столб белого пламени и зарывается в реку, в том месте, где встретил смерть Эндрю Лоуб. Встает облако пара; вертолеты взмывают ввысь. Рэнди съеживается на берегу под покровом облака, чувствуя, что это последняя в его жизни возможность побыть одному.

Через полчаса вместе с горящим газом выплескивается раскаленный поток. Шипя и поднимая пар, он оседает на дно реки. Долгое время не видно ничего, кроме белых облаков, но через час или два под водой и вокруг камня, на котором примостился Рэнди, проявляется, растекаясь по дну, блестящая, широкая река золота.

Приложение

ПАСЬЯНС ШИФРОВАЛЬНЫЙ АЛГОРИТМ

Брюс Шнайер,
автор «Прикладной криптографии»
Президент «Каунтерпейн системс»
http://www.counterpane.com

В романе Нила Стивенсона «Криптономикон» персонаж по имени Енох Роот описывает персонажу по имени Рэнди Уотерхауз криптосистему под кодовым названием «Понтифик», а после сообщает, что алгоритм реализуется при помощи колоды карт. Дальше герои обмениваются несколькими сообщениями, зашифрованными этим способом. Систему «Пасьянс» (в романе она выступает под кодовым названием «Понтифик», дабы до поры до времени скрыть, что в ней используется карточная колода) я придумал, чтобы агенты на местах могли выходить на связь, не полагаясь на электронику и не имея при себе компрометирующих инструментов. Агент может оказаться в ситуации, где у него просто не будет доступа к компьютеру, или пострадать, если при нем обнаружат средства секретной связи. А колода карт… что может быть безобиднее?

Стойкость «Пасьянса» основана на случайности перетасованной колоды. Манипулируя ею, коммуникант способен создать цепочку «случайных» букв, которые потом комбинируются с сообщением. Разумеется, «Пасьянс» можно воспроизвести на компьютере, но создан он для использования вручную.

Хоть «Пасьянс» и низкотехнологичен, надежность в него заложена высокотехнологическая. Я создавал его в расчете на самого богатого военного противника, обладающего самыми большими компьютерами и самыми толковыми криптоаналитиками. Конечно, не исключено, что кто-то найдет способ взломать «Пасьянс» (ищите обновления на моей веб-странице), но алгоритм несомненно лучше, чем все другие способы шифрования с помощью карандаша и бумаги, которые я видел.

Правда, это не быстро. Чтобы зашифровать или расшифровать более или менее длинное сообщение, нужен вечер. В книге «Кан о кодах» Дэвид Кан описывает подлинный метод шифрования с помощью карандаша и бумаги, которым пользовался советский шпион. На шифровку с помощью советского алгоритма и с помощью «Пасьянса» требуется примерно равное время.

ШИФРОВАНИЕ С ПОМОЩЬЮ «ПАСЬЯНСА»

«Пасьянс» — поточный шифр с обратной связью по выходу. Иногда это называется генератор гаммы. Основная идея в том, что «Пасьянс» генерирует шифрующий поток из чисел от 1 до 26. Для шифрования сгенерируйте столько же букв ключевого потока, сколько содержит открытый текст. Потом суммируйте их по модулю 26, одну за другой, с буквами открытого текста. Для расшифрования сгенерируйте тот же ключевой поток и вычитайте по модулю 26 из шифртекста, чтобы получить открытый текст.

Для примера зашифруем первое сообщение из романа Стивенсона, «DO NOT USE PC»:

1. Разбейте сообщение открытого текста на группы по пять букв. (Ничего такого магического в цифре 5 нет, это просто традиция.) Последнюю группу дополните буквами «X». Тогда если сообщение «DO NOT USE PC», то открытый текст:

DONOT USEPC

2. С помощью «Пасьянса» сгенерируйте десять букв шифрующего потока. (Подробности дальше.) Предположим, это:

KDWUP ONOWT

3. Переведите открытый текст из букв в числа: А = 1, В = 2, и так далее:

4 15 14 15 20 21 19 5 16 3

4. Точно так же переведите в числа ключевой поток:

11 4 23 21 16 15 14 15 23 20

5. Сложите числа открытого текста с числами ключевого потока по модулю 26. (То есть если сумма превышает 26, вычтите из результата 26.) Например, 1 + 1 = 2, 26 + 1 = 27, а 27 — 26 = 1, так что 26 + 1 = 1.

15 19 11 10 10 10 7 20 13 23

6. Переведите числа обратно в буквы.

OSKJJ JGTMW

Когда натренируетесь, сможете складывать буквы в уме, не переводя их в числа. Тут надо просто привыкнуть. Легко запомнить A + A = B; труднее, что T + Q = K.

РАСШИФРОВКА С ПОМОЩЬЮ «ПАСЬЯНСА»

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

1. Возьмите шифртекст и разбейте его на группы из пяти букв. (Он уже должен быть в таком виде.)

OSKJJ JGTMW

2. С помощью «Пасьянса» сгенерируйте десять букв ключевого потока. Если получатель использует тот же ключ, что и отправитель, буквы должны получиться те же:

KDWUP ONOWT

3. Переведите шифртекст из букв в цифры:

15 19 11 10 10 10 7 20 13 23

4. Переведите ключевой поток аналогичным образом:

11 4 23 21 16 15 14 15 23 20

5. Вычтите числа ключевого потока из чисел шифртекста по модулю 26. Например, 22 — 1 = 20, 1 — 22 = 5. (Это легко. Если первое число меньше второго, перед вычитанием прибавьте к нему 26. Тогда 1 — 22 = ? станет 27 — 22 = 5.)

4 15 14 15 20 21 19 5 16 3

6. Переведите числа обратно в буквы.

DONOT USEPC

Расшифрование происходит так же, как зашифрование, только вы вычитаете ключевой поток из шифртекста.

ГЕНЕРАЦИЯ БУКВ КЛЮЧЕВОГО ПОТОКА

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

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