03:17. Экран телефона вспыхнул красным предупреждением: «Экстренный сброс ключей. Требуется ваше подтверждение». Иван Климов щёлкнул «ОК» — и сразу же раздался второй звонок, на этот раз с внутреннего номера головного офиса банка.
— Иван Петрович? — голос дежурного инженера дрожал, словно линия перегружена. — Система «Шора-UX» выдала новый приватный ключ… он оказался публичным. Мы потеряли исповедальность всех транзакций. Миллиарды рублей клиентов висят в открытом доступе.
Иван мгновенно надел пальто и спустился по лестнице в гараж. Закинувся в служебную «Приору», он вырулил на пустые просёлочные улицы, ведущие к дата-центру за городом. Зима уже отступала, но ветер резал лицо так, будто он только что выскочил из полярной ночи.
Перед входом его встретил охранник:
— Господин Климов, что-то случилось серьёзное?
— Всё в порядке, — Иван отдал пропуск и прошёл внутрь. — Рассказывайте.
В машинном зале воздуха почти не было: серверы работали на пределе, вентиляторы ревели, а с дисплеев неконтролируемо мигали красные надписи – «ERROR», «DATA BREACH», «UNSECURED CHANNEL». За одним из терминалов стоял молодой инженер с побелевшими от паники глазами.
— Я… я ввёл команду сброса по умолчанию, — выдавил он сквозь зубы. — Это тестовый ключ, я думал, что он отключён.
— По умолчанию нельзя, — холодно ответил Иван. — Покажите журналы доступа.
Они вместе просмотрели логи: исполненные скрипты, незапланированные пересоздания ключей, обращения к открытым портам. Ошибка лежала глубже, чем кто-то мог подумать.
— Восстановите архивы за последний час, — приказал Иван. — И удерживайте фронт.
Инженер кивнул и бросился к сервером, а Иван пошёл к центральному пульту, где горели кнопки «Press Y to restore backups» и «Press N to rollback system». За спиной мерцали цифровые часы: было ещё 37 секунд до запуска процедуры аварийной окапы.
Иван машинально достал телефон и увидел СМС от сына:
«Пап, мы с мамой приехали в новую квартиру. Ты обещал помочь собрать мебель в выходные».
Душа сжалась. Он с грустью вспомнил, что уже две недели обещает семье сесть в семейный выходной уголок, но всё время уходит на бесконечные тесты и совещания. Еще неделя — и ребёнок уже обидится на отца, который всё время «спасает банки, но не может спасти отношения».
Он прикоснулся к чёрной кнопке «Y». Но рука задрожала. На экране пульсировал запрос: «Восстановить бэкапы уничтожит транзакции за последние 24 часа. Отозвать кредиты и отменить платежи». Зеленый «Y» манил, обещая вернуть контроль, но под ним скрывался риск отката: сотни клиентов останутся без доступа к своим счетам, многие не смогут расплатиться за лечение, задолженности накроются штрафами.
Иван отвёл взгляд к «N»: «Rollback system уничтожит страницу архива, но сохранит недавние операции». Это значило, что банковская история клиентов останется целой, но алгоритм скорощи вновь подтолкнет его в работу, как по маслу, только без учета человеческого фактора. Да, жизнь клиентов будет течь дальше, но сколько раз ему придётся жертвовать — снова и снова?
Он вспомнил, как отец учил его шахматам: «Иногда надо пожертвовать ферзем, чтобы выиграть партию». Только здесь речь шла не о фишках на доске, а о судьбах реальных людей. Отец давно умер, но голос его звучал в голове отчётливо: «Играй только тогда, когда уверен в результате».
Иван задержал дыхание, провёл взглядом по капающему воде потолку серверной, где карниз замёрз и струйка капала, обещая потоп в любой момент. «Нажми N», — сквозь шум вентиляции донёсся тонкий голос.
Он резко убрал палец от «Y» и нажал «N». Тут же компьютер выдал: «System rollback initiated by operator». Серверы засветились жёлтым, потом зелёным. Ошибки исчезали, лампы мигнули, как в настоящей медклинике — сначала тревога, потом плексиглас чистого воздуха.
В это мгновение дверь сорвалась, и инженер бросился внутрь:
— Иван Петрович! У нас получилось! Бэкапы на защищённой ленте, система вернулась в рабочий режим, никто не потерял данные!
Иван молча кивнул. Он устало присел на стул. Из динамиков послышался хрустальный звук — служебное радио наконец передало спокойное: «Ситуация стабилизирована. Клиенты в безопасности».
Под утро он вышел из серверной. Красный диск ночного неба сменялся бледно-голубыми полосами рассвета, а город пробуждался от длительного сна. Жаркий кофе в буфете казался ему сначала горьким, но он проглотил чашку до дна, ощущая, как горечь уходит вместе с усталостью.
В пресс-центре банка вывесили официальное заявление: «Аварийный сбой системы предотвращён благодаря опытным действиям ведущего специалиста. Ущерб нулевой». Фразы звучали устойчиво, но Иван понимал, сколько бессонных ночей стоило их составить.
Он набрал телефон своего начальника:
— Здравствуйте. Да, я ждал… Спасибо за доверие.
— Ты справился, — голос начальника звучал тепло. — Береги себя. Мы на пару дней закрываем доступ к «Шоре» для апгрейда безопасности.
Иван выключил телефон и набрал номер жены:
— Привет. Я скоро.
— Иван, я так скучаю. Как ты?
— Я жив. И мы обязательно соберем ту мебель в выходные.
Сын, услышав голос отца, заплакал от радости:
— Пап, ты обещал!
— Обещаю, — повторил Иван.
Когда он вышел из здания банка, солнце уже поднялось достаточно высоко, чтобы освещать снежные остатки зимы. Он посмотрел на телефон и увидел новое уведомление от QuantumKey: «Резервная копия ключей заархивирована. Система готова к обновлению алгоритма».
Иван вздохнул и убрал телефон в карман. Он никогда больше не нажмёт «Разрешить контроль» без крайней нужды, понял, что технологии — это инструмент, но не хозяин. Путь к восстановлению доверия сложнее, чем любой квантовый код, но он готов сделать этот ход.
Сколько раз тебе придётся выбирать между «Y» и «N», прежде чем ты поймёшь: важнейшая битва — не за миллиарды на счетах, а за собственную человечность?