Точка уязвимости
Глава 1
26 мая 2043 года, город Москва
– Екатерина, будьте добры, поясните вот этот график, – прозвучал голос из полумрака. Председатель комиссии, седой профессор Ветров, указал лазерной указкой на заинтересовавшую его часть кривой. – Почему у вас пик аномалии приходится именно на эти семнадцать сотых микросекунды после коллапса волновой функции?
Я отпила немного воды из стакана и облизала пересохшие губы. Моя защита диплома шла не в привычной аудитории с доской и мелом, а здесь, в Центре квантовых технологий МГУ. Прямо за стеклом, занимая добрую половину лаборатории, стоял 96-кубитный квантовый вычислитель на одиночных нейтральных атомах рубидия, построенный ещё в 2030 году. Стеклянная колба, лазерные пинцеты, вакуумные камеры и медная оплётка криостата делали машину похожей на космический аппарат, который по ошибке припарковали в подвале университета.
– Это момент, когда модель выдаёт смещение в пользу одного из классов, – ответила я и шагнула ближе к экрану, где выводились гистограммы распределения скрытых весов нейросети. – Квантовый алгоритм Гровера позволяет мне увеличивать амплитуду этого конкретного состояния. Смотрите, если подать на вход вот эту последовательность, декодер модели, тот самый, что отвечает за логический вывод, начинает «подсуживать» определённому токену. Вот здесь, видите? Даже после дообучения нейросети смещение никуда не исчезает.
Некоторые члены комиссии начали негромко обсуждать мой ответ. Кто-то из доцентов скептически хмыкнул. Но я смотрела не на них, а с интересом рассматривала человека, сидевшего с краю стола комиссии. На факультете я его видела впервые. Мужчина лет пятидесяти, среднестатистическое лицо, серый костюм, закрытая папка без надписей. За всё время защиты он не проронил ни слова и лишь изредка делал пометки в блокноте. Но судя по тому, как декан изредка кидал на него странные взгляды – это был далеко не самый простой человек.
– И что же, Соколова, вы утверждаете, что любая современная нейросеть содержит подобные «чёрные ходы»? – спросил Ветров.
– Не уверена, что любая, – я поправила очки, которые так и норовили съехать с носа. – Но я взяла три опенсорсных модели, прогнала их через квантово-усиленную атаку и в чистом виде, и после дообучения на корпусе данных. И в том, и в том случае искомое смещение сохранилось. Его можно обнаружить только с помощью квантового алгоритма, классический анализ бессилен. Иными словами, существует аргументированное подозрение, что разработчики оставили себе ключ от задней двери своих нейросетей, которую невозможно заколотить обычными средствами.
Человек в штатском перевернул страницу блокнота и впервые за всё время поднял глаза.
– Интересно, – сказал он негромко и это было единственное слово, которое все услышали от него до конца защиты.
Комиссия совещалась недолго. «Отлично», – объявил Ветров. Кто-то, проходя мимо, похлопал меня по плечу, научный руководитель сунул в руки букет мелких белых кустовых роз, а декан факультета даже пожал мне руку.
– Соколова, зайдите ко мне через час, – сказал он, разворачиваясь к выходу из аудитории. – С вами хочет поговорить один человек.
***
Час спустя я сидела в кабинете декана факультета искусственного интеллекта. Кабинет был большой, с видом из окон на Ленинские горы, а напротив меня, в кресле хозяина кабинета, расположился тот самый человек в штатском. Сам же декан стоял у окна, делая вид, что его здесь нет.
– Поздравляю с защитой, Екатерина Андреевна, – сказал человек в сером костюме. – Давайте я сначала представлюсь. Полковник Невзоров.
– Спасибо огромное, приятно познакомиться, – ответила я чуть смущённо, но с интересом ожидая продолжения.
– Скажите, Вам знаком термин «гибридная квантовая система»? – спросил он без предисловий.
Я кивнула.
– Читала об этом. По своей сути это концепция работы квантового компьютера, где разные типы кубитов работают вместе.
– В общих чертах, верно, – Невзоров откинулся в кресле. – Теперь представьте себе сверхпроводниковый кластер на десятки тысяч кубитов, ионные модули на кальции и иттербии на несколько сотен кубитов, и всё это работает параллельно. Модульный квантовый компьютер, где две концепции кубитов объединены в единый гибридный вычислительный комплекс под управлением адаптивного программного слоя. Как вам такая архитектура?
Я молчала, быстро прикидывая в уме сложность подобной системы. Тысячи сверхпроводниковых кубитов – это даже не уровень передовых лабораторий мира, а что-то совсем запредельное. Хотя что может быть выше? Ионные ловушки – совершенно другая технология, более стабильная, но медленная. С инженерной точки зрения, объединить их в один организм – задача, сравнимая по сложности с постройкой орбитальной станции.
– Это же кошмар для коррекции ошибок, – вырвалось у меня. – У каждого типа кубитов свой профиль шума. Сверхпроводники страдают от декогеренции и перекрёстных помех, ионы – от флуктуаций магнитного поля и лазерной накачки. Чтобы написать единый декодер для такой системы…
– Именно, – вклинился в мою паузу Невзоров. – Но несмотря на все проблемы, такой квантовый компьютер существует. Правильнее тут, наверное, называть это чудо не компьютером, а суперкомпьютером и называется это произведение инженерной мысли – «Йод». И нам нужны люди, способные не только им пользоваться, но и понимать, что именно происходит внутри.
Невзоров вынул из своей папки лист бумаги и положил его передо мной.
– Екатерина, предлагаю вам контракт на пять лет. Получите допуск высшей категории. Работать предстоит в специализированном вычислительном центре. Где он находится, я вам пока не скажу, но ориентировочно за Уральским хребтом. Переезд на место службы будет за наш счёт, служебное жильё тоже. Из минусов… выезд за границу только с санкции руководства, личные средства связи придётся сменить на служебные. Из плюсов… зарплата в три раза выше рыночной и некоторые другие плюшки, но о них расскажут уже на месте.
Я смотрела на этот лист с контрактом и мысли носились в голове, как электроны в большом адронном коллайдере.
– А если я откажусь?
Невзоров пожал плечами.
– Ваше право, с вашим дипломом вы легко устроитесь работать, куда-нибудь в крупный банк или крупную IT-корпорацию. Будете писать скоринговые модели для кредитных карт или улучшать рекомендательные системы. Там тоже платят неплохо, но технологически до «Йода» им, как пешком до Луны.
Он знал, на что давить. Я не для того пять лет грызла квантовую физику и криптографию, чтобы потом предсказывать, вернёт ли гражданин «Н» потребительский кредит или какой фильм ему посоветовать.
– Хорошо. Я согласна. Когда надо будет выезжать и как добираться?
Впервые за весь разговор Невзоров улыбнулся.
– Завтра в семь утра машина будет ждать у общежития.
Он поднялся, собираясь уходить, но вдруг остановился у двери и обернулся. Немного порывшись во внутреннем кармане пиджака, Невзоров достал простую картонную визитку без логотипов, только номер телефона и то написанный от руки.
– Возьмите, Екатерина Андреевна. Это мой служебный номер сотового, который работает круглосуточно. – Он помедлил, глядя мне прямо в глаза. – Если увидите или почувствуете что-то... неправильное. Что-то, что не укладывается в голове... Даже если будете сомневаться, стоит ли меня из-за такого пустяка. Звоните сразу.
Я взяла в руки его простенькую визитку.
– Я думала, у меня там будет начальник… ну-у-у… лаборатории что ли, руководитель группы...
– Всё это будет, не переживайте. И они действительно хорошие специалисты. – Невзоров снова замолчал, подбирая слова. – Но я хочу, чтобы вы знали. У меня есть основания полагать, что с «Йодом» не всё чисто. Конкретных доказательств пока нет, а возможно, их и не будет. Однако чутьё мне подсказывает, что происходит что-то, чего не видят те, кто работает с системой каждый день. И поэтому мне нужен свежий взгляд, потому что он иногда замечает то, что ускользает от уставшего и замыленного взора.
– Вы поэтому пришли на мою защиту? Искали свежий незамыленный взгляд?
– Отчасти. Чтоб вы понимали, мне по большей части нужны не исполнители, а люди, умеющие видеть тени на стенах Платоновой пещеры. Но конкретно в вашем случае главное другое – я почему-то верю в вас, Екатерина. У вас редкое сочетание академической подготовки и способности видеть и анализировать скрытое.
***
Городок не имел названия, только номер «почтового ящика». И по факту маскировался он под обычную воинскую часть, которых множество разбросано по территории нашей страны. Три КПП, бетонный забор с колючей проволокой и регулярные вооружённые патрули вдоль границ. Внутри из достопримечательностей только памятник Ленину и неработающий фонтан. Но главное в этом богом забытом месте скрывалось под землёй. Там, на глубине пятидесяти метров располагался главный вычислительный зал, где в специальных криогенных камерах жил своей квантовой жизнью «Йод».
Меня поселили в уже немолодой пятиэтажке на территории части. Выделили двухкомнатную квартиру на третьем этаже. Лифт, естественно, отсутствовал, но вся мебель была уже установлена и как мне сказали, что, если понадобится поднять или спустить что-то тяжелое – всегда можно обратиться к коменданту и он выделит молодых ребят из служивых. Мебель была казённая, времён расцвета СССР, но чистая и не вызывала никакого отторжения. На кухне даже нашлась турка для кофе, видимо осталась от предыдущего жильца. В первый же день меня провели по всем корпусам и показали, чем именно предстоит заниматься и где работать, а также представили непосредственному начальнику.
– Добро пожаловать в группу криптоанализа, Екатерина Андреевна, – поприветствовал меня невысокий лысоватый мужчина в синем халате. – Меня зовут Игорь Петрович, я начальник группы, а теперь и Ваш непосредственный начальник. А это Семён, Вадик и Лена, – кивнул он в сторону других сотрудников.
Помещение, куда я попала, напоминало командный центр из фантастического фильма. Это был огромный зал, на стенах которого висели десятки мониторов. Они были закреплены группами по несколько штук, видимо, по типу отображаемой информации. А в центре, перед полукруглым столом с несколькими рабочими местами, висел огромный экран, состоящий из нескольких десятков видео-панелей, сложенных в одно гигантское полотно. На нём отображалась трёхмерная картинка: тысячи сверхпроводниковых кубитов, выстроенных в решётку, и россыпь ионных модулей, мерцающих изумрудными точками. Будто схематическое отображение некоего живого организма, живущего где-то глубоко под землёй.
– Игорь Петрович, – я не могла оторвать глаз от этого огромного экрана, – это модель «Йода» в реальном времени?
– Почти, –он кивнул и, словно забыв про субординацию, перешёл на «ты». – Задержка рендеринга полсекунды, но картинка честная. Каждый кубит, каждый гейт. Видишь вон те точки, жёлтые? – он указал пальцем в угол экрана. – В четвёртом регистре декогеренция пошла в разнос, но сейчас корректор подхватит и всё выровняется.
Я смотрела, как жёлтые точки одна за другой становятся зелёными. Декодер вычислил синдромы ошибок и применил корректирующие операции. Цветовая индикация показателей волнами изменила свои значения и все значения отобразились ровным зелёным цветом.
– А что именно мы расшифровываем? – спросила я.
– Ключи, – коротко ответил Игорь Петрович, но видимо поняв, что ответ неполон, решил продолжить. – Мы получаем перехваченный трафик, зашифрованный алгоритмом RSA с длиной ключа от 1024 до 4096 бит. Как ты понимаешь, классический компьютер, какой бы мощный он ни был, факторизовал бы такое число несколько тысяч лет. Алгоритм Шора на «Йоде» справляется за минуты. Как он работает знаешь?
– Знаю. Период функции вычисляется с помощью квантового преобразования Фурье, затем по периоду восстанавливаются делители, – ответила я, ни грамма не смутившись такой примитивной проверке моих знаний.
– Всё верно. Мы скармливаем «Йоду» перехваченные пакеты, он выплёвывает закрытые ключи. Дальше уже классический кластер расшифровывает трафик. Тебе уже подготовили рабочее место. Для начала твоей задачей будет написание скриптов для оптимизации этого процесса. В дальнейшем, как разберёшься в нашей «кухне», подумаем над более сложными задачами для тебя.
Я кивнула. Всё понятно, меня, как молодую и неопытную, естественно, посадили на самую низовую позицию, на обвязку вокруг алгоритма Шора. Но в данный момент мне было всё равно. Я получила доступ к системе, о которой мечтает любой криптограф в мире. А самое главное, я не собиралась останавливаться на том, что мне поручили.
***
Первые две недели ушли на то, чтобы освоиться на рабочем месте. Я изучала документацию, писала тестовые скрипты, гоняла на эмуляторе учебные задачи. Система поражала своей мощью и производительностью. Гибридный планировщик задач сам решал, какую часть вычислений отдать на сверхпроводниковый кластер, а какую на ионные модули. Результаты поступали в классический суперкомпьютер, который занимал целое крыло соседнего корпуса.
Через пару месяцев непосредственный начальник допустил меня до самостоятельной работы. Звучит это красиво, но в нагрузку я, как и все остальные, получала в нагрузку ночные дежурства. Наверное, кому-то это и в тягость, а я только порадовалась. Ночь, тишина, только ты и «Йод» – звучит очень романтично, но только для тех, кто немного помешан на этом. В одно из таких дежурств, когда я ночью в одиночестве сидела в лаборатории и разбирала архитектуру декодера ошибок, обнаружилась неожиданная вещь. В исходном коде одного из модулей коррекции мне показались очень знакомыми стиль оформления кода и названия переменных. Всё это я уже однажды видела, в одном из репозиториев на GitHub, где была выложена открытая библиотека для декодирования поверхностных кодов, которую развивало международное сообщество. И даже больше, я сама пользовалась ею, когда писала свой диплом.
– Интересно, они что, взяли «опенсорс» и прикрутили к «Йоду»? – пробормотала я вслух.
С одной стороны, в этом не было ничего криминального. Использовать открытый код для закрытых проектов было распространённой практикой. Но странное чувство, что где-то рядом затаился белый пушной зверёк, не давало мне покоя. Слишком многое в «Йоде» держалось на этом модуле. Слишком многое зависело от того, насколько правильно декодер интерпретирует синдромы ошибок, вычисляет, где именно произошёл сбой, и применяет корректирующую операцию. Если он ошибается, то логический кубит разрушается. А если предположить, что что-то или кто-то заставит декодер ошибаться систематически, то получается, что вся квантовая машина может начать выдавать предсказуемо неверный результат. Примерно такой сценарий я рассматривала у себя в дипломной работе.
Любопытство, вот что двигало мною в ту долгую ночь на дежурстве, а ещё слова Невзорова: «У меня есть основания полагать, что с «Йодом» не всё чисто». Я дошла до кофе-машины и сварила себе большую кружку черного кофе, видимо, ночь будет долгой и бессонной. Вернувшись на рабочее место, открыла лог «сырых» синдромов до обработки и решила написать небольшой скрипт, который будет записывать эти данные в отдельный файл, чтобы чуть позже посмотреть, как они выглядят в динамике.
***
Мой самописный скрипт добросовестно собирал данные целую неделю. По моему мнению, этого времени было достаточно для набора статистически репрезентативной выборки.
В очередное своё ночное дежурство я сидела перед монитором, потирая затёкшую шею, и смотрела на график, построенный по собранным данным. Средняя частота ошибок в декодере колебалась около ожидаемого значения – примерно три сотых за логическую операцию, что для системы такого масштаба было отличным показателем. Но иногда на графике появлялся резкий всплеск, короткий, едва заметный глазу, но легко обнаруживаемый статистическими программами.
Я проверила логи и обнаружила, что сдвиги происходили строго в моменты, когда «Йод» обрабатывал очередной пакет перехваченного трафика. Но не все пакеты вызывали эту аномалию, а только определённого размера и с определённой структурой заголовков. Я понимала, что в своих изысканиях нащупала что-то непонятное и проваливаюсь в какую-то чёрную дыру неизвестности, но остановиться уже не могла. Руки, как будто, без участия мозга уже запускали углубленное сравнение «сырых» синдромов до подачи в декодер с теми, что получались после обработки. Подсознательно результат я уже знала, но мне не стало легче от того, что отобразилось на мониторе.
Декодер систематически искажал синдромы в пользу определённого класса состояний. Это напоминало то, что я демонстрировала на защите диплома – смещение, которое невозможно заметить, если не знать, куда смотреть. Только здесь атака была направлена не на нейросеть, а на саму систему квантовой коррекции ошибок.
Кто-то подсовывал «Йоду» специально сформированные пакеты, которые заставляли декодер ошибаться предсказуемым образом. Вывод отсюда можно было сделать только один – результатам расшифровки нельзя доверять, ведь их могут подменить и заставить «Йод» выдать ложный расшифрованный ключ или ложный текст сообщения. Или… что угодно.
Стояла уже глубокая ночь, та, которая называется ранним утром, но я всё же взяла телефон и набрала Невзорова.
– Полковник, – сказала я, когда в трубке раздался его немного сонный голос. – Прошу простить меня за поздний звонок, но у меня есть обоснованное подозрение, что «Йод» взломали.
***
В девять утра я сидела у него в кабинете. Кроме Невзорова в помещении находились ещё двое – мужчина и женщина в штатском, которых я видела впервые.
– Ну, Екатерина, рассказывайте, – сказал Невзоров. – Медленно, с деталями и с самого начала.
Я открыла ноутбук и развернула графики.
– Вот – «сырые» синдромы ошибок до обработки декодером. А вот – после. Видите всплеск? Он происходит, когда на вход декодера попадает пакет определённой структуры. Декодер интерпретирует синдромы некорректно, и я предполагаю, что он выдаёт искажённый результат. Мне кажется, что это не случайный сбой, а целенаправленная атака.
– Каким образом, по вашему мнению, злоумышленники влияют на декодер? – спросил мужчина в штатском. – «Йод» полностью изолирован от внешних сетей.
– Им не нужен доступ к «Йоду», – покачала я головой. – Они вшивают вредоносные синдромы прямо в трафик, который мы перехватываем и отправляем на расшифровку. Мы сами заносим заразу в систему. «Йод» честно расшифровывает пакет, но его декодер ошибок содержит уязвимость, и эта уязвимость заставляет его интерпретировать данные так, как нужно нашему противнику. Да, в нашей системе стоят однонаправленные фильтры и трафик идёт только в нашу сторону. Но кто сказал, что им нужно видеть ответ?
В кабинете повисла тишина.
– Откуда уязвимость в декодере? – спросила женщина в штатском.
Я вздохнула.
– Декодер написан на основе открытого кода из международного репозитория. Того самого, который используют десятки лабораторий и компаний по всему миру. Кто-то нашёл в нём фундаментальную уязвимость и использовал против нас.
Невзоров медленно поднялся из-за стола. Подошёл к окну и долго смотрел на улицу.
– Свободны, Екатерина Андреевна, – сказал он наконец. – Пока свободны.
***
После того совещания у Невзорова прошло четыре дня. Служба собственной безопасности работала тихо и меня не дёргали, только попросили подготовить подробный отчёт об обнаруженной аномалии. Но по коридорам уже поползли сплетни, что арестовали ведущего архитектора «Йода» – Кольцова, человека, который собрал этот суперкомпьютер в единое целое и без которого, по мнению большинства, сам проект не осуществился бы.
Я видела его всего пару раз, когда он заглядывал к нам в группу к Игорю Петровичу. Насколько я помнила, Кольцов был сухощавым мужчиной, лет шестидесяти, с вечно взлохмаченными седыми волосами и привычкой смотреть куда-то сквозь собеседника, так, что людям, беседующим с ним, становилось неловко. Люди говорили, что он удерживает в голове всю квантовую схему «Йода» целиком: каждый элемент, каждую связь. Поговаривали, что его не арестовали, а оставили в коттедже на территории части под подпиской о невыезде.
А вообще, вся ситуация попахивала абсурдом. Представьте, что вам предложили найти иголку в стоге сена, не говоря, как она выглядит? Вот так и нам дали полный доступ к исходным кодам «Йода», а это без малого сто пятьдесят семь тысяч строк кода квантовой части и ещё около полумиллиона в классическом кластере, и предложили найти программную закладку.
– Смотри сюда, – Лена ткнула пальцем в монитор. Часы на стене показывали начало третьего ночи. Под глазами у неё залегли тёмные круги, а на столе остывала четвёртая кружка кофе. – Вот этот кусок программы, который обрабатывает сырые данные с кубитов перед тем, как их анализировать, вызывается каждый раз, когда «Йод» получает новый пакет для расшифровки.
– Вижу. Что не так?
– А то, что мы перелопатили весь «наш» код и ничего не нашли, но именно в этом месте вызывается библиотека с GitHub. И это единственное ответвление в коде, которое мы ещё не проверяли.
В комнате повисла тишина. Семён, дремавший в углу с ноутбуком на коленях, открыл глаза.
– Лена, эту библиотеку развивает группа учёных из крупнейших университетов и исследовательских центров планеты, она находится в открытом доступе. Её используют все лаборатории мира и код в ней проверяли лучшие умы планеты. Если бы там был какой-то дефект, его бы нашли. Или ты хочешь сказать, что разработчики из всех этих университетов в сговоре с разведкой?
Я вглядывалась в экран и строки плыли перед глазами. Усталость накатывала, как прибой на океанский пляж.
– А что, если кто-то мог добавить в библиотеку крошечное изменение под видом безобидной оптимизации. Например, чуть-чуть по-другому обрабатывать данные при очень редких и специфических условиях. Таких, которые могут возникнуть только при перехвате военного трафика. В этом случае с этой ошибкой никто не столкнётся в повседневной работе, – тихо проговорила я и в помещении повисла гнетущая тишина.
Семён потянулся к клавиатуре.
– Давайте проверим историю изменений.
Так как библиотека была публичным проектом, то весь код и вся история его изменения была открыта. Записи о внесённых изменениях мы пролистывали до рассвета. Кофе кончился, вместо него мы пили чай из пакетиков, горький и вяжущий рот. Глаза резало от нескончаемых строк кода и комментариев к нему.
– Вот, – Семён показывал на записи десятимесячной давности. – Изменение номер `a7f3d91`. Автор: Ева Митчелл, Массачусетский технологический институт, Центр квантовой инженерии. Описание: «Улучшение обработки для пакетов с нестандартной длиной заголовка».
Услышав это, Лена начала искать информацию о Еве в интернете.
– Ева Митчелл, тридцать девять лет, – она начала зачитывать информацию из открытых источников. – Доктор наук по квантовой теории информации. Специализация – квантовая коррекция ошибок. Публикации по машинному обучению. Полтора года назад выступала на конференции в Женеве. Если мне память не изменяет, то там же выступал и Кольцов.
Мы переглянулись.
– Что именно делает её изменение? – спросила я.
Семён развернул подробности.
– Она добавила особое правило: если длина служебного заголовка пакета равна ровно ста сорока четырём байтам, то данные обрабатываются немного иначе. Якобы для ускорения.
– И это правило прошло проверку? – голос Лены дрогнул.
– Конечно прошло, – ответила я. – Кто будет подробно рассматривать маленькую оптимизацию для пакета экзотического размера? В девяноста девяти процентах случаев этот код просто не срабатывает.
Я откинулась на стуле и посмотрела в потолок. Там гудела лампа дневного света и в её жужжании мне слышалось что-то зловещее.
– Значит, Ева Митчелл внесла закладку, узнав от Кольцова, какие конкретно открытые библиотеки используют в «Йоде». И впоследствии они эксплуатировали именно эту уязвимость, зная, что мы перехватываем их трафик и пакеты с заголовком длиной ровно в сто сорок четыре байта попадут к нам на расшифровку. Мы сами заносили заразу в квантовую систему, им даже не нужно было взламывать «Йод». Достаточно было модернизировать код открытой библиотеки.
***
Невзоров приехал лично. Впервые за всё время я видела его без галстука, видимо, подняли с постели. Он молча выслушал наши пояснения, посмотрел на экран с деталями внесённых в библиотеку изменений, и потом долго стоял у окна, глядя на серое утреннее небо.
– Кольцов знал, что мы используем эту библиотеку?
– Он был ведущим архитектором, – ответила я. – Он не мог не знать.
Полковник сжал челюсти. Я видела, как ходят желваки под кожей.
– Продолжайте анализ кода. Проверьте все сторонние библиотеки, особенно если они могут быть связаны с этой Митчелл или кем-то ещё из её группы. Я поехал к Кольцову.
Он вышел, хлопнув дверью, а мы остались втроём. Нас по-прежнему ждали тысячи строк кода, а за окном занимался хмурый рассвет.
***
Официально никто в детали расследования нас не посвящал. Но Невзоров считал, что любая информация может стать ключом к поиску программных закладок. Он пришёл к нам под конец рабочей смены и выглядел так, будто не спал всё это время: трёхдневная щетина, красные глаза и мятая рубашка. Наплевав на правила пожарной безопасности, он придвинул к себе чей-то пустой стакан из-под кофе и закурив сигарету, начал рассказывать.
***
Полтора года назад проходила конференция по квантовым вычислениям в Женеве. Это было главным событием года в инженерном сообществе. Съехались лучшие умы со всего мира – физики, криптографы, инженеры. Кольцов выступал с докладом о гибридных системах коррекции ошибок, который был принят блестяще, ему аплодировали стоя. А потом, на вечернем приёме, к нему подошла она.
Ева Митчелл. Тогда ей было тридцать семь. Доктор наук из Массачусетского технологического института. Специализация – именно то, над чем работал Кольцов. Красивая, высокая, тёмные волосы, умные глаза и манера слушать так, будто всё, что говорит собеседник, невероятно важно. Она знала все его публикации. Задавала вопросы, от которых у него загорались глаза. Они проговорили три часа подряд, сначала в баре отеля, потом на террасе с видом на Женевское озеро. В то время Кольцову было шестьдесят два и он был одинок. Вся его жизнь состояла из работы, секретных допусков и бесконечных ночей в лаборатории. А тут – молодая, блестящая женщина, которая смотрит на него с восхищением.
– Вы понимаете, – Невзоров потушил сигарету, – такие люди, как Кольцов, живут в изоляции. Не физической – душевной. Они годами не могут ни с кем поговорить о том, что делают, поскольку связаны допусками и подписками. А тут появляется человек, который понимает даже полунамёки. Не просто делает вид, что понимает, а действительно разбирается. Это как глоток воды в пустыне. Можно разговаривать на специфические темы, не влезая в подробности и по факту, не нарушая никаких подписок о неразглашении.
Между ними быстро вспыхнул роман. Конференция длилась четыре дня, и каждый вечер они проводили вместе. Потом уже после его возвращения в Россию были переписка и звонки. Ева приезжала в Россию дважды – якобы на семинары в МГУ. Кольцов, разумеется, не мог показать ей «Йод» или передать документы. Но он говорил. Они сидели в ресторанах, гуляли по паркам, снимали номер в гостинице, и он рассказывал. О трудностях. О том, как они адаптировали открытую библиотеку квантовой коррекции под своё железо, потому что писать с нуля было слишком дорого. О том, какие версии модулей используются.
– Он не называл конкретных данных, не передавал ничего в письменном виде, – Невзоров горько усмехнулся. – Он просто разговаривал с женщиной, в которую влюбился и рассказывал о своих инженерных трудностях. А каждое его слово, наверняка, и всё, что говорил Кольцов, уходило прямиком в аналитический центр в Лэнгли.
– И он ни о чём не догадывался? – спросила я тихо.
– Нет. Потому что она была чертовски умна и никогда не просила рассказывать никаких секретов. Никогда не задавала прямых вопросов. Она просто слушала его и восхищалась: «Как же это сложно, Витя, как ты вообще с этим справляешься?» И он рассказывал дальше. Ему казалось, что он наконец встретил родственную душу, а на самом деле он встретил профессионального разведчика.
Невзоров помолчал, глядя в стену.
– Американская разведка давно охотилась за информацией о «Йоде». Они знали, что мы строим квантовый суперкомпьютер, но не знали деталей архитектуры. Им нужно было понять, на чём он основан, чтобы найти уязвимость. Кольцов дал им всё, что нужно. Не чертежи, не схемы – просто рассказ о том, какие открытые библиотеки мы используем и с какими проблемами сталкиваемся. Этого хватило. Их лучшие криптографы придумали и разработали код, для влияния на строящийся «Йод», а Ева Митчелл, как один из мейнтейнеров библиотеки, внесла в неё «невинное улучшение».
– И никто не заметил? – спросила я. – Даже другие разработчики?
– А что там замечать? Изменение выглядит как рядовая оптимизация. Пакеты с заголовком ровно 144 байта встречаются только в военной спутниковой связи. В обычных лабораториях такого трафика нет. Даже если бы кто-то гонял тесты, ловушка просто никогда бы не сработала. Но когда такой пакет попадает в «Йод» – включается закладка.
Я смотрела на полковника. В его голосе звучала усталость пополам с горечью.
– И что теперь будет с Кольцовым? – тихо спросила Лена.
Невзоров устало покачал головой и в подтверждение своих слов пожал плечами.
– Не знаю. Он всё ещё под домашним арестом. Служба безопасности решает. Но знаете, что он мне сказал напоследок? «Я не предатель. Я просто хотел, чтобы меня кто-нибудь выслушал». – Полковник поднял на меня тяжёлый взгляд. – И знаете, что самое поганое? Я ему верю.
***
После этого разговора мы с новыми силами взялись за код. Слова Кольцова не шли у меня из головы: «Я не предатель. Я просто хотел, чтобы меня кто-нибудь выслушал». Человек, создавший самую мощную вычислительную машину в стране, оказался сломлен одиночеством. И на этом его поймали, как птицу в силок.
Следующие две недели слились в один бесконечный день. Мы спали по три-четыре часа, ели что попало, пили кофе литрами. Разобрали всю квантовую часть «Йода» до последней строчки. Нашли ещё две закладки – обе в открытых библиотеках, которые использовались в различных частях «Йода». Одна в ионном декодере, другая – в планировщике задач. Обе были замаскированы под безобидные улучшения, обе срабатывали только при очень специфических условиях.
Мы вычистили их. Переписали уязвимые модули с нуля, на этот раз без опоры на скомпрометированные библиотеки. Тестировали на синтетических данных, на архивном трафике. Квантовая часть работала чисто.
Но оставался классический суперкомпьютер – огромный зверь, который занимался окончательной сборкой расшифрованных сообщений, проверкой ключей и их верификацией. Там более полумиллиона строк кода на Python и C++, который писался годами. Мы начали их разбирать, но быстро поняли: чтобы проверить всё, потребуются недели, а не дни. Невзоров выделил дополнительных программистов, мы разбили код на сектора и работали посменно. Но объём был колоссальный. Когда мы добрались едва до половины, пришло известие о Кольцове.
Я сидела в столовой, бездумно ковыряя вилкой гречку с котлетой, когда рядом опустился Семён. Лицо у него было серым.
– Кольцов мёртв. Повесился в собственном доме, а рядом нашли предсмертную записку.
В этот момент моя рука с вилкой замерла в воздухе.
– Известно, что было в записке? – спросила я Семёна.
– «Я не предатель, я не выдавал тайну. Просто они оказались хитрее».
Я отодвинула тарелку. Есть расхотелось.
– Он не знал, что она агент.
– Похоже на то, что он верил, что встретил свою любовь. А на самом деле – встретил ловушку.
Мы замолчали. В столовой гудела вытяжка, пахло подгоревшим маслом. В этот момент за соседним столиком кто-то рассмеялся и этот звук был странным и чужеродным.
– Квантовую часть мы вычистили, – сказала я наконец, чтоб хоть как-то убрать повисшую паузу. – Теперь там порядок. Но классический кластер... мы проверили едва половину. Там ещё копать и копать.
– Вот именно, – Семён потёр глаза. – И кто знает, что мы можем там найти.
***
Две ночи спустя я сидела в своём кабинете одна. Часы показывали «00:53». На мониторе медленно ползла строка прогресса – «Йод» заканчивал расшифровку очередного пакета. Перехват со спутника связи, который обслуживает каналы вероятного противника. Рутинная работа.
Я пила чай и смотрела, как на соседнем экране пульсирует визуализация кубитов. После того как мы переписали квантовый обработчик, картинка стала спокойнее. Меньше тревожных сигналов. Квантовая система работала как часы.
Прогресс-бар добрался до конца. На экране появился результат расшифровки и от того, что я увидела холодные мурашки побежали вверх по позвоночнику. Я, как во сне поставила кружку на стол. Прочитала текст один раз… прочитала второй. Потом схватила телефон и набрала номер Невзорова.
– Полковник, – сказала я, когда в трубке раздался хриплый спросонья голос. – Срочно приезжайте.
– Что случилось?
– Не по телефону, код красный. Приезжайте.
Про маркировку важности звонка мы с ним условились сразу же после обнаружения закладок в коде «Йода». «Красный» означал, что требуется его немедленное присутствие в кратчайшие сроки.
***
Невзоров приехал через двадцать пять минут. Волосы всклокочены, рубашка застёгнута криво. За его спиной маячили двое из СБ, видимо, прихватил с собой дежурных.
– Показывай, что случилось, – сказал он.
Я развернула к нему монитор. На экране светились строки: «Гефест - Центру, уровень доступа Омега. Подтверждаю информацию. «Утренняя звезда» нанесёт ядерный удар. 14 сентября, 05:00 по Гринвичу. Цели первого удара: Москва, Санкт-Петербург, Екатеринбург, Новосибирск, командные пункты РВСН. Носители выведены на точки старта. Коды активации переданы.».
Невзоров прочитал. Молча. Потом ещё раз. Потом повернулся ко мне.
– Когда перехвачен пакет?
– Час назад. Спутник USA-376, канал ретрансляции военного трафика.
– Это настоящий пакет?
Я посмотрела на него, потом перевела взгляд на экран. Руки дрожали.
– Пакет настоящий, в этом нет сомнений. Но вот в правдивости расшифровки я сомневаюсь. Квантовую часть мы вычистили полностью, там закладок быть не должно. Но классический кластер мы проверили только наполовину.
В кабинете стало очень тихо. Только гудел кулер в системном блоке и где-то далеко, за бетонными стенами, мерно дышали криогенные насосы «Йода».
– Сколько времени? – спросил Невзоров.
– Час двадцать, – ответил кто-то из СБшников за его спиной. И зачем-то уточнил. – Четырнадцатое сентября уже наступило.
– Осталось шесть часов, с копейками. Будем поднимать всех, – сказал он. – Включая Верховного.
Невзоров развернулся на каблуках и быстрым шагом вышел из кабинета, уже набирая кого-то по защищённому мобильному телефону, а я осталась сидеть перед монитором и строки сообщения на нём светились ровным белым светом: «14 сентября, 05:00 по Гринвичу. Москва, Санкт-Петербург, Екатеринбург, Новосибирск». Города, в которых живут миллионы людей. Города, в которых живут мои родители, мои друзья, мои однокурсники.
***
Через час в коридорах творилось что-то невообразимое. Люди в форме и без бежали, перекрикивались, хлопали двери. Где-то далеко взвыла сирена – учебная или уже нет, я не знала. Меня вывели из кабинета, провели через два КПП и усадили в какой-то комнате для совещаний и попросили подождать.
Я смотрела на свои руки. Они больше не дрожали. Наверное, шок перешёл в другую фазу – когда тело немеет, а мысли становятся кристально чёткими. 14 сентября, 05:00 по Гринвичу. В Москве это будет восемь утра. Час пик. Метро, полное людей. Дети в школах. Моя мама, которая в это время обычно пьёт кофе на кухне и смотрит утренние новости.
Через некоторое время пришёл Невзоров, а вместе с ним – генерал с седыми висками, которого я раньше не видела, и двое наших аналитиков с ноутбуками.
– Докладывайте, – сказал генерал. Голос у него был спокойный, почти будничный, но под этим спокойствием угадывалась сжатая пружина человека с огромной ответственностью.
– Екатерина Андреевна, расскажите всё, что вам удалось узнать, – кивнул мне Невзоров.
Я облизала губы. Во рту было сухо, как после недели в пустыне.
– Сообщение пришло в пакете, который соответствует стандартам военной связи НАТО. «Йод» расшифровал его. Квантовая часть нами проверена и чиста, там результат расшифровки не мог исказиться. Но далее текст проходит через классический суперкомпьютер, где мы ещё не завершили аудит кода. И вот там уже могут быть закладки.
– То есть мы не знаем, фальшивка это сообщение или нет, – подытожил генерал.
– На сто процентов быть уверенными мы не можем, – согласилась с ним я.
– Что говорят другие источники? Спутниковая разведка? Агентура? – обратился он к Невзорову и аналитикам.
– Пока тишина, – ответил один из аналитиков. – Но если это реальный приказ, то мы можем не увидеть подтверждения до последней минуты.
Я слушала их и чувствовала, как внутри разливается холод. Разговор шёл о вероятностях, о подтверждениях, о протоколах. Они не предлагали никаких конкретных действий, только ждать: либо начала войны, либо сообщений от агентуры.
– Нужно срочно проверить классический код, – перебила аналитика я. – Тот самый модуль, который собирает итоговое сообщение. Это наиболее вероятное место искажения информации. Модуль получает текст сразу после всех алгоритмов дешифровки и дальше лишь вывод на экран и в файл.
Генерал посмотрел на Невзорова. И тот кивнул, соглашаясь с моей правотой.
– Идите. Но с вами пойдёт сопровождение. И связь – каждые пятнадцать минут.
***
В центре управления «Йодом» было пусто. Только гудели вентиляторы компьютеров да мерцали экраны на стенах. Я села за свой терминал, чувствуя, как трясутся пальцы – теперь уже от усталости и кофеина, а не от страха. Тут в комнату влетел Семён, которого подняли по тревоге. Глаза у него были красные, но смотрел он остро.
– Что будем искать? – спросил он.
– Мы вычистили три ловушки в квантовой части, – сказала я. – Но классический код мы проверили едва наполовину. Сейчас надо сосредоточиться на модуле, который собирает расшифрованный текст в читаемое сообщение. Если закладка есть, то, скорее всего, там – чтобы подменить результат в самый последний момент.
– Но мы же ещё не добрались до этого модуля в плановой проверке. Он в списке на следующую неделю.
– Значит, доберёмся сейчас. Для начала надо получить архив программного кода.
Семён подключился к архивному хранилищу, мы скачали контрольные слепки всех критических частей классического кластера – своего рода цифровые отпечатки. После этого и запустили сравнение с теми версиями, что работают сейчас.
Строки проверки бежали по экрану одна за другой. Модуль проверки ключей – совпадает. Модуль верификации – совпадает. Модуль форматирования вывода ... Цифровой отпечаток не совпал.
Я уставилась на экран. В ушах зазвенело.
– Несоответствие, – медленно проговорила я. – Это та часть, которая превращает расшифрованные байты в читаемый текст. Она вызывается в самом конце, уже после всех проверок.
– Кто его менял? – голос Семёна дрогнул.
Я открыла историю изменений на сервере классического кластера. Последнее изменение – четырёхдневной давности. Автор: В. Кольцов.
– Кольцов, – прошептала я. – Он внёс изменение за день до смерти. У него оставался доступ к классическому кластеру из его дома, поскольку служба безопасности не отключила его учётку.
Я открыла, что именно изменил Кольцов. В код было добавлено скрытое условие: если в расшифрованном тексте встречается определённая комбинация символов, программа не показывает настоящий текст, а подставляет другой – заранее заготовленный. Файл зашифрован, а ключом дешифровки является текст, который же и является триггером сработки.
– Зачем он это сделал? – спросил Семён. – Он же был жертвой, а не диверсантом.
– Может, его заставили. Или он пытался что-то исправить перед смертью, но сделал только хуже. Или...
Я не договорила. В помещение ворвался Невзоров.
– Есть что-то? Нашли?
Я показала ему экран.
– Кольцов изменил модуль сборки сообщений на классическом кластере. Если в тексте есть определённый маркер, сообщение подменяется на ложное.
– То есть сообщение о ядерном ударе – подделка?
– Не знаю. Чтобы это узнать, нужно добраться до того скрытого файла с подменным текстом, расшифровать его и посмотреть, что там на самом деле. Либо знать на какое сообщение срабатывает замена текста и тогда можно понять, что было первоначальным.
Невзоров сжал кулаки.
– Что-то можно сделать?
– Нужно запустить расшифровку в отладочном режиме и вручную подать пакет с нужным маркером. Я могу написать скрипт перебора, с помощью «Йода» часа за три, максимум четыре управимся.
– Этого времени нам не дадут, – отрезал Невзоров. – Все войска поднимают по тревоге. Если вдруг то сообщение правда – страна должна быть готова к войне.
– Тогда что мы делаем?
Полковник посмотрел на меня долгим взглядом. Потом сказал тихо.
– Мы верим, что сообщение – фальшивка, но готовимся к худшему. Попробуй расшифровать, если успеешь, будет чуточку больше ясности.
***
Оставшиеся часы мы провели в лихорадочной работе. К нам с Семёном присоединилась Лена и наш начальник, и мы вчетвером гоняли классический кластер в отладочном режиме, пытаясь воспроизвести условия, при которых срабатывает ловушка Кольцова. «Йод» перебирал все возможные триггерные фразы. Нужно было воссоздать пакет с нужными словами, зашифровать его нужным шифром с правильным ключом, скормить его системе и посмотреть, что она выдаст на выходе. Хуже всего было то, что мы тыкались вслепую. Практически все переменные в этом уравнении нам были не известны, поэтому приходилось перебирать варианты, опираясь на структуру перехваченного трафика, и молиться, чтобы совпало.
В шесть утра по Москве, когда до часа «икс» оставалось два часа, у нас получилось.
На экране появился расшифрованный текст. Не тот, что «Йод» нам выдал после расшифровки, а настоящий. Я читала его, и нервное напряжение потихоньку начало уходить: «Гефест - Центру, уровень доступа Омега. Плановая проверка каналов связи. Подтвердите получение тестового пакета. Конец сообщения.»
– Это просто тест, – выдохнула Лена и голос у неё сел, как после долгого крика. – Обычная проверка связи.
– А Кольцов подменил его на ядерный удар, – Семён стянул очки и принялся тереть переносицу. – Но зачем? Хотел, чтобы мы запаниковали? Чтобы дёрнули руководство и начали принимать ответные меры?
Игорь Петрович уже тыкал в телефон, набирая Невзорова. А я молчала. Перед глазами стояло лицо Кольцова – измученное, с потухшим взглядом. Шестьдесят два года, гениальный ум, одиночество и любимая женщина, которая оказалась шпионкой. Его использовали и выбросили, как отработанный материал. А он перед смертью оставил нам последний привет. Только не в квантовой части «Йода» – там мы всё вычистили, – а в классическом кластере, куда ещё не добрались.
– Он хотел, чтобы мы это нашли, – сказала я тихо, ни к кому конкретно не обращаясь. – Оставил закладку, но специально не прятал её глубоко. Знал, что после его смерти мы полезем проверять код. Хотел показать, насколько уязвима система. Только он не учёл того, что сообщение о проверке связи придёт раньше, чем мы откопаем его мину.
Семён посмотрел на экран с расшифровкой.
– Значит, ядерного удара не будет? – спросила Лена, переводя взгляд с меня на Невзорова.
– Похоже на то, – ответила я. – Но радоваться пока нечему.
– Почему?
– Мы нашли закладку Кольцова. Но мы не знаем, сколько ещё ловушек в классическом кластере и не прячется ли одна закладка под другой.
После этих слов Невзоров долго смотрел на меня, а потом перевёл взгляд на часы на стене.
– Через два часа всё станет ясно, – сказал он глухо. – Если сообщение было подделкой, в восемь утра ничего не случится. А если мы ошиблись...
Он не закончил. Да и незачем.
***
В 07:55 я стояла у окна в комнате отдыха. За стеклом свежим снегом белел плац, и солдаты в ушанках бодро шаркали лопатами по асфальту. Солнце только-только выползало из-за бетонного забора и красило стены в розовый. Начиналось обычное утро, а где-то далеко, за тысячи километров, в шахтах и на подлодках люди ждали приказа, способного превратить мир в пепел.
Рядом застыл Невзоров. Чуть поодаль, на стульях, сидели наши – Лена куталась в плед, Семён нервно крутил в пальцах пустую кружку, Игорь Петрович просто смотрел в стену. Полковник тоже смотрел в окно и в руке у него дымилась сигарета.
– Страшно? – спросил он, не оборачиваясь.
– Очень, – честно ответила я.
– Мне тоже.
Мы стояли и смотрели, как минутная стрелка на настенных часах ползёт к двенадцати. 07:59. Потом 08:00.
Тишина.
Ни сирен. Ни вспышек. Ничего.
Я выдохнула – кажется, впервые за последние несколько часов. Невзоров смял сигарету в пепельнице и повернулся ко мне.
– Поздравляю, Екатерина Андреевна. Мы только что предотвратили то, чего не было.
– Или то, что могло бы быть, – ответила я, чувствуя, как губы сами растягиваются в улыбке. – В классическом кластере ещё полно кода, который мы не проверили. Кто знает, какие сюрпризы там ждут своего часа.
Невзоров кивнул, принимая мою правоту, и неожиданно улыбнулся в ответ.
– Знаете, как в одном старом фильме говорили? «Будем искать». Я прошу вас, Екатерина, возглавить эту работу. Если согласны.
Я посмотрела на него. В глазах полковника ещё стоял ночной страх, но теперь к нему примешалось что-то другое. Может, уважение. А может, мне просто хотелось так думать.
– Я согласна, – сказала я. – Только дайте мне один выходной. Хочу навестить маму.
Полковник усмехнулся.
– Согласен. Но сначала – короткий брифинг у генерала. Пойдёмте.
Он направился к двери. Я задержалась на секунду, бросив последний взгляд в окно. На плацу солдаты всё так же месили снег лопатами. Обычный день. Обычная жизнь. А где-то в глубине классического кластера, в лабиринтах строчек кода, дремали и ждали своего часа невидимые закладки. Мы нашли одну, а сколько их ещё – неизвестно.
Спасибо за чтение
Вернуться к книге
