Czytaj książkę: «Код 47»
Глава 1. Сорок семь
Утро началось с дождя. Мелкого, нудного, почти осеннего, хотя на календаре стоял июль. Антон Смирнов стоял у окна своей квартиры на девятом этаже и смотрел, как капли разбиваются о стекло, собираясь в мутные струйки. Он не любил дождь. Не из-за сырости или серости — к этому он привык за тридцать два года жизни в большом городе. Дождь напоминал ему о том, что мир несовершенен, что в нём есть хаос, который невозможно просчитать. А Антон Смирнов привык всё просчитывать. Это была его работа. Его жизнь. Его проклятие.
Он допил остывший кофе, машинально поставил чашку в раковину и прошёл в прихожую. Зеркало отразило худощавого мужчину с растрёпанными тёмными волосами и воспалёнными глазами. Вчера он опять засиделся до трёх ночи, отлаживая модуль поведенческого анализа. Система, которую они разрабатывали в закрытом институте прикладной кибернетики, требовала постоянного внимания. Она была капризна, как избалованный ребёнок, и опасна, как взведённый курок.
Антон натянул серую ветровку, проверил, взял ли пропуск, и вышел из квартиры. Лифт, как назло, застрял на первом этаже. Он спускался пешком, считая ступеньки. Двадцать три, двадцать два, двадцать один... Счёт помогал успокоиться. С детства он считал всё: шаги, машины за окном, слова в предложениях. Это была его личная форма контроля над реальностью. Реальность, в отличие от кода, не поддавалась отладке.
На улице дождь усилился. Антон раскрыл зонт и зашагал к метро, старательно обходя лужи. Прохожие сновали мимо, и он невольно отмечал: вон тот мужчина в кожаной куртке нервно оглядывается через плечо — вероятно, опаздывает; женщина с собачкой на поводке смотрит в телефон и не замечает, что поводок натянулся; подросток в наушниках пинает урну — агрессия, но незначительная. Антон тряхнул головой, отгоняя профессиональную привычку. Он не на работе. Пока не на работе.
В институте пахло свежей техникой и кофе. Охранник на входе, дядя Вася, кивнул ему, не отрываясь от кроссворда. Антон приложил пропуск к турникету и прошёл в лабораторию, где уже гудели серверы и светились мониторы. Его рабочее место находилось в углу, за перегородкой из матового стекла. На столе царил творческий беспорядок: распечатки с алгоритмами, три кружки из-под кофе, механическая клавиатура с подсветкой. Он включил компьютер и уставился на экран, ожидая загрузки.
— Доброе утро, Антон. — Рядом возникла фигура в ярко-жёлтой ветровке. Это был Кирилл Ветров, коллега и по совместительству единственный человек в отделе, с которым Антон поддерживал нечто большее, чем служебные отношения. Кирилл был на два года моложе, носил бородку и вечно жевал жвачку. — Ты чего такой кислый? Опять до ночи сидел?
— Отлаживал второй контур, — ответил Антон, не поворачивая головы. — Он всё ещё даёт ложные срабатывания на агрессивных подростках. Понимаешь, система видит всплеск тестостерона и адреналина и сразу интерпретирует как повышенный риск. А это всего лишь гормоны.
— Ну так добавь возрастной коэффициент, — Кирилл плюхнулся на стул рядом, и его жвачка громко щёлкнула. — Или соцопрос. Ты же у нас гений.
— Соцопрос — это субъективно. А система должна быть объективной. Иначе грош ей цена.
Кирилл хмыкнул и покачал головой. Он работал с Антоном уже полтора года и привык к его перфекционизму. В институте Антона считали странным, но уважали. Его алгоритмы ложились в основу «Кода 47» — секретного проекта, о котором за пределами лаборатории знали лишь несколько человек. Официально система называлась «Прогностический модуль вероятностных поведенческих девиаций». Неофициально — «Код 47». Потому что сорок семь процентов — это был порог. Если система выдавала человеку вероятность совершить убийство выше сорока семи процентов, его ставили на особый учёт. Что это означало на практике, Антон старался не думать. Он был тестировщиком, а не судьёй.
В лабораторию вошёл руководитель проекта — Вадим Львович Гринберг, грузный мужчина с седыми висками и усталыми глазами. Он бросил на стол папку и объявил:
— Через час начинаем прогон полной базы. Министерство требует отчёт к концу недели. Нам нужно протестировать систему на десяти тысячах реальных профилей. Все данные уже загружены в закрытый сегмент. Антон, ты отвечаешь за верификацию. Кирилл — за визуализацию. Вопросы?
— Только один, — поднял руку Антон. — Откуда профили? Мы же договаривались, что не будем использовать данные реальных людей без их согласия.
Гринберг поморщился.
— Это анонимизированные данные. Обезличенные. Никаких имён, только поведенческие паттерны. Социальные сети, банковские транзакции, геолокация. Всё в рамках закона.
Антон хотел возразить, но передумал. Он знал, что спорить с Гринбергом бесполезно. Проект курировали сверху, и «рамки закона» трактовались очень широко. Антон утешал себя тем, что он всего лишь тестировщик. Он не принимает решений. Он проверяет, чтобы система не ошибалась. Но где-то в глубине души он понимал: если система не ошибается, чья-то жизнь может рухнуть. Или не рухнуть — а может быть, наоборот, спастись. Это была этическая дилемма, которую он предпочитал не трогать.
Прогон начался ровно в десять. Антон сидел перед тремя мониторами, на которых бесконечными рядами ползли цифры. Он следил за процентами: 12, 15, 8, 23, 4... Большинство профилей имели низкий код. Но иногда система выдавала всплески: 35, 42, 46... Антон помечал их для дополнительной проверки. Всё шло гладко. Слишком гладко, как показалось ему через два часа.
— Кирилл, глянь, — позвал он. — В секторе семьсот двенадцать аномалия. Код сорок один, но поведенческий профиль не совпадает с типичными триггерами. Похоже на ошибку кластеризации.
Кирилл подошёл, наклонился к экрану, и его жвачка на секунду замерла.
— Действительно, странно. Может, сбой в данных? Проверь источник.
Антон запустил диагностику. Источник оказался чистым. Он потратил ещё полчаса, но так и не нашёл причины. В конце концов он решил отложить эту аномалию и продолжить прогон. Но что-то царапало его изнутри. Он привык доверять системе, но ещё больше привык доверять своей интуиции. А интуиция говорила: здесь что-то не так.
К обеду они сделали перерыв. Кирилл ушёл в столовую, Антон остался в лаборатории, жуя бутерброд и просматривая логи. В какой-то момент он отвлёкся и машинально ввёл в командную строку свой собственный идентификатор. Это было почти рефлекторно: он хотел проверить, как система обрабатывает данные тестировщика, если тот случайно попадёт в выборку. Он не собирался ничего анализировать. Просто посмотреть.
На экране появилась карточка. Фамилия, имя, отчество — Смирнов Антон Сергеевич. Возраст — тридцать два. Род занятий — программист. И большая цифра в правом верхнем углу: 47.
Антон моргнул. Наверное, показалось. Он обновил страницу. Цифра не изменилась. Сорок семь процентов. Ровно порог. Он почувствовал, как холодный пот выступил на лбу. Это была ошибка. Система не могла выдать ему такой код. Он же не убийца. Он мухи не обидел. Ну, почти. В детстве он дрался с соседским мальчишкой, но это было давно и не считается. Он даже рыбу не ловит, потому что жалко.
Он прогнал диагностику профиля. Система выдала расшифровку: повышенный уровень скрытой агрессии, латентная враждебность к авторитетам, склонность к навязчивым состояниям, эпизоды деперсонализации. Антон усмехнулся. Деперсонализация? У него? Да он просто устал. А скрытая агрессия — это же бред. Он тихий, спокойный человек. Он никого не ненавидит.
Но цифра 47 не исчезала. Она пульсировала на экране, как нарыв. Антон попытался найти ошибку в алгоритме, но система работала корректно. Все входные данные были валидны. Профиль был построен на основе его реальных действий: геолокация, покупки, сообщения в мессенджерах, даже пульс с фитнес-браслета. Он сам дал согласие на обработку данных, когда устраивался на работу. Тогда это казалось формальностью.
— Что за черт? — прошептал он.
В этот момент вернулся Кирилл, жуя яблоко.
— Ты чего бледный, как смерть? — спросил он. — Увидел свой код?
Антон вздрогнул. Он не думал, что это так заметно.
— С чего ты взял?
— Да у тебя лицо перекосило. Дай посмотрю. — Кирилл подошёл и заглянул через плечо. — Ого. Сорок семь. Серьёзно?
— Это ошибка, — быстро сказал Антон. — Система неправильно интерпретирует мои данные. Я же тестировщик. У меня стресс на работе. Наверное, это как-то влияет.
Кирилл присвистнул.
— Ну, сорок семь — это граница. Ещё немного, и тебя поставят на учёт. Шучу. — Он похлопал Антона по плечу. — Не парься. Это же тестовый прогон. Завтра всё пересчитают.
Но Антон не мог не париться. Он закрыл свой профиль, но цифра осталась в памяти. Она жгла его изнутри. Он попытался вернуться к работе, но мысли путались. Кто он такой, чтобы система считала его потенциальным убийцей? Что в его поведении могло вызвать такой высокий показатель? Он начал перебирать в памяти последние месяцы. Может, он слишком часто смотрел криминальные сериалы? Или у него был период депрессии, когда он неделю не выходил из дома? Или те сообщения, которые он писал в сердцах своему начальнику, но так и не отправил? Система ведь анализирует и черновики тоже, если они сохраняются в облаке.
После работы Антон не пошёл домой. Он остался в лаборатории, дождался, пока все уйдут, и снова открыл свой профиль. На этот раз он решил копнуть глубже. Он выгрузил полный отчёт и начал читать его построчно. Система отмечала всё: как он водит машину (агрессивное торможение), как он пишет комментарии в социальных сетях (сарказм, скрытая угроза), как он реагирует на стресс (повышенный кортизол). Были даже записи с камер наблюдения в метро, где он якобы «бросал враждебные взгляды» на пассажиров. Антон не помнил никаких враждебных взглядов. Он просто смотрел в пол или в телефон.
Он попытался смоделировать ситуацию: если бы он действительно захотел кого-то убить, кого бы это могло быть? И тут его осенило. Система не просто выдаёт вероятность. Она указывает на потенциальную жертву. В отчёте был раздел «Объект вероятностной агрессии». Антон пролистал до него и замер. Там стояло имя. Нет, не имя. Там стоял идентификатор. И этот идентификатор он узнал.
Это был код его соседа по лестничной площадке. Того самого, с которым они уже полгода воевали из-за парковочного места. Антон никогда не думал, что ненавидит его настолько сильно. Но система считала иначе. Она утверждала, что вероятность убийства этим конкретным человеком в состоянии аффекта составляет сорок семь процентов. И этот человек — он, Антон Смирнов.
Он откинулся на спинку стула и закрыл глаза. В голове шумело. Это был не сбой. Это был приговор. Система, которую он сам помогал создавать, теперь указывала на него. И он не знал, что с этим делать. Он мог пойти к Гринбергу и сказать: «Ваша система ошибается». Но Гринберг не поверит. Он скажет: «Антон, ты слишком близко к сердцу принимаешь». Или хуже: «Может, тебе стоит отдохнуть?» И тогда его отстранят от проекта. Или ещё хуже — сообщат куда следует.
Антон открыл глаза. На экране всё ещё светилась цифра 47. Он вдруг понял, что это не просто число. Это предупреждение. И если он не разберётся, кого он якобы должен убить, то может случиться непоправимое. Не потому, что он убийца. А потому, что система может подтолкнуть его к этому. Или потому, что кто-то другой прочитает этот отчёт и решит действовать на опережение.
Он сохранил отчёт на флешку, стёр все следы своего запроса и вышел из лаборатории. На улице дождь уже закончился, но воздух был тяжёлым и влажным. Антон шёл домой пешком, не замечая дороги. В голове крутилась одна мысль: «Сорок семь. Сорок семь. Сорок семь». И где-то на периферии сознания бился вопрос: а что, если система права? Что, если в нём действительно что-то сломалось, и он сам не замечает, как превращается в монстра?
Дома он первым делом подошёл к окну и посмотрел на парковку. Машина соседа, старенькая «Лада», стояла на его месте. Антон почувствовал, как внутри поднимается волна раздражения. Он сжал кулаки. И в этот момент понял: система не ошибается. Она просто видит то, что он сам предпочитает не замечать.
Он отвернулся от окна и включил компьютер. Нужно было найти ответы. И для этого ему придётся нарушить все правила.
Он сел за стол и несколько секунд просто смотрел на тёмный экран монитора. В отражении виднелось его собственное лицо — осунувшееся, с плотно сжатыми губами. Антон провёл ладонью по щетине, словно пытаясь стереть усталость, и нажал кнопку питания. Компьютер загудел, загружаясь медленнее обычного, и это ожидание показалось ему издевательски долгим.
Первым делом он проверил, не осталось ли следов его ночного запроса. В корпоративной сети стояла система логирования, и любой несанкционированный доступ к личным профилям фиксировался автоматически. Антон знал это лучше других — он сам писал модуль аудита. Но у него был доступ администратора тестового сегмента, и это давало небольшую лазейку. Он ввёл несколько команд, аккуратно подчищая журналы, словно хирург, удаляющий опухоль, не задевая здоровые ткани. Пальцы двигались быстро, почти автоматически. Он не позволял себе думать о том, что нарушает протокол. Сейчас это было неважно.
Когда логи были очищены, он открыл сохранённый на флешке отчёт. Файл лежал в папке с ничего не значащим названием, замаскированный под архив старых тестов. Антон прокрутил страницу до раздела «Объект вероятностной агрессии» и впился взглядом в идентификатор. Номер совпадал с профилем его соседа — Геннадия Петровича Кравцова, пятидесяти восьми лет, пенсионера, бывшего инженера. Антон знал о нём немного: жил один, жена умерла несколько лет назад, дочь приезжала редко. Машина — старая «Лада», которую он мыл каждое воскресенье, даже в дождь. И парковочное место, из-за которого они конфликтовали, было единственной точкой соприкосновения. Антон никогда не задумывался, что за этим человеком может скрываться что-то ещё.
Теперь он смотрел на его профиль иначе. Система не просто указала на Кравцова как на потенциальную жертву. Она построила целую модель их взаимоотношений: накопление раздражения, эскалация конфликта, отсутствие конструктивного диалога. Алгоритм отмечал, что Антон за последние три месяца семь раз писал жалобы в управляющую компанию, дважды вызывал полицию по поводу «незаконной парковки» и однажды в сердцах бросил в окно соседа снежок. Снежок, конечно, был детской выходкой, но система интерпретировала его как акт агрессии. Антон поморщился. Он и забыл про этот снежок.
Но самое неприятное было в другом. В отчёте содержался прогноз: при сохранении текущей динамики вероятность физического насилия со стороны Антона возрастала до шестидесяти двух процентов в течение полугода. Шестьдесят два. Это уже не граница. Это приговор.
Антон откинулся на спинку стула и потёр глаза. Нужно было успокоиться. Паника — плохой советчик. Он ещё раз перечитал отчёт, теперь уже целиком, пытаясь найти хоть какую-то зацепку. И нашёл. В разделе «Факторы среды» система отмечала, что в квартире Кравцова зафиксированы аномальные показатели электромагнитного фона. Скачок произошёл около двух месяцев назад, и с тех пор держался на повышенном уровне. Антон знал, что их дом старый, проводка изношена, но такие колебания были нетипичны. Он решил проверить.
Следующим шагом стало изучение открытых источников. Антон открыл браузер и вбил в поисковик имя соседа. Результатов оказалось немного: упоминания в старых газетах, страница в социальной сети, которую Кравцов вёл неохотно, пара комментариев на форуме автолюбителей. Антон пролистал их, не находя ничего примечательного. Но потом наткнулся на архивную заметку в местной газете десятилетней давности. Заголовок гласил: «Инженер Кравцов уволен за халатность». Антон открыл текст. Речь шла о том, что на заводе, где работал Кравцов, произошла авария — задымление в цехе. Никто не пострадал, но комиссия нашла нарушения в проектной документации. Кравцов был крайним. Его уволили, лишили премии, но уголовного дела не возбудили. В заметке упоминалось, что он пытался оспорить решение, писал жалобы, но безуспешно.
Антон задумался. Это было десять лет назад. С тех пор Кравцов вышел на пенсию, жил тихо, ни с кем не конфликтовал. Но система видела в нём что-то ещё. Может быть, обиду, которая не прошла? Или страх, который трансформировался в агрессию? Антон не знал. Он вообще плохо понимал людей. С кодом было проще.
Он решил проверить электромагнитный фон. У него дома был старый детектор излучения, купленный ещё в студенчестве для экспериментов. Антон достал его с антресолей, стряхнул пыль и направился к двери. Но на пороге остановился. Что он скажет соседу? «Здравствуйте, я тут проверить, не фонит ли у вас проводка?» После всех жалоб и вызовов полиции это выглядело бы странно. Кравцов мог просто не открыть. Или хуже — вызвать полицию уже на Антона.
Антон вернулся в комнату и задумался. Нужен был другой подход. Он снова сел за компьютер и открыл схему дома. Их квартиры были смежными, стена между ними была общей. Электромагнитное поле могло проникать и к нему. Антон провёл детектором вдоль стены, разделявшей квартиры. Прибор пискнул. Уровень был повышен, но не критично. Однако в углу, ближе к вентиляционной шахте, стрелка зашкалила. Антон нахмурился. Это было странно. В вентиляции не должно быть электрических приборов.
Он решил проверить шахту. В его квартире был небольшой люк, закрытый пластиковой решёткой. Антон открутил винты, снял решётку и заглянул внутрь. Пахнуло пылью и сыростью. Он посветил фонариком. В глубине шахты, на уровне его глаз, что-то блеснуло. Антон протянул руку и нащупал небольшой металлический предмет. Это был миниатюрный передатчик, размером с пуговицу, прикреплённый к стенке шахты магнитом. Антон похолодел. Он знал такие устройства. Они использовались для сбора данных — аудио, электромагнитных импульсов. Но кто мог его установить? И зачем?
Он аккуратно снял передатчик и осмотрел его. На обратной стороне был выгравирован серийный номер. Антон вернулся к компьютеру и ввёл его в базу. Результат пришёл мгновенно: устройство принадлежало институту прикладной кибернетики. То есть его собственному отделу. Антон почувствовал, как земля уходит из-под ног. Кто-то из коллег установил жучок в вентиляционной шахте между его квартирой и квартирой Кравцова. И этот кто-то имел доступ к тем же данным, что и он сам.
В голове пронеслась целая вереница мыслей. Может быть, это часть тестирования? Может быть, Гринберг решил проверить систему в реальных условиях, не поставив его в известность? Или это чья-то личная инициатива? Антон вспомнил, как Кирилл в последнее время часто задерживался на работе, ссылаясь на дополнительные задачи. Вспомнил, как Гринберг нервничал перед прогоном, словно чего-то опасался. Вспомнил странную аномалию в секторе семьсот двенадцать, которую так и не смог объяснить.
Он посмотрел на передатчик. Устройство было активным — на нём мигал крошечный светодиод. Значит, оно всё ещё передавало данные. Антон быстро прикинул: если жучок стоит здесь уже два месяца, то он записал всё, что происходило в квартире Кравцова, и всё, что происходило у него самого. Все разговоры, все звуки, все электромагнитные импульсы. И эти данные могли быть использованы для построения профиля. Его профиля. И профиля соседа.
Вот почему система выдала такой высокий код. Она анализировала не только открытые данные, но и скрытую запись. И в этой записи, возможно, были моменты, когда Антон кричал, ругался, угрожал. Он вспомнил, как месяц назад, вернувшись поздно вечером, обнаружил, что Кравцов снова занял его место. Он стоял на лестничной площадке и в сердцах сказал сам себе: «Убью старика, честное слово». Это была пустая фраза, вырвавшаяся от усталости и раздражения. Но система не различала контекст. Она зафиксировала её как реальную угрозу.
Антон сжал передатчик в кулаке. Теперь у него был выбор: уничтожить устройство и сделать вид, что ничего не было, или попытаться выяснить, кто его установил. Он выбрал второе. Он положил передатчик в пакет, спрятал в ящик стола и решил утром поговорить с Кириллом. Но сначала нужно было успокоиться.
Он вышел на балкон. Ночь была тёплой, город светился огнями, где-то вдалеке играла музыка. Антон смотрел на парковку, где стояла машина Кравцова, и думал о том, что этот человек, сам того не зная, стал частью его личного кошмара. Система связала их воедино, и теперь Антон не мог просто отмахнуться. Ему нужно было понять, кто и зачем собрал эти данные. И главное — что ещё этот кто-то знает о нём самом.
Он вернулся в комнату и включил компьютер снова. На этот раз он открыл не отчёт, а внутреннюю переписку отдела. Он искал любые упоминания о дополнительных тестах, о скрытых устройствах, о наблюдении. Ничего. Только стандартные протоколы и отчёты. Тогда он заглянул в журнал доступа к серверу. Там были записи о том, кто и когда выгружал данные. И среди привычных имён — Гринберг, Кирилл, он сам — мелькнуло одно незнакомое: «Техник-оператор Внешний». Антон нахмурился. Такого сотрудника в штате не было. Он проверил по базе — действительно, никакого «Внешнего» не существовало. Это была учётная запись, созданная в обход системы. И она скачивала данные профилей как раз в те дни, когда был установлен жучок.
Антон почувствовал, что за ним кто-то наблюдает. Возможно, прямо сейчас. Он резко обернулся, но в комнате никого не было. Только тени и тишина. Он снова посмотрел на экран. Учётная запись «Техник-оператор Внешний» была активна. И последний вход произошёл всего час назад.
Антон понял, что нужно действовать быстро. Он скопировал все логи на флешку, отключил компьютер и выдернул шнур из розетки. Потом подошёл к окну и задёрнул шторы. В голове стучала одна мысль: «Кто-то знает, что я узнал. И этот кто-то, возможно, уже рядом».
Он лёг на диван, не раздеваясь, и уставился в потолок. Сон не шёл. Перед глазами стояла цифра сорок семь. И имя Кравцова. И этот жучок в вентиляции. Всё это было слишком запутанно для одного вечера. Но Антон знал одно: он не позволит системе решать свою судьбу. Он сам найдёт ответы. Даже если для этого придётся нарушить все правила, которые он сам же и написал.
За окном снова начался дождь. Капли стучали по стеклу, словно отсчитывая время. Антон закрыл глаза и попытался дышать ровно. Завтра будет новый день. И новые вопросы. А пока нужно было просто выжить эту ночь.
Глава 2. Ложные срабатывания
Антон не спал. Он лежал на диване, уставившись в потолок, и слушал, как дождь за окном то затихает, то снова набирает силу. Мысли в голове гонялись по кругу, как белки в колесе. Жучок в вентиляции. Учётная запись «Техник-оператор Внешний». Цифра сорок семь. Имя Кравцова. Всё это сплелось в тугой узел, который не давал дышать. К четырём утра он всё-таки провалился в тяжёлое, рваное забытьё, но уже через два часа его разбудил будильник — резкий, безжалостный, словно специально созданный для того, чтобы вырывать человека из сна в самый неподходящий момент.
Антон поднялся, чувствуя себя разбитым. Тело ломило, во рту пересохло, голова гудела. Он посмотрел на себя в зеркало и поморщился: под глазами залегли тёмные круги, лицо осунулось, словно он постарел за одну ночь на несколько лет. Он умылся холодной водой, выпил две чашки крепкого кофе и попытался собраться с мыслями. Первым делом нужно было поговорить с Кириллом. Но как? Просто подойти и спросить: «Слушай, а ты случайно не ставил жучок в моей вентиляции?» Абсурд. Нужно было действовать осторожно, не выдавая своих подозрений.
На улице было свежо после ночного дождя. Асфальт блестел, отражая серое небо, лужи хлюпали под ногами. Антон шёл к метро и машинально отмечал детали: вон мужчина в спецовке курит у подъезда, вон женщина выгуливает собаку, вон стайка школьников пробежала мимо, громко смеясь. Обычный город, обычные люди. Но теперь Антон смотрел на них другими глазами. Каждый из них мог быть частью системы. Каждый мог быть тем самым «техником-оператором». Он тряхнул головой, отгоняя паранойю. Слишком далеко он зашёл. Нужно было сосредоточиться на фактах.
В институте его встретил привычный шум серверов и запах кофе. Кирилл уже был на месте — сидел за своим столом, уткнувшись в монитор, и жевал очередную жвачку. Услышав шаги, он обернулся и улыбнулся.
— О, явился. Ты чего такой помятый? Опять всю ночь код писал?
Антон поставил сумку на стол и постарался придать лицу непринужденное выражение.
— Не выспался. Сосед опять полночи сверлил что-то. Я уже думаю, может, мне к нему в дверь постучать и предложить помощь? А то он так и будет мучить стены.
Кирилл хмыкнул.
— Ты? Помощь? Ему? Да вы же воевали из-за парковки. Или уже помирились?
— Не помирились. Но я решил, что пора заканчивать эту войну. Устал. — Антон помолчал, потом добавил как бы невзначай: — Слушай, а ты вчера во сколько ушёл? Я задержался, хотел с тобой кое-что обсудить, но тебя уже не было.
Кирилл пожал плечами.
— Да я около семи ушёл. У меня же ещё дополнительные задачи от Гринберга. Ты же знаешь, он вечно нагружает. А что ты хотел обсудить?
— Да так, по поводу аномалии в секторе семьсот двенадцать. Я покопался в данных, там что-то странное с кластеризацией. Хотел посоветоваться.
Кирилл откинулся на спинку стула и посмотрел на Антона с любопытством.
— И что там?
— Пока не понял. Но чувствую, что это не просто сбой. — Антон выдержал паузу, наблюдая за реакцией Кирилла. Тот выглядел спокойным, даже безразличным. — Слушай, а ты не в курсе, кто такой «Техник-оператор Внешний»? Я вчера в логах наткнулся на эту учётку. Странное имя.
Кирилл нахмурился.
— Не знаю такого. Может, кто-то из системных администраторов? Они иногда создают временные учётки для удалённого доступа.
— Может быть. Но она скачивала данные профилей. Причём как раз в те дни, когда мы тестировали новый модуль. Я хочу проверить, откуда был вход.
Кирилл пожал плечами.
— Ну проверь. Только осторожно. Если это санкционированный доступ, Гринберг может не оценить, что ты копаешься в его вотчине.
— Я и не собираюсь копаться. Просто хочу понять, что происходит. — Антон замялся, потом добавил: — А ты не замечал ничего странного в последнее время? Ну, в лаборатории? Может, кто-то приходил без предупреждения, или данные менялись?
Кирилл посмотрел на него внимательнее.
— Антон, ты меня пугаешь. Ты что, подозреваешь кого-то? У нас же закрытый проект. Сюда просто так не войдёшь.
— Я не подозреваю. Просто спрашиваю. — Антон понял, что разговор зашёл в тупик. Кирилл либо ничего не знал, либо умело притворялся. В любом случае, продолжать было рискованно. — Ладно, забудь. Пойду кофе налью.
Он отошёл к кофейному автомату, чувствуя, как напряжение сковывает плечи. Кирилл вёл себя обычно. Слишком обычно? Антон не знал. Он вообще плохо разбирался в людях. В коде всё было логично: если условие — то действие. В жизни же всё было зыбко, как болото. Он налил себе ещё одну чашку и вернулся за стол.
Рабочий день тянулся медленно. Антон пытался сосредоточиться на текущих задачах, но мысли то и дело возвращались к жучку и учётной записи. Он решил проверить, с какого компьютера был вход в систему под «Техником-оператором». Это было несложно: журналы сохраняли адреса. Он запустил запрос и через несколько минут получил результат. Вход был совершён с терминала в лаборатории. Номер терминала совпадал с компьютером Кирилла.
Антон почувствовал, как холодок пробежал по спине. Он посмотрел на Кирилла. Тот сидел, уткнувшись в монитор, и что-то печатал. Его лицо было спокойным, даже безмятежным. Может быть, это совпадение? Может быть, Кирилл просто одалживал свой компьютер кому-то другому? Или кто-то воспользовался его учётной записью, пока он отходил? В лаборатории было всего несколько человек, и все они знали друг друга. Но Антон не мог отделаться от ощущения, что за этим стоит что-то большее.
Он решил не делать поспешных выводов. Сначала нужно было проверить, кто ещё мог иметь доступ к терминалу Кирилла. Антон открыл список сотрудников, у которых были права администратора. Кроме него самого и Гринберга, в списке значился ещё один человек — Олег Тарасов, системный администратор, который числился в штате, но появлялся в лаборатории редко. Антон знал его поверхностно: тихий, незаметный мужчина лет сорока, с вечной папкой под мышкой. Он занимался обслуживанием серверов и не лез в дела проекта.
Антон решил поговорить с Олегом. Но сначала нужно было закончить с текущими задачами, чтобы не вызывать подозрений. Он заставил себя вернуться к работе, но пальцы плохо слушались, а мысли путались. Он несколько раз перепутал переменные в коде и в конце концов отложил клавиатуру. Сосредоточиться не получалось.
В обеденный перерыв Антон вышел из лаборатории и направился в серверную. Олег обычно обедал там, в маленькой комнатке за стеллажами с оборудованием. Антон толкнул дверь и увидел Тарасова, сидящего за столом с бутербродом и термосом. Тот поднял глаза и удивлённо поднял брови.
— Антон? Ты чего здесь? Что-то с сервером?
— Нет, всё в порядке. — Антон прикрыл за собой дверь. — Олег, у меня к тебе вопрос. Ты не знаешь, кто мог создать учётную запись «Техник-оператор Внешний»? Я вчера в логах увидел, хочу понять, что это.
Олег прожевал бутерброд и задумался.
— «Техник-оператор Внешний»? Первый раз слышу. Может, Гринберг создал для какого-нибудь аудита? Он иногда привлекает сторонних специалистов.
— Но почему тогда вход был с терминала Кирилла?
Олег пожал плечами.
— Не знаю. Может, Кирилл и создавал. Спроси у него.
— Я спрашивал. Он говорит, что не в курсе.
Олег отложил бутерброд и посмотрел на Антона внимательнее.
— Слушай, Антон, ты какой-то дёрганый. Что-то случилось? Ты же знаешь, у нас в проекте всякое бывает. Может, это просто тест, о котором тебя не предупредили. Гринберг любит сюрпризы.
— Может быть. Но я хочу проверить. Ты можешь посмотреть, с каких ещё терминалов входили под этой учёткой?
Олег вздохнул и вытер руки салфеткой.
— Ладно. Дай мне пару минут. — Он повернулся к своему ноутбуку и защёлкал клавишами. Антон стоял рядом, чувствуя, как в груди нарастает напряжение. Через несколько минут Олег нахмурился. — Странно.
— Что?
— Эта учётка была создана с терминала Гринберга. Но входы совершались с компьютера Кирилла. И ещё с одного адреса. Внешнего.
— Внешнего? То есть извне института?
— Да. Кто-то подключался к нашей сети удалённо. Через защищённый канал. Но это же violates... то есть нарушает все протоколы безопасности. У нас же закрытый контур.
Антон почувствовал, как пол уходит из-под ног. Кто-то извне имел доступ к их данным. И этот кто-то использовал учётку, созданную Гринбергом, и терминал Кирилла.
— Ты можешь сказать, откуда было подключение?
Олег покачал головой.
— Адрес замаскирован. Но я могу отследить, когда это происходило. Последний раз — вчера вечером, около одиннадцати.
Вчера вечером. Антон в это время был в лаборатории. Он как раз проверял свой профиль. Значит, кто-то в это же время скачивал данные. Возможно, этот кто-то видел, как он копается в системе.
— Спасибо, Олег. Ты очень помог. Только никому не говори о нашем разговоре.
Олег посмотрел на него с тревогой.
— Антон, ты меня пугаешь. Что происходит? Может, стоит сообщить Гринбергу?
— Пока не стоит. Я сам разберусь. — Антон вышел из серверной, чувствуя, как сердце колотится в груди. Теперь у него было две зацепки: терминал Кирилла и внешнее подключение. И ещё Гринберг, который создал учётку. Кто из них был замешан? Или все трое?
Он вернулся в лабораторию и столкнулся с Кириллом в дверях. Тот выглядел взволнованным.
— Антон, тебя Гринберг ищет. Срочно. Он какой-то злой.
Антон похолодел. Неужели кто-то заметил его ночные манипуляции с логами? Или Олег уже доложил? Он постарался сохранить спокойствие.
— Иду. Спасибо.
Кабинет Гринберга находился в конце коридора. Антон постучал и, услышав резкое «войдите», открыл дверь. Гринберг сидел за столом, заваленным бумагами, и выглядел усталым и раздражённым. Он поднял глаза на Антона и жестом указал на стул.
— Садись. У нас проблема.
Антон сел, стараясь не выдавать волнения.
— Что случилось?
— Мне только что звонили из министерства. Они недовольны предварительными результатами. Говорят, система даёт слишком много ложных срабатываний. Особенно в секторе семьсот двенадцать. Ты же занимался этой аномалией. Что там?
Антон почувствовал облегчение. Речь шла о работе, а не о его ночных похождениях. Но тут же напрягся снова. Сектор семьсот двенадцать — это же та самая аномалия, которую он не смог объяснить. И которая, возможно, связана с его собственным профилем.
— Я проверил данные. Источник чистый. Но кластеризация действительно странная. Похоже, что в выборку попали профили, которые не должны были там оказаться. Возможно, ошибка при загрузке.
Гринберг поморщился.
— Мне не нужны предположения. Мне нужны факты. К концу недели отчёт. Если система ошибается, мы должны знать почему. Иначе проект закроют. Ты понимаешь, что это значит?
Антон кивнул. Он понимал. Закрытие проекта означало конец финансирования, конец работы, конец всему, что он создавал последние два года.
— Я разберусь. Думаю, мне нужно ещё раз проверить входные данные. Возможно, кто-то внёс изменения вручную.
Гринберг пристально посмотрел на него.
— Кто-то? Ты кого-то подозреваешь?
— Пока нет. Но я заметил, что в системе есть учётная запись, которая не числится в штате. «Техник-оператор Внешний». Вы не знаете, кто это?
Гринберг на секунду замер. Его лицо осталось непроницаемым, но Антон заметил, как дёрнулся уголок его рта.
— Это моя учётка. Я создал её для аудита. Иногда мне нужно проверять данные без вашего ведома. Это часть моей работы.
Антон почувствовал, как внутри всё сжалось. Гринберг лгал. Или не договаривал. Учётка была создана с его терминала, но входы шли с компьютера Кирилла и извне. Если это был аудит, зачем использовать чужой терминал и внешнее подключение?
— Понятно. Спасибо за разъяснение. Я продолжу проверку.
— Иди. И помни: отчёт к пятнице.
Антон вышел из кабинета, чувствуя, как земля уходит из-под ног. Гринберг явно что-то скрывал. И Кирилл тоже. Или Кирилл был пешкой в чужой игре. Антон не знал, кому верить.
Вернувшись на рабочее место, он сделал вид, что погружён в анализ данных. Но на самом деле он обдумывал план. Нужно было проверить компьютер Кирилла. Пока тот отлучится, можно установить программу, которая будет записывать все действия. Но это было рискованно. Если Кирилл заметит, всё рухнет.
Он дождался, пока Кирилл уйдёт на перекур, и быстро подключил к его терминалу небольшую флешку с программой мониторинга. У него было всего несколько минут. Пальцы дрожали, когда он вводил команды. Наконец, программа установилась. Антон вытащил флешку и вернулся за свой стол, стараясь дышать ровно.
Кирилл вернулся через десять минут, жуя жвачку и что-то напевая. Он сел за компьютер и даже не заметил, что в системе что-то изменилось. Антон выдохнул.
Вечером, когда все начали расходиться, Антон задержался. Он снова открыл свой профиль, но на этот раз не для того, чтобы смотреть на цифру. Он хотел понять, какие данные послужили основой для такого высокого кода. Он выгрузил полный отчёт и начал читать. Там были записи с камер наблюдения в метро, где он якобы «бросал враждебные взгляды». Были фрагменты его сообщений в социальных сетях, где он ругал правительство и высказывался о несправедливости. Были данные с фитнес-браслета, которые показывали повышенный пульс в моменты стресса. И была запись с жучка в вентиляции. Та самая фраза: «Убью старика, честное слово».
Антон сжал кулаки. Он вспомнил тот вечер. Он возвращался домой уставший, злой, голодный. Машина Кравцова снова стояла на его месте. Он стоял на лестничной площадке и говорил сам с собой. Это была всего лишь фраза. Но система восприняла её всерьёз.
Он закрыл отчёт и посмотрел на экран. Теперь он знал, что делать. Нужно было найти доказательства того, что жучок установлен незаконно. И тогда его код аннулируют. Но для этого нужно было выяснить, кто его установил. И зачем.
Антон выключил компьютер и вышел на улицу. Было уже темно. Он дошёл до дома, поднялся на свой этаж и остановился у двери Кравцова. Из-за двери доносился звук телевизора. Антон постоял минуту, потом поднял руку и нажал звонок. Он сам не знал, зачем это делает. Может быть, хотел посмотреть в глаза человеку, которого система назначила его жертвой.
Дверь открылась. На пороге стоял Кравцов — худой, сгорбленный, в старом халате. Он посмотрел на Антона с опаской.
— Чего тебе?
— Геннадий Петрович, я хотел извиниться. За парковку. И за всё остальное. Я был неправ.
Кравцов моргнул. Его лицо выразило удивление, смешанное с недоверием.
— Ты серьёзно?
— Серьёзно. Я устал от этой войны. Давайте жить мирно. Место ваше, я найду другое.
Кравцов помолчал, потом кивнул.
— Ладно. Мир так мир. — Он закрыл дверь.
Антон вернулся в свою квартиру и прислонился к стене. Он сделал первый шаг. Но чувствовал, что это только начало. Система не прощает ошибок. И если он не докажет, что код ошибочен, кто-то другой может решить его судьбу. А он не собирался становиться жертвой собственного творения.Антон стоял в прихожей, прислушиваясь к тишине за дверью. Шаги Кравцова удалились, щёлкнул замок телевизора — старик вернулся к своим вечерним передачам. Всё было как обычно, и в то же время совершенно иначе. Антон только что сделал то, чего не делал за все полгода конфликта: он отступил. И это отступление не было поражением. Оно было тактическим ходом, попыткой выиграть время и сбить систему со следа. Если жучок записывал их разговор, алгоритм должен был зафиксировать снижение агрессии. Может быть, это немного собьёт код. Может быть, нет. Антон не питал иллюзий: одна фраза не перечеркнёт два месяца взаимной неприязни.
Он прошёл в комнату, включил настольную лампу и сел за компьютер. Флешка с программой мониторинга, установленная на терминале Кирилла, должна была уже собрать первые данные. Антон настроил её так, чтобы она отправляла отчёты на его домашний адрес через защищённый канал. Он открыл почту и увидел письмо без темы. Внутри был архив с логами. Антон распаковал его и углубился в чтение.
Программа фиксировала все действия Кирилла за последние несколько часов: какие файлы он открывал, какие команды вводил, какие сайты посещал. Антон прокручивал список, пока не наткнулся на странную последовательность. Вскоре после того, как Кирилл вернулся с перекура, он открыл терминал и ввёл команду, которая обращалась к скрытому разделу сервера. Антон знал этот раздел: там хранились резервные копии профилей, которые не входили в официальную выборку. Те самые профили, которые могли быть использованы для дополнительного тестирования без ведома команды. Кирилл скопировал один из них на внешний носитель. Имя файла было зашифровано, но Антон заметил закономерность: оно совпадало с идентификатором его собственного профиля.
Он откинулся на спинку стула и закрыл глаза. Кирилл. Значит, всё-таки Кирилл. Но зачем? Он же не мог не понимать, что делает. Он знал правила безопасности не хуже Антона. Если он копировал профиль, значит, у него была на то причина. Или приказ.
Антон снова открыл логи и проверил, куда ушёл файл. Программа зафиксировала подключение к внешнему адресу. Тот же самый адрес, который Олег назвал «внешним подключением». Кто-то за пределами института получал данные. И этим кто-то мог быть任何人, кто угодно — от конкурентов до спецслужб. Антон не знал, что хуже.
Он сделал копию логов и сохранил её в трёх разных местах: на флешке, в облаке под чужим паролем и на старом внешнем диске, который держал в ящике стола. Потом отключил компьютер и некоторое время сидел в темноте, собираясь с мыслями. Завтра нужно было поговорить с Кириллом. Но не в лаборатории, где стены могли иметь уши. И не по телефону, который могли прослушивать. Нужно было место, где они могли бы говорить свободно.
Он вспомнил о маленьком кафе недалеко от института, где обычно обедали сотрудники. Там были отдельные кабинки, и можно было сидеть, не привлекая внимания. Антон решил, что пригласит Кирилла туда под предлогом обсуждения аномалии в секторе семьсот двенадцать. Это было достаточно правдоподобно.
Утром следующего дня он пришёл на работу пораньше, чтобы успеть до появления Кирилла. В лаборатории было тихо, только гудели серверы. Антон сел за свой стол и сделал вид, что изучает данные. Когда Кирилл появился, он выглядел бодрым и выспавшимся. Жвачка, как всегда, была во рту.
— Доброе утро, — сказал Антон как можно более непринуждённо. — Слушай, у меня есть идея по поводу той аномалии. Может, обсудим за обедом? В кафе, что на углу. Там и народу меньше.
Кирилл пожал плечами.
— Давай. Мне всё равно нужно отойти от компьютера, а то глаза устают.
В полдень они вышли из института и направились к кафе. День был пасмурный, но без дождя. Антон молчал, собираясь с духом. Кирилл что-то рассказывал о новой игре, которую он скачал на выходных, но Антон почти не слушал. Он думал о том, как начать разговор.
В кафе они заняли угловую кабинку. Антон заказал кофе, Кирилл — сэндвич и сок. Когда официантка ушла, Антон положил руки на стол и посмотрел Кириллу прямо в глаза.
— Кирилл, я знаю про учётную запись. И про жучок в вентиляции. И про то, что ты копировал мой профиль.
Кирилл замер. Жвачка застыла у него во рту. Он медленно прожевал её и проглотил, чего обычно никогда не делал.
— О чём ты?
— Не надо. Я видел логи. Ты входил под «Техником-оператором» с твоего терминала. И скачивал данные на внешний адрес. Я хочу знать, зачем.
Кирилл отвёл взгляд. Его лицо побледнело, и Антон впервые увидел в нём не беззаботного коллегу, а человека, который чего-то боится.
— Антон, ты не понимаешь. Это не то, что ты думаешь.
— Тогда объясни.
Кирилл помолчал, потом наклонился ближе и понизил голос.
— Мне приказали. Гринберг. Он сказал, что это часть тестирования. Что нужно проверить систему в реальных условиях, на живых людях. Он сказал, что ты согласился.
Антон почувствовал, как внутри всё оборвалось.
— Я ни на что не соглашался. Он врёт.
— Я тоже начал это подозревать, — признался Кирилл. — Сначала всё выглядело логично: мы тестируем систему на реальных данных, но анонимно. Потом он попросил установить жучок. Сказал, что это для сбора акустических данных, чтобы улучшить модель. Я не знал, что он направит его на тебя.
— А внешний адрес? Кому ты отправлял файлы?
Кирилл покачал головой.
— Я не знаю. Гринберг дал мне адрес и сказал, что это сервер министерства. Я не проверял.
Антон откинулся на спинку дивана. Всё складывалось в единую картину. Гринберг использовал Кирилла, а Кирилл даже не понимал, что участвует в чём-то незаконном. Или делал вид, что не понимает. Антон не мог быть уверен до конца. Но сейчас было важнее другое: если Гринберг приказал установить жучок, значит, он знал о конфликте с Кравцовым. И, возможно, специально подстроил ситуацию, чтобы получить высокий код. Но зачем?
— Кирилл, ты понимаешь, что это значит? — спросил Антон. — Если Гринберг собирал данные незаконно, то и мой код недействителен. Его можно оспорить. Но для этого нужны доказательства.
— У меня есть копия приказа, — тихо сказал Кирилл. — Гринберг прислал его по внутренней почте. Я сохранил, на всякий случай. Думал, может пригодиться.
— Где она?
— Дома. На личном ноутбуке.
— Принеси её завтра. Только осторожно. Если Гринберг узнает, что мы копаем под него, он может уничтожить все улики.
Кирилл кивнул. Он выглядел испуганным, и Антон впервые почувствовал к нему что-то похожее на жалость. Кирилл был пешкой, как и он сам. Но пешки тоже могут стать ферзями, если дойдут до конца доски.
Они вернулись в институт порознь, чтобы не вызывать подозрений. Антон сел за свой стол и сделал вид, что работает. Но мысли были далеко. Он думал о Гринберге. Зачем ему понадобилось подставлять собственного тестировщика? Может быть, он хотел проверить систему на человеке, который знает её изнутри? Может быть, это был эксперимент, который вышел из-под контроля? Или Гринберг выполнял чей-то заказ, и Антон был лишь побочным эффектом?
Вечером, когда все ушли, Антон снова открыл свой профиль. На этот раз цифра изменилась. Она стала сорок восемь. Всего на один пункт, но это было движение вверх. Антон похолодел. Его попытка примириться с Кравцовым не сработала. Система зафиксировала что-то ещё. Может быть, его разговор с Кириллом? Может быть, его страх? Он не знал. Но он понимал, что времени у него меньше, чем он думал.
Он выключил компьютер и поехал домой. В метро он старался не смотреть на людей, чтобы не давать системе новых поводов. Но он всё равно чувствовал на себе взгляды. Может быть, это была паранойя. Может быть, за ним действительно следили. Он не мог отделаться от ощущения, что каждый его шаг записывается и анализируется. И это ощущение было хуже любого приговора.
Дома он первым делом проверил вентиляционную шахту. Жучок всё ещё был там, но Антон не стал его трогать. Если он уберёт устройство, Гринберг поймёт, что его раскрыли. Лучше было оставить всё как есть и сделать вид, что ничего не произошло. Он заклеил решётку скотчем, чтобы создать видимость, что просто заделал щель, и вернулся в комнату.
Ночью он снова не спал. Лежал на диване и смотрел в потолок. В голове крутились обрывки мыслей: приказ Гринберга, внешний адрес, цифра сорок восемь. Он пытался найти логическую связь, но всё ускользало. Единственное, что он знал точно: он должен найти доказательства раньше, чем система сделает следующий шаг. Иначе его код перевалит за пятьдесят, и тогда его судьба решится без его участия.
Утром Кирилл принёс флешку с копией приказа. Они встретились в мужском туалете, где не было камер, и Кирилл быстро передал её Антону.
— Здесь всё, — сказал он шёпотом. — Дата, подпись Гринберга, указание установить устройство в вентиляционной шахте между квартирами. И адрес, куда отправлять данные.
Антон кивнул и спрятал флешку во внутренний карман куртки.
— Спасибо. Теперь нужно проверить, кто стоит за этим адресом. Я займусь этим вечером.
— Антон, — Кирилл замялся. — Я хотел извиниться. Я не знал, что всё так обернётся. Я думал, это просто тест.
— Я знаю. Забудь. Сейчас важно другое.
Они разошлись по своим местам. Антон весь день работал как автомат, отвечая на письма и делая отчёты. Но внутри него росло напряжение. Он чувствовал, что за ним наблюдают. Гринберг несколько раз проходил мимо его стола и бросал странные взгляды. Может быть, он что-то подозревал. Может быть, Кирилл уже проговорился. Антон не знал.
Вечером он поехал домой и сразу сел за компьютер. Он ввёл адрес из приказа в поисковую систему и запустил проверку. Результат пришёл через несколько минут: адрес принадлежал частной компании «Прогноз-Аналитика», зарегистрированной в другом городе. Антон никогда о ней не слышал. Он открыл сайт компании, но там была только заглушка с контактными данными. Никакой информации о деятельности.
Он решил позвонить по указанному номеру. Ответил женский голос.
— «Прогноз-Аналитика», добрый день.
— Здравствуйте. Я хотел бы узнать, кто у вас отвечает за приём данных от института прикладной кибернетики.
На том конце провода повисла пауза.
— Простите, я не понимаю, о чём вы. Мы не сотрудничаем с институтами.
— Но у меня есть адрес, который ведёт к вам. И данные, которые отправлялись на этот адрес.
Женщина помолчала, потом сказала:
— Подождите минуту. — Слышно было, как она кому-то говорит. Потом в трубке раздался мужской голос.
— Кто это? — спросил он резко.
— Это Антон Смирнов, тестировщик системы «Код 47». Я хочу знать, зачем вы получаете данные из нашего института.
Мужчина усмехнулся.
— Антон Смирнов. Мы вас ждали. Приезжайте завтра в наш офис. Адрес на сайте. И приходите один. Иначе разговор не состоится.
Он положил трубку. Антон остался сидеть с телефоном в руке. Его ждали. Значит, всё это время он был не просто тестировщиком. Он был частью эксперимента. И теперь ему предлагали встретиться с теми, кто этот эксперимент контролировал. Он не знал, ловушка это или шанс. Но выбора у него не было. Он должен был пойти. Ради себя. Ради Кравцова. Ради всех, чьи судьбы решала система.
Darmowy fragment się skończył.