Криптономикон, часть 2 - Стивенсон Нил Таун (мир бесплатных книг TXT) 📗
Рэнди настолько в этом убежден, что досадует на визиты защитника. Хочется все объяснить, чтобы адвокат Алехандро бросил бесполезные трепыхания и перестал являться со все более нудными и безрадостными отчетами. Но тогда Ин, чьи люди наверняка прослушивают встречи адвоката с клиентом, поймет, что Рэнди его раскусил, а это нежелательно. Поэтому Рэнди кивает на встречах с адвокатом, а пересказывая разговор Еноху Рооту, старается выглядеть убитым и недоумевающим — просто для подстраховки.
Сейчас он, концептуально, на том же уровне, на котором был его дед, когда начинал взламывать «Аретузу». То есть у него в голове есть теория, как «Аретуза» работает. Он не знает алгоритма, но знает, к какому семейству тот принадлежит, а это сокращает пространство поиска до куда меньшего, чем прежде, числа измерений. Современному компьютеру такое число вполне по зубам. Рэнди входит в сорокавосьмичасовой программистский запой. Боль в кистях достигла той степени, когда при ударе по клавишам из пальцев практически сыплются искры. Доктор велел ему никогда больше не работать на таких неэргономичных клавиатурах. Зрение тоже садится, приходится инвертировать экранные цвета и работать с белыми буквами на черном фоне, постепенно увеличивая размер шрифта по мере того, как глаза отказываются фокусироваться. Но наконец получается штука, которая вроде бы должна работать; Рэнди запускает ее обрабатывать перехваты «Аретузы» (те лежат в памяти компьютера, но ни разу не выводились на экран) и засыпает. Когда он просыпается, то у компьютера есть для него новость: одно из сообщений, возможно, удалось расшифровать. Вернее, целых три, отправленных четвертого апреля 1945 года и, следовательно, зашифрованных одним и тем же ключевым потоком.
В отличие от живых дешифровщиков компьютер не понимает человеческих языков. Он может выдавать возможные расшифровки с невероятной скоростью, но, получив последовательности
НЕМЕДЛЕННО ПРИШЛИТЕ ПОМОЩЬ
и
XUEBP TOAFF NMQPT
не определит первую как успешную расшифровку, а вторую — как провал. Однако он может посчитать частоту встречаемости букв. Если в английском тексте буква Е стоит чаще всего, за ней идет Т и так далее, велика вероятность, что это и впрямь осмысленное послание, а не случайная белиберда. Используя анализ частоты встречаемости и некоторые более сложные методы проверки, Рэнди составил программу, которая должна неплохо распознавать успешные расшифровки. Она говорит, что сообщения от четвертого апреля 1945 года взломаны. Рэнди боится вывести их на экран — вдруг там та самая информация, которая нужна генералу Ину, — поэтому не может прочесть, несмотря на жгучее любопытство. Однако, применяя команду grep, которая ищет в текстовых файлах желаемую последовательность, он, во всяком случае, убеждается, что слово МАНИЛА встречено дважды.
На основе этих успешных расшифровок Рэнди за несколько дней взламывает «Аретузу». Другими словами, он находит A(x) = K, такую, что для любой даты x может получить K — гамму данного дня. Просто чтобы доказать это, он поручает компьютеру рассчитать К для каждого дня 1944 и 1954 годов и с их помощью раскодировать соответствующие перехваты «Аретузы» (не выводя их на экран), просчитывает частоты встречаемости и убеждается, что все работает.
Теперь он расшифровал все сообщения, но не может их прочесть, не раскрыв содержание генералу Ину. И здесь в игру вступает неявный канал передачи данных.
На жаргоне криптографов неявный канал передачи данных — это такой трюк, при котором секретная информация хитроумно прячется в потоке чего-то другого. Например, вы меняете младшие биты в графическом файле так, чтобы они несли текстовое сообщение. Рэнди почерпнул вдохновение из своей работы в тюрьме. Да, он расшифровывал «Аретузу», то есть возился с огромным количеством файлов и писал бесконечные программы. За последние недели он, вероятно, открыл, создал или отредактировал несколько тысяч файлов. Ни у одного из них нет сверху полоски с именем; ребята, которые его прослушивают, вероятно, давно запутались. Рэнди может открыть файл, напечатав название в окне и нажав «ввод» — так быстро, что вряд ли они успеют уследить. Это дает некоторую свободу маневра. В промежутках между другой работой Рэнди подготовил неявный канал передачи данных: написал несколько программ, не связанных с расшифровкой «Аретузы».
Идея пришла, когда он, перелистывая «Криптономикон», наткнулся на приложение с азбукой Морзе. Рэнди учил морзянку дважды: в бытность бойскаутом и несколько лет назад, когда получал лицензию на любительский радиопередатчик; сейчас освежить ее в памяти — пара пустяков. Такое же плевое дело — написать программку, превращающую клавишу «пробел» в телеграфный ключ, чтобы разговаривать с компьютером, выстукивая большим пальцем точки и тире. Это могло бы вызвать подозрения, если бы Рэнди половину времени не читал файлы в текстовом окне. В UNIX'е страницы перелистываются нажатием клавиши «пробел». Надо только делать это в определенном ритме, что наверняка ускользнет от внимания наблюдателей. Результаты идут в буфер, который не выводится на экран, и записываются в файл с бессмысленным именем. Скажем, притворяясь, будто читает большой раздел «Криптономикона», Рэнди может выстучать:
тире точка точка (пауза) точка тире (пауза) тире точка (пауза) тире точка точка (пауза) тире тире тире (пауза) тире точка тире
что должно читаться «БАНДОК». Он не хочет открывать результирующий файл на экране, но потом, между двумя загадочными командами, может набрать:
grep ндо (бессмысленное имя файла)] (другое бессмысленное имя файла)
и grep откроет первый файл, проверит, есть ли в нем сочетание «ндо» и занесет результат во второй файл, который Рэнди сможет посмотреть позже. Он может также ввести «grep бан» и «grep док», и в результате всех этих grep'ов убедиться, что и впрямь записал в файл слово «БАНДОК». Таким же образом он может ввести «КООРДИНАТЫ» в другой файл, «ШИРОТА» в третий и различные цифры в четвертый, пятый и так далее, а потом с помощью команды «cat» медленно объединять однословные файлы в более длинные. Терпение требуется такое же идиотское, как на то, чтобы вырыть подземный ход чайной ложкой или перепилить решетку пилочкой для ногтей.
Примерно через месяц пребывания в тюрьме он может вывести на экран окно со следующим сообщением:
КООРДИНАТЫ ОСНОВНЫХ ХРАНИЛИЩ
УЧАСТОК БАНДОК: СОРОК ДВА ГРАДУСА ТРИДЦАТЬ ДВЕ МИНУТЫ… СЕВЕРНОЙ ШИРОТЫ, НОЛЬ ДВАДЦАТЬ ГРАДУСОВ ПЯТЬДЕСЯТ ШЕСТЬ МИНУТ… ВОСТОЧНОЙ ДОЛГОТЫ
УЧАСТОК МАКАТИ: (и т.д.)
УЧАСТОК ЭЛЬДОРАДО: (и т.д.)
Все это — полная лажа, которую он только что сочинил. Координаты участка «Макати» на самом деле относятся к шикарному отелю, стоящему на перекрестке, где прежде была японская военная база. Цифры сохранились в компьютере с тех пор, как Рэнди ходил по Маниле с джи-пи-эской, собирая данные для эпифитовских антенн. Координаты участка «Эльдорадо» — местоположение золотых слитков, которые они с Дутом Шафто ездили смотреть, плюс небольшая погрешность. А для участка «Бандок» он вывел настоящие координаты Голгофы с некоторой случайной погрешностью, благодаря которой генерал Ин выкопает глубокую яму примерно в двадцати километрах от нужного места.
Как Рэнди узнал про Голгофу и откуда ему известны настоящие координаты? Все это сообщил ему компьютер точками и тире. На компьютерах есть светодиоды, вообще-то не очень нужные: один показывает, что включен NUM LOCK, другой — что CAPS LOCK, а зачем нужен третий, Рэнди даже не помнит. Исключительно из убежденности, что пользователь должен контролировать все, кто-то когда-то написал библиотечную программу под названием XLEDS, которая позволяет включать и выключать их по собственному желанию. Весь месяц Рэнди урывками писал программку, которая с помощью XLEDS выводит текстовый файл морзянкой, включая и выключая светодиод. Покуда по экрану для отвода глаз ползла всякая муть, Рэнди, сгорбившись над неявным каналом передачи данных — мигающим светодиодом, читал расшифровки «Аретузы». Одна из них гласила: