Кукловод: Второй оператор

- -
- 100%
- +
Я вёл его модулем, но не стрелял.
Второй появился левее. Третий не показался вообще — ушёл выше, в туман.
Первый качнулся ещё раз и двинулся прямо на нас.
Двадцать метров. Пятнадцать.
Он нас увидел.
Зелёный огонёк мигнул трижды — короткий импульс на частоте роя, целеуказание, — и в ту же секунду я нажал.
Модуль отработал короткой очередью. Пять патронов.
«Шершня» разнесло. Он не упал — он просто перестал быть единым предметом: винты в одну сторону, головка в другую, корпус вниз. Обломки ещё сыпались, когда я перевёл ствол на второго и высадил в него семь.
Второй свалился в кювет, дымя.
— Два, — сказал я.
И в ту же секунду туман впереди зажёгся.
Восемь вспышек, почти одновременно.
Я успел только вжаться в кресло.
Первая очередь прошла по лобовой броне. Двенадцать попаданий за полторы секунды. Звук внутри был не звоном и не грохотом — это был удар в грудную клетку, будто по корпусу били кувалдой в темпе отбойного молотка, а корпус был моими рёбрами. Бронестекло пошло белой паутиной. Правый дворник срезало вместе с креплением.
Катя закричала в отсеке. Не от боли — от того, что это оказалось громче всего, что она слышала в жизни.
— Держись! — заорал я.
Стартер.
Дизель схватил с первого оборота, и я бросил машину вперёд, прямо на них, потому что стоять означало умереть.
Броня держала. Пока держала. «Вектор» несёт двадцатимиллиметровую пушку, а лоб корпоративного броневика рассчитан ровно на неё — держать в упор десять секунд, чтобы дать оператору время принять решение.
Я принял.
Я направил машину туда, где по радару стояли двое ближайших, и вдавил педаль.
Двенадцать тонн. Пятьдесят километров в час к моменту контакта.
Первого я не увидел — я его почувствовал. Удар в правое крыло, скрежет, машину бросило влево, и через долю секунды по крыше что-то прокатилось и улетело назад.
Второй успел прыгнуть.
Я видел это боковой камерой: длинная угловатая фигура на обратных суставах взмыла с бетона метров на шесть и ушла с моей линии, пропустив броневик под собой.
И приземлилась нам на корму.
Машину качнуло. Триста килограммов на задней оси — подвеска отработала жёстко, зад просел.
— Он на нас! — заорала Катя. — Леша, он на крыше!
— Левая бойница! Он пойдёт по левому борту!
Я крутанул руль вправо, пытаясь стряхнуть его инерцией.
Не вышло. Он держался. Я услышал, как по крыше скребут манипуляторы — раз, второй, — и потом раздался визг.
Пила.
Он вскрывал десантный люк.
— Дробовик!
— Я вижу, вижу его!
Грохнуло. Один раз, второй.
— Не берёт! — она почти рыдала. — Броня!
— В оптику! Не в корпус!
— Он не показывает оптику!
Я перевёл модуль назад, но развернуть его на собственную крышу было физически невозможно — упор конструкции, мёртвая зона.
Визг пилы стал ниже. Он вошёл в металл.
Плохо.
Я бросил взгляд на радар. Оставшиеся шесть шли за нами, отставая — на пересечённой они были быстрее, но на бетонке двенадцать тонн разгонялись лучше. Дистанция росла. Метров сто двадцать.
Значит, есть три-четыре секунды на одну попытку.
Впереди в тумане проступила тень. Насосная. Та самая полуразрушенная насосная у развилки, которую я видел на карте час назад.
Бетонная коробка. Дверной проём. Высота проёма — я прикинул по памяти чертежа — два восемьдесят.
Высота броневика по крыше — два сорок.
Разница — сорок сантиметров.
«Вектор» на крыше стоял в полный рост.
— Катя! Ляг на пол! Голову вниз!
— Что?!
— ЛЯГ!
Я взял левее и погнал прямо на проём.
Он понял за полсекунды до. Я почувствовал, как он рванулся — сервоприводы взвыли, он попытался спрыгнуть вбок.
Не успел.
Удар был такой, что меня швырнуло на ремни и в глазах полыхнуло белым. Верхняя перемычка проёма — армированный бетон, полметра толщиной — прошла над крышей и снесла его вчистую.
Не сбила. Именно снесла: разложила пополам по линии контакта.
Верхняя часть улетела внутрь насосной, нижняя осталась на крыше и через секунду сползла на корму, цепляясь за скобы.
Броневик влетел в здание, пробил гнилые внутренние перегородки, снёс что-то железное и вылетел с другой стороны, разбрасывая куски шифера.
Я вывернул руль и вернулся на колею.
— Катя!
— Живая! — Голос был сорванный. — Живая, живая!
— Люк цел?
— Дыра! В потолке дыра, я небо вижу!
— Небо — не пуля. Сиди.
Я гнал по колее семьдесят, что для этой дороги было чистым самоубийством. Радар показывал шесть меток позади. Они отставали: сто восемьдесят, двести десять, двести шестьдесят.
На трёхстах они остановились.
Я сбросил до сорока и смотрел на радар.
Метки стояли. Не преследовали. Собрались плотной группой в точке, где я развалил первого, и замерли.
— Сторож. Что они делают?
Пауза.
«Фиксирую обмен на частоте роя. Плотность обмена высокая. Характер трафика соответствует протоколу сбора и распределения ресурса».
— Переведи.
«Они разбирают своего».
Я остановил машину.
Мы стояли на колее, двигатель молотил на холостых, и я смотрел в туман позади нас, где одиннадцать машин, из которых осталось шесть, снимали комплектующие со своего разбитого собрата.
Так же, как они снимали нейропорты с водителей каравана.
— Они не охотятся, — сказал я вслух.
— В смысле не охотятся?! — Катя вывалилась из отсека в кабину, серая, с ободранной щекой. — Они нас чуть не сожрали!
— Они защищались. Мы вошли в зону, где они собирали ресурс. Это не охота. Это обслуживание.
— Какое, к чёрту, обслуживание?
— Ремонтное. — Я вывел на стекло схему. — Смотри. Караван они не грабили. Они сняли с людей импланты и ушли. С нами они не пошли на добивание: как только дистанция выросла, они прекратили преследование и вернулись к работе. Это не поведение хищника. Это поведение подразделения, которое выполняет задачу и не отвлекается.
— Какую задачу?
— Поддержание собственной боеготовности.
Я откинулся на спинку.
Двадцать лет без снабжения. Без базы, без склада запчастей, без единого живого техника. Рой, которому когда-то поставили задачу и который с тех пор занят одним: оставаться исправным. У них кончились родные комплектующие, и они начали брать то, что подходит по интерфейсу.
А подходит по интерфейсу то, что вживлено в людей. Потому что все нейропорты этого мира сделаны по одному стандарту.
По моему стандарту.
Я закрыл глаза.
«Этот глаз не был чужеродным. Он вернулся домой».
Я думал так, когда ставил Кате «Око». Я гордился этим.
— Леша. — Катя тронула меня за плечо. — Ты чего?
— Ничего.
— У тебя лицо...
— Ничего, — повторил я. — Оценка ущерба.
Она поняла, что разговор окончен, и полезла смотреть.
Ущерб был неприятный.
Внешний топливный бак — сорвало вместе с креплениями при таране первого. Минус сто двадцать литров, треть запаса. Правое крыло смято до колеса, но колесо цело. Дворник справа отсутствует. Бронестекло держится, но смотреть через него можно только левой половиной. В крыше десантного отсека — разрез сантиметров тридцать, рваный, с завёрнутыми внутрь краями. Дождь пойдёт — будет литься.
Модуль на крыше цел. Патронов сто восемьдесят.
— Жить будем? — спросила Катя.
— До «Заслона» дотянем. Обратно — нет.
— Обратно с полными баками поедем.
— Оптимизм — это хорошо.
Я тронул машину.
Километров пять я вёл молча и думал.
Не о рое. Рой был решаемой задачей: шесть единиц, известная логика, известные слабости. Если понадобится, я их выбью.
Я думал о ключе.
Одиннадцать машин. Одиннадцать боевых платформ, каждая стоит дороже всего, что у меня есть, и каждая построена на моём коде. Я смотрел на них изнутри, я читал их как открытую книгу, я знал, где у них слепые зоны и где перегревается привод.
И я не мог отдать им ни одного приказа.
Потому что в корне их архитектуры стояла чужая подпись.
Вот что такое «Кукловод» на самом деле. Не мощность. Не гениальный алгоритм. Не Master-OS.
Ключ.
Отец тридцать лет строил мир, каждая железка которого совместима со мной. Штерны тридцать лет производили тела, ожидающие разум. А в последний момент кто-то переписал одну строчку в фундаменте, и вся эта армия стала слушаться фамилии Штерн.
Мне не нужна мощность. Мне нужно вернуть подпись.
— Сторож.
«Слушаю».
— Сохрани дамп протокола роя. Всё, что успел перехватить на частоте. Приоритет — служебные заголовки авторизации.
«Сохранено. Четыреста двадцать килобайт».
— Не трогай. Не анализируй. Просто держи.
Анализировать это надо было в сети. С расширением. С полным погружением и дешифровкой на лету.
С платой.
Я посмотрел на Катю. Она сидела боком, прижав к ободранной щеке смоченную водой тряпку, и смотрела в разбитое стекло.
— Катя.
— М-м?
— Мне понадобится погружение. Длинное.
Она медленно повернула голову.
— Насколько длинное?
— Не знаю. Минуты.
Она долго молчала.
Потом достала из кармана тетрадь и карандаш и положила себе на колено.
— Тогда с тебя много историй, — сказала она. — Начинай прямо сейчас. Не стой.
Глава 4
Мы прошли ещё двенадцать километров и встали на ночёвку в бетонной трубе водопропуска.
Труба была два с половиной метра в диаметре, сухая, с тонким слоем ила по дну. Броневик влез в неё до половины — корма осталась снаружи, но корма у нас и так была разворочена. Главное, что лоб и борта прикрывал бетон, а сверху лежала насыпь.
От дрона сверху нас не видно. От радара — тоже.
Катя развела примус на бортовом спирте и грела воду. Пар уходил вверх и тут же исчезал в темноте. Она сидела, подтянув колени, и держала кружку двумя руками.
Я разложил на коленях планшет с дампом.
Четыреста двадцать килобайт перехваченного трафика роя. Заголовки, служебные пакеты, обмены целеуказанием. Сырьё.
Проблема заключалась в том, что читать его я не мог.
Не в смысле «не умею». В смысле — не мог физически. На экране это был массив шестнадцатеричного мусора, и чтобы превратить его в структуру, нужно было прогнать его через себя. Расширить восприятие. Войти в данные так, как я входил в облако кода вокруг камеры, когда учился в Лаборатории.
То есть заплатить.
— Лезешь? — спросила Катя, не поднимая головы.
— Пока думаю.
— Ты уже полчаса думаешь.
— Я считаю цену.
Она подула на кружку.
— Ну так плати сначала. Уговор был.
Я отложил планшет.
Уговор был. И, если честно, мне даже было удобнее начать с этого: пока говоришь, мозг занят делом и не считает.
— Что тебе рассказать?
— А мне всё равно, — она пожала плечами. — Что вспомнишь.
— Так не работает. Я не «вспоминаю». У меня либо есть данные, либо их нет. Если ты скажешь «расскажи про мать» — я выдам тебе три предложения и упрусь в стену. Если ты дашь конкретную зацепку — я разверну её на полчаса.
— Какую зацепку?
— Место. Предмет. Запах. Фразу. Что-то, за что можно потянуть.
Она задумалась.
— Ладно. Эти железки, которые нас чуть не сожрали. Ты сказал, что сам их писал.
— Протокол. Не машины. Протокол обмена внутри роя.
— Вот про это и рассказывай. Где писал, с кем, как.
Я откинул голову на холодный бетон и закрыл глаза.
И потянул.
Восьмой этаж. Здание на набережной, стекло и бетон, отцовская архитектура: снаружи — храм, внутри — завод. Отдел прикладных систем занимал весь этаж, и в нём было всегда холодно, потому что серверная стояла в торце и кондиционер гнал воздух через весь коридор.
Мне двадцать шесть. Я начальник направления. Направление состоит из девяти человек, из которых семеро старше меня, и двое из них считают это несправедливым.
— Погоди, — Катя достала тетрадь. — Медленнее.
Я замедлился.
Мы делали «Стаю» одиннадцать месяцев. Задача была поставлена формально как «повышение живучести групп беспилотных единиц», а по факту это был ответ на тендер Минобороны, который мы обязаны были выиграть, потому что если бы мы его не выиграли, его выиграли бы Штерны.
Главная проблема роя — центр. Любая групповая система строится вокруг командного узла, а командный узел — это цель. Убей ведущего, и восемь оставшихся превращаются в восемь отдельных дураков.
Мы убрали центр совсем.
Идея была не моя. Идея была Марка.
Я открыл глаза.
— Марк, — сказал я вслух.
— Кто такой?
— Ведущий инженер. Мой... — я поискал слово, и слова не нашлось. — Он сидел через стол от меня четыре года.
Я закрыл глаза снова, и оно пошло само.
Марк Соболь. Тридцать четыре года, лысеющий, рыхлый, с вечной кружкой, на которой было написано что-то идиотское. Ходил в одном и том же свитере. Не выносил совещаний, засыпал на них демонстративно и просыпался ровно в ту секунду, когда кто-то говорил глупость, чтобы эту глупость немедленно озвучить вслух.
Пил кофе литрами. Реально литрами, у него была двухлитровая колба, он заваривал с утра и к вечеру она была пуста.
COFFEE_IS_LIFE`.
Я открыл глаза.
— Что? — Катя подняла голову.
— Пароль, — сказал я. — Отладочный шлюз в «Бастионе-6». Пользователь MARK_S, пароль COFFEE_IS_LIFE. Он оставил его перед релизом, чтобы не возиться с ключами в поле, и забыл убрать. Я вскрыл этим броневик у мотеля двадцать лет спустя.
Я вспомнил это.
Не «знал» — знал я это и раньше, это лежало в техническом слое, вместе с синтаксисом и схемами. Я вспомнил, как он это делал. Ночь, пустой этаж, он сидит в своём свитере, перед ним колба, и он говорит: «Лёх, я себе дверку оставлю, ладно? А то ваши безопасники меня в поле с ключами уморят». И я сказал: убери перед релизом. И он сказал: уберу.
Не убрал.
Я сидел в бетонной трубе, и у меня болело в груди.
Не физически. Сердце работало ровно, шестьдесят четыре, я проверил. Болело как-то иначе, и я не понимал, в какой системе это фиксировать.
— Ты чего? — тихо спросила Катя.
— Я его вспомнил.
— Кого?
— Марка. Я его видел сейчас. Свитер, колба, лицо. Я помню, как он щурился, когда читал код с монитора, — у него была дальнозоркость, и он отодвигался от экрана, вместо того чтобы надеть очки.
— Ну и? Это же хорошо.
— Это не должно было получиться, — сказал я.
Она не поняла.
Я развернулся к ней и заговорил быстро, потому что мысль надо было поймать сейчас, пока она была тёплой.
— Час назад я не мог достать ничего. Совсем. Я знал, что писал «Стаю», как знаю таблицу умножения: факт без обстоятельств. Ни лиц, ни имён, ни помещения. Я думал, что этого слоя у меня больше нет. А сейчас ты дала мне зацепку — «где писал, с кем» — и я развернул одиннадцать месяцев жизни за четыре минуты.
— И что это значит?
— Это значит, что оно не стёрто. Оно не проиндексировано.
Я встал.
В трубе было низко, и пришлось пригнуться, но сидеть я больше не мог.
— Слушай, как работает память. Есть данные и есть ссылки на них. Когда ты забываешь имя, данные никуда не деваются — рвётся ссылка. Ты знаешь человека, ты помнишь его в лицо, но не можешь вытащить имя, потому что путь к нему оборван. А потом кто-то говорит первую букву, и всё встаёт на место.
— Ну.
— Так вот, я всё это время исходил из того, что при погружении система стирает данные. Освобождает физический объём. Но если бы она стирала — Марк не вернулся бы. Ни от какой зацепки. Его бы просто не было.
— А он вернулся.
— Он вернулся, — сказал я. — Значит, система не стирает. Система рвёт ссылки.
Катя медленно опустила кружку.
— То есть у тебя там всё цело?
— Не знаю. Возможно, частично. Возможно, ссылки рвутся с разной глубиной: где-то восстановимо по внешней зацепке, где-то нет. Но сам факт, что хоть что-то поднимается, меняет диагноз. Это не некроз. Это разрушение индекса.
— А это лечится?
Я посмотрел на неё.
— Это, — сказал я, — как минимум чинится костылями. Внешний индекс. Список зацепок, привязанный к содержимому. Ты даёшь мне ключевое слово — я поднимаю блок. Тебе не надо помнить за меня всю мою жизнь. Тебе надо помнить оглавление.
Она несколько секунд смотрела на тетрадь у себя на коленях.
Потом перевернула её обратной стороной, открыла последнюю страницу и написала сверху, крупно, печатными буквами:
ЗАЦЕПКИ
И ниже, первой строкой:
Стая. Восьмой этаж. Марк.
— Так? — спросила она.
— Так, — сказал я.
Она подняла голову, и я увидел, что у неё блестят глаза.
— Значит, я не зря её завела.
— Ты завела её из упрямства.
— Я завела её потому, что мне страшно, — сказала она. — Не порти.
Я не стал портить.
Погружение я сделал в третьем часу ночи.
Катя спала в кабине, свернувшись на сиденье. Я сидел на пороге десантного отсека, свесив ноги на ил, и держал планшет на коленях.
— Сторож. Таймер на двести секунд.
«Двести — это много».
— Я знаю, сколько это. Таймер.
«Принято».
— И ещё. Пиши всё, что я буду говорить вслух. Всё подряд, даже бессвязное.
«Принято».
Я вошёл в дамп.
Это было не похоже на сеть. В сети есть движение, направление, живые потоки. Дамп был мёртвым — застывший слепок четырёх минут чужого разговора, вырванный из контекста.
Я развернул его.
Сначала это был шум: четыреста двадцать килобайт серой каши, висящей в пустоте. Я сфокусировался, и каша начала расслаиваться.
Верхний слой — телеметрия. Координаты, скорости, заряд, температура приводов. Мусор, но по нему видна была структура обмена: каждая единица выплёвывала свой статус двадцать раз в секунду, и остальные его принимали. Нет главного. Все говорят со всеми.
Мой протокол. Я узнал его по ритму, как узнают походку.
Второй слой — целеуказание. Здесь было интереснее: они голосовали. Когда «Шершень» увидел броневик, он не отдал приказ — он внёс предложение, и остальные десять за полторы миллисекунды проголосовали. Решение о нашем уничтожении принималось демократически.
Забавно.
Третий слой я искал дольше всего. Служебный. Тот, который идёт перед каждым пакетом и в котором лежит подпись.
Нашёл.
И остановился.
Я ожидал увидеть замену. Ожидал, что там, где стоял корень «Шварц», теперь стоит корень «Штерн», и мой ключ выброшен на помойку вместе со всеми потрохами.
Там было не так.
Подпись была двухслойной.
Внизу, в самом фундаменте, лежал оригинальный корневой сертификат. Мой. Шестьдесят четыре символа, сгенерированные в две тысячи двадцать шестом году, с меткой издателя, которую я помнил наизусть, потому что сам её и придумывал.
Он был на месте. Никуда не делся. Ни одна железка в этом рое не смогла бы работать без него, потому что на нём была завязана вся нижележащая криптография.
А поверх него лежал второй слой. Более поздний, толстый, грубо сшитый: сертификат Корпорации, который перехватывал все запросы авторизации и отвечал на них сам, не пропуская вниз.
Это была не замена.
Это была надстройка. Крышка.
Они не смогли вырвать мой корень — вырвать его означало убить всю архитектуру. Они положили сверху свой слой и замкнули на него все входящие запросы.
Как если бы поверх фундамента дома залили вторую плиту и стали считать, что дом теперь их.
Я потянулся к нижнему слою, чтобы посмотреть, откликнется ли он.
ЗАПРОС ПЕРЕХВАЧЕН УРОВНЕМ 2.
КЛЮЧ НЕ РАСПОЗНАН.
Крышка не пускала.
Я походил вокруг неё. Попробовал сбоку, попробовал через диагностический подканал, попробовал через обработчик ошибок. Везде одно и то же: любой запрос вниз перехватывался и гасился наверху.
Изнутри её было не поднять. Но она существовала физически. Она лежала в памяти каждой машины, занимала место, требовала обработки. И у неё был свой протокол обновления — потому что сертификаты имеют срок, и кто-то должен был их продлевать.
Значит, есть канал, по которому крышку кладут. Значит, есть точка, где её можно снять.
Не в поле. Не на дороге. На заводе, где эти машины собирают. Или на терминале, с которого их прошивают.
Я запомнил структуру целиком, до последнего байта заголовка, и пошёл на выход.
И тут меня накрыло.
Не боль. Хуже.
Ощущение падения при полной неподвижности: будто из-под сознания выдернули опору, и оно ухнуло вниз, в собственный подвал. Я увидел мелькание — куски без связи, лица без имён, коридор, чья-то рука, вспышка сварки, — и всё это пронеслось мимо и провалилось дальше.
«Двести секунд».
Сигнал ударил в череп. Я вынырнул.
Планшет лежал у меня на коленях. Ноги свесились в ил, и ил был тёплым от моей крови: капало давно и много.
Я вытер лицо рукавом.
— Сторож. Что я говорил?
«Запись есть. Воспроизвожу».
Из динамика пошёл мой собственный голос. Тихий, монотонный, без интонаций:
«Двухслойная. Не замена. Крышка... сертификат издателя, две тысячи двадцать шестой... снимается только с прошивочного терминала... надо на завод... Марк говорил, что так и будет, Марк говорил, что рано или поздно...»
Пауза.
«...кто такой Марк?»
Запись кончилась.
Я сидел в трубе и смотрел на чёрную воду под ногами.
Потом достал из кармана куртки сложенный вчетверо лист — я вырвал его вечером из Катиной тетради, пока она грела воду, и переписал туда её записи своей рукой. Просто для дубля, из инженерной привычки не держать критические данные в одном экземпляре.
Развернул.
Стая. Восьмой этаж. Марк.
Марк.
Я произнёс это вслух, дважды.
Ничего.
Ни свитера, ни колбы, ни дальнозоркости. Ни человека, который сидел через стол от меня четыре года. Осталась строчка в чужом почерке и моя собственная приписка на полях — я не помнил, когда её сделал: «Соболь М., вед. инж., отдел прикл. систем».
Данные о нём у меня были. Табельные.
Человека не было.
Четыре часа назад я поднял его из ничего, полный, живой, со свитером и кофе. Я держал его в руках.
И потратил на крышку.
Я аккуратно сложил лист и убрал обратно в карман.
Потом взял планшет и записал в рабочий журнал, в раздел «Затраты»:
Операция: анализ протокола авторизации роя.
Длительность: 200 с.
Результат: структура подписи установлена. Корень цел. Требуется прошивочный терминал.
Стоимость: 1 ед. (Соболь М.).
Я перечитал последнюю строчку.
Потом стёр «1 ед.» и написал «Марк».
Потом подумал ещё и приписал: «восстановлению не подлежит; зацепка не сработала».
Утром я разбудил Катю.
Она села, растирая лицо, увидела моё и замерла.
— Опять?
— Да.
— Кого?
— Того, о ком я рассказывал вечером.
Она открыла тетрадь на нужной странице и молча повернула ко мне. Три четверти страницы её кривым почерком: свитер, колба, дальнозоркость, «Лёх, я себе дверку оставлю», пароль.
— Читай, — сказала она.
Я прочитал.
Это было как читать досье на постороннего. Информация усваивалась, укладывалась, становилась знанием. Я мог теперь сказать про него что угодно.





