ルート証明書のない家

ぼくが最初に作った本格的な機能は、ログイン失敗回数の上限ではなく、リフレッシュトークンの使い回しを検知して静かに無効化する仕組みだった。 そういう仕事が好きだった。 派手な画面を作るより、誰かの不正ログインが朝まで起きないことのほうが、ぼくにはずっときれいに思えた。 二十六歳の…

10641字 約15分

 ぼくが最初に作った本格的な機能は、ログイン失敗回数の上限ではなく、リフレッシュトークンの使い回しを検知して静かに無効化する仕組みだった。

 そういう仕事が好きだった。

 派手な画面を作るより、誰かの不正ログインが朝まで起きないことのほうが、ぼくにはずっときれいに思えた。

 二十六歳の春、ぼくは社員十六人の小さな認証スタートアップで働いていた。名前は NestPass という。中小のECサイトや病院予約サイト向けに、パスワードレス認証と多要素認証をまとめて提供する、地味で、でもなくなると困る種類の会社だった。

 導入先には、海沿いの町の小さな歯科医院も、夜だけ注文が増える焼き菓子店もあった。ぼくらは世界を変えているとは思っていなかった。ただ、誰かの朝の受付や、深夜の決済が止まらないようにしていた。

 コードベースはきれいではなかった。創業三年目の会社らしく、急いで増築した家みたいだった。TypeScript で書かれた管理画面があり、Go で書かれた認証APIがあり、Terraform のディレクトリには誰も触りたがらない古い変数名が眠っていた。

 でも、その感じも嫌いじゃなかった。

 テセウスの船みたいなものだと、ぼくはよく思っていた。部品を入れ替え続けても同じサービスだと言えるのか、という、あの古い話だ。もっとも、スタートアップの現場では、そういう問題は哲学というより請求書の問題になる。今月も動いていて、解約されていなければ、とりあえず同じ船でいい。

 その春の終わり、ぼくは会社の GitHub に、ひとつの Issue が立つ前に閉じられた形跡を見つけた。

 通知だけ残っていて、本文は消えていた。

 件名は英語で、こうだった。

you understand trust better than your company does

 いたずらだろうと思った。

 でも、その日の夜、個人の Proton メールに暗号化されたメッセージが届いた。

 差出人は aletheia

 ギリシャ語で「真理」とか「覆いを外すこと」とか、そういう意味だと大学時代に読んだ本で知った。哲学の授業はほとんど寝ていたのに、その単語だけ覚えていたのは、語感が少し冷たかったからだと思う。

 メールには、ぼくが三週間前に直した脆弱性のことが書かれていた。

 古いミラーリポジトリに残っていた deploy key が、もし漏れていたらどう使うか。リフレッシュトークンの回転処理が、どういうタイミングで競合しうるか。ぼくが pull request の説明欄に書かなかったことまで、向こうは知っていた。

 最後に、一行だけこうあった。

「君は鍵の意味を理解している。だから、鍵を壊す側に来ないか」

1. スカウト

 無視することもできた。

 でも、ぼくは返信した。

 好奇心があったし、少しだけ、技術を見込まれたことがうれしかったのだと思う。

 送られてきたリンクは一度きり有効のビデオ会議室だった。ブラウザを立ち上げる前に、ぼくは私物ノートPCではなく、会社の検証用 Linux マシンを使った。カメラもマイクも切り、通信は別回線へ逃がした。

 やることが少し大げさで、自分でも笑えた。

 でも、そういう笑い方はだいたい、あとで笑えなくなる。

 画面に現れたのは、顔のないアバター三つだった。

 男か女かも分からない声が、順番に話した。どの声も感情を消していた。録音に少しノイズを足しただけかもしれなかった。

「我々は Aletheia。国家でも企業でもない」

「認証は現代の封建制だ。誰が誰であるかを決める少数の管理者が、通行証を配っている」

「君の会社も、その小さな一部だ」

 ぼくは画面の外でメモを取った。

 主張は理解できた。半分くらいは、理屈としては分かる。

 認証基盤というのは、結局のところ「この署名を信じる」「この鍵を本物だとみなす」「この証明書がこの名前を代表していると仮定する」という、公理の束だ。数学と同じで、最初に置いた前提が腐っていれば、その上にどれだけ美しい証明を積んでも全部だめになる。

 ただ、彼らの話し方には、議論ではなく選別の匂いがした。

 病院、学校、自治体、給与システム、配送網。

 Aletheia は、それらを「依存対象」と呼んだ。

 人間がそこで暮らしている感じが、一回もなかった。

「何をしてほしいんですか」とぼくは聞いた。

「次の段階へ進む準備だよ」と、一番低い声が言った。

「認証基盤は壊れないから支配の道具になる。壊れると証明すればいい」

「実験、ということですか」

「歴史はだいたい、そう呼ばれる」

 その一言で、ぼくは嫌になった。

 歴史を持ち出して人を壊す人間は、たいてい自分の手の汚れ方を古典のせいにする。

 ぼくは画面に向かって言った。

「断ります」

 少し間があった。

「理由は」

「あなたたちは、秘密を暴くことと、他人の生活を壊すことを混同している」

 向こうは少しだけ静かになった。

 それから、最初からいちばん喋らなかった三つ目の声が、そこで初めて口を開いた。

「君はまだ、きれいな境界を信じているんだな」

 その言い方だけが、不思議に耳に残った。

 会議はそこで終わった。

 最後に短いメッセージが表示された。

「拒否は了解した。だが、拒否は中立ではない」

2. 攻撃

 その二週間後、うちの障害通知チャンネルが真っ赤になった。

 午前二時十一分。

 最初は、管理画面にログインできないテナントが数社という話だった。よくある障害の入り方だ。DNS か Redis か、あるいは誰かが金曜の夕方に変な feature flag を切り忘れたか。

 でも、五分後には様子が変わった。

 ログインに失敗した利用者へ送るはずの再発行メールが、正しいドメイン署名つきで、偽の回復ページを案内していた。しかも、そのメールはうちの通常系から送られていた。

 さらに悪かったのは、その時点で認証 API のコンテナイメージも差し替わっていたことだ。

 署名は有効。

 CI の履歴はきれい。

 監査ログも、一見すると破綻していなかった。

 世界が静かに壊れる時は、こういう壊れ方をする。エラーを吐いて止まるのではなく、正しそうな顔をしたまま、ひとつずつ前提が腐る。

 夜明けまでに分かったことは三つあった。

 一つ目。数年前に作られ、その後だれも使っていないと思われていたミラーリポジトリが残っていたこと。

 二つ目。その古い deploy key が失効されないまま、ビルド補助用の workflow にだけ生きていたこと。

 三つ目。その workflow から参照される自己ホスト runner のイメージが、数日前にきれいにすり替えられていたこと。そしてその runner が、認証 API の署名用ジョブと、通知メールのテンプレート配布ジョブの両方に触れていたこと。

 ひどく古典的で、ひどく現代的だった。

 城壁の外から破られたのではなく、増築の廊下の先に放置された合鍵から入られた。

 ぼくは三ヶ月前、その deploy key を消そうと提案していた。

 議事録にも残っていた。

 でも、障害の最中にそういうことはあまり意味がない。

 水が入ってきた家で、「先月あの窓のゴムが痛んでると言いましたよね」と言うのは正しい。しかし正しさは、床を乾かしてくれない。

 午前中のあいだ、海沿いの歯科医院から三回電話が来た。予約台帳に入れない患者がいる、午後の矯正が始められない、という声だった。ぼくはそのたびに、「今、迂回手順を送っています」と答えた。

 昼過ぎ、代表と投資家が入った緊急会議で、ぼくはひとまず業務停止を命じられた。

 ぼく自身が疑われたわけではない、と彼らは言った。

 でも、「認証基盤の責任者をいったん外す必要がある」という言い方は、だいたい別の言葉で言い換えられる。

 夕方には、解雇通知が届いた。

 法的には整っていた。

 丁寧な文面だった。

 その丁寧さが、いちばんつらかった。

 私物をまとめてオフィスを出る時、デザイナーの久保さんが、何か言いかけてやめた。営業の森本さんは、ぼくと目を合わせないようにしていた。そういうのを責める気にはなれなかった。小さな会社では、誰かの首が切られる時、全員が少しずつ共犯みたいな顔になる。

 ビルを出ると、雨が降っていた。

 駅まで歩くあいだに、知らない番号からメッセージが来た。

「鍵は、持ち主だけのものではない」

 Aletheia だった。

 その文面を読んだ時、胃がゆっくり冷えていった。

 ああ、これは報復だったのだと思った。

 断ったから壊された。

 しかも、壊されたのはぼくではなく、ぼくの周囲のほうだった。

 そういうやり方をする人たちだと、最初から言っていたのに、ぼくは少し遅れて理解した。

3. 再就職

 無職になって四日目、ぼくは都内の古いビルの六階で、ホワイトボードの前に立っていた。

 そこは 北辰 と呼ばれる小さなセキュリティチームのオフィスだった。会社というより、インシデント対応のための寄り合い所帯に近かった。メンバーは十数人。元 SRE、マルウェア解析屋、脅威インテリジェンス担当、パケットしか信じない人、法務に異常に強い人、そして夜中だけ妙に饒舌になる人がいた。

 流し台にはいつも誰かのマグカップが二つ残っていて、冷蔵庫にはカフェインの強い炭酸水と安い豆腐バーばかり入っていた。

 世界を救っている感じは、あまりなかった。

 世界に穴が開いた時、その穴にベニヤ板を打ちつけて朝まで保たせる仕事、という感じだった。

 ぼくを誘ったのは、真鍋志保さんという人だった。

 三十代後半くらいで、短く切った髪と、眠そうなのに一点も見落としていない目をしていた。

「NestPass の一次報告、あなたが書いたでしょう」

 最初の面談で、真鍋さんはそう言った。

「はい」

「よかったです。感情で書いてない。でも、自分が何を怖がっているかは隠してない」

 そんな読み方をされるとは思わなかった。

 真鍋さんは、机の上のノートをめくりながら続けた。

「それと、ミラーリポジトリの鍵失効を三ヶ月前から提案していた。投げ方も妥当。つまり、事故の前から事故の形を見ていた」

「見えていたのに、防げませんでした」

「防げなかった人間しか、次の防ぎ方を覚えない」

 それは慰めではなかった。

 運用の世界では、たぶん事実だった。

 ぼくは翌週から北辰で働き始めた。

 仕事は地味だった。

 CT ログを追う。失効証明書の伝播を確認する。OSS の署名鍵を再配布する。朝の五時に地方病院の情報システム担当へ電話して、今すぐ古い VPN 装置を切ってくださいと説明する。BGP のおかしな経路広告を見つけて、各所へ連絡する。怪しい PyPI パッケージや npm パッケージをひたすら掘る。

 ときどき、数学の本を読んでいる気分になった。

 たとえば閾値署名。

 鍵を一人に持たせるのではなく、五人に分け、三人以上がそろった時だけ有効にする仕組みだ。王の印章ひとつより、離れた町にいる五人の書記のうち三人が一致するほうが、たぶん中世より少しましだと思う。

 でも、実際の運用は数学ほど美しくない。

 誰かが寝坊するし、HSM は壊れるし、クラウドのリージョンは落ちるし、秘密分散の保管封筒を金庫の上段ではなく下段に入れたせいで監査が面倒になる。

 それでも、ぼくは北辰の仕事が好きだった。

 ここでは、守るという言葉が、支配と同義ではなかったからだ。

 秘密を全部見せろ、ではなく、見せなくてすむように設計しよう、という話が通じた。

 ゼロ知識証明という概念が好きだと、ぼくが何気なく言った時、真鍋さんが少しだけ笑ったのを覚えている。

「相手の秘密そのものは知らなくても、知っていることだけは確かめられる。あれ、技術である前に礼儀ですよね」

 そう言ったのはぼくだった。

 口にしてから、自分でも少し驚いた。

4. 戦争の準備

 夏の終わりごろから、Aletheia の名前は、単なる噂ではなく、具体的な痕跡として各地に現れ始めた。

 南米のパッケージミラーで短時間だけ配られた不正な更新。

 東欧の中堅認証局で起きた不可解な署名要求。

 中東の ISP を経由した数分間の経路ハイジャック。

 北米のクラウドビルド基盤に対する執拗な偵察。

 ひとつひとつは局所的だった。

 でも並べると、意図が見えてきた。

 彼らは金を盗みたいのではなかった。

 個人情報を売りたいのでもなかった。

 世界のいろいろな場所で、「この署名は本物だ」「この更新元は信用できる」「この名前はこのサーバのものだ」という、細い前提だけを狙っていた。

 ドアを壊すのではなく、蝶番の規格を壊そうとしていた。

 真鍋さんはホワイトボードに図を書いた。

 証明書、レジストリ、CI、時刻同期、 DNS、ルーティング。

 線が何本も引かれ、やがて蜘蛛の巣のようになった。

「彼らは世界を止める気はない」と真鍋さんが言った。

「もっと悪い。世界を動いたまま、信じられなくする気だ」

 ハンナ・アーレントの本に、全体主義は人に真理を与えるより先に、事実の足場を壊す、というような話があったのを、その時ふと思い出した。何が本当か分からない状態では、人は強い物語に従いやすくなる。

 Aletheia は、それをネットワークレイヤでやろうとしていた。

 十月、北辰は複数の CERT と組んで、緊急時用の信頼バンドルを用意し始めた。

 普段のルート証明書や自動更新が信用できなくなった場合でも、透明性ログと複数署名だけで最低限の真正性を確認できるようにする、仮設の橋みたいなものだった。

 きれいな設計ではない。

 でも、戦時中の橋はだいたいそうだ。

 ローマ街道のように千年もたせるためではなく、今夜、救急車が渡れるようにするために作る。

 ぼくはそのバンドル生成系の実装を担当した。

 Merkle 木のインデックス、署名閾値、キャッシュ破壊時のフェイルクローズ条件、オフライン鍵のローテーション手順、人的承認フロー。

 地味だった。

 地味で、しんどくて、でも生きている感じがした。

 十一月のある夜、マルウェア解析担当の鷲尾さんが、Aletheia の中継サーバから取れた断片を持ってきた。

「変な癖がある」

 見せられたのは、コメントではなく、変数名だった。

audit_sunday
blue_note
mother_room

 ありふれていると言えば、ありふれていた。

 でも、ぼくの手はその瞬間に冷えた。

 日曜の監査。

 青いノート。

 母の部屋。

 それは、ぼくの家にあった言葉だった。

 父は情報セキュリティの監査を仕事にしていた。会社でやるべきことと家でやってはいけないことの区別が、たぶんなかった。日曜の夜になると、家庭用ルータのログを吸い上げ、PC のブラウザ履歴を出力し、母の部屋の前にだけ置いた小さな録音機のランプを確認した。

 母は昔、押し入れの奥に手紙を隠していた。父はそれを「証跡のない通信」と呼んだ。

5. 兄の声

 十二月七日、Aletheia は実際にやった。

 あとで報道は「世界同時セキュリティテロ」と書いたけれど、起きていたことはもっと散らかっていて、もっと嫌だった。

 複数のソフトウェア配布網で、不正な更新が正規署名つきで配られた。

 いくつかの中堅認証局では不自然な証明書発行が走り、同時に失効情報の伝播が BGP 側から遅延させられた。

 いくつかの病院、港湾、自治体、物流事業者では、認証系の一部が信用できなくなり、更新を止めるべきか進めるべきかの判断だけで数時間が消えた。

 爆発は起きない。

 建物も燃えない。

 でも、救急搬送が遅れ、決済が止まり、出荷票が刷れず、管理者は「本物かどうか分からないパッチ」を前に立ち尽くす。

 ぼくはずっと端末の前にいた。

 緊急バンドルの署名を回し、ミラーを切り替え、失効対象を更新し、各拠点へフェイルクローズの条件を再通知した。世界中の誰かが書いた泥くさいスクリプトが、世界中の別の誰かの夜を一時間だけ延ばしていた。

 その途中で、ぼくの端末にだけ、ひとつの着信が来た。

 社内回線ではない。

 かなり古いやり方で、こちらの公開鍵に直接投げ込まれた音声チャネルだった。

 真鍋さんが「開いて」と言った。

 スピーカーにした瞬間、ぼくは声より先に沈黙を知った。

 人には、喋り方より、言葉の前に置く間のほうが残ることがある。

「湊」

 その呼び方を、十年ぶりに聞いた。

 ぼくは喉が動かなかった。

「……遼兄ちゃん」

 部屋の空気が、一段だけ冷えた気がした。

 真鍋さんは何も言わず、別端末で記録を取り始めた。

 兄は、少しだけ笑った。

「まだその呼び方するんだな」

 ぼくの兄、榊遼は、十七歳の冬に家を出て、それきりだった。

 母は泣きながら「あの子は人のものを盗んで出ていった」と言った。父は「管理できなかった例外だ」と言った。ぼくは中学生で、その説明を半分だけ信じた。

 信じた、というより、それ以上の説明がなかった。

 家庭には、警察の報告書みたいに整った事実は出てこない。あるのは、いちばん強い人の言い分だけだ。

「お前が Aletheia を?」

「始めたのは俺じゃない」と兄は言った。

「でも、今まとめているのは俺だ」

 モニタの向こうでは、世界中の認証系がまだ軋んでいた。

 なのに、ぼくの意識は急に、古い団地の三DKへ戻っていた。

 日曜の夜、父がルータの管理画面を開く音。

 家族全員のブラウザ履歴を紙に出力するプリンタ。

 母の部屋の前だけ、録音機のせいで、なぜかいつも少し静かだった廊下。

 そして、兄が隠していた青い大学ノート。

 あのノートには、ぼくのための簡単な暗号表が書いてあった。

 シーザー暗号なんかより少しましで、でも高校生が弟を喜ばせるには十分な、稚拙でやさしい秘密の作り方だった。兄は素数の並びをずらして使うと少し面倒になるのだと、得意げに説明した。

 父はそれを見つけた。

 その夜、兄は殴られた。

 殴られながら、「家族の中で暗号を使う必要があるのか」と何度も聞かれていた。

 必要があるに決まっていた。

 この家には、鍵をかけられる場所が一つもなかったからだ。

 あの頃の兄は、世界を壊したい人ではなかった。ただ、弟にだけでも引き出し一段ぶんの秘密を作ってやりたい人だった。

「お前、最初からぼくだと分かっていたのか」

「GitHub の commit を見れば分かる」

 兄はあっさり言った。

「他人に読まれることを想定したコードを書く癖、昔から変わらない」

「だからスカウトした?」

「だから、先に声をかけた」

「断ったら会社を壊した」

 そこで少しだけ、兄の声が止まった。

「あれはお前の会社だけを狙ったわけじゃない」

「でも、ぼくに見せるためにやった」

「……そうだ」

 真鍋さんが隣で目を閉じた。

 その短い沈黙に、軽蔑と理解が半分ずつ入っているのが分かった。

「遼兄ちゃん」とぼくは言った。

「兄さんは、父さんから逃げたんじゃなかったのか」

「逃げたよ」

「じゃあ、どうして父さんと同じやり方をする」

 兄はしばらく答えなかった。

 そのあいだにも、世界では署名の更新と失効の再配布が走り、誰かが復旧し、誰かが間に合わず、誰かが上司に怒鳴られていたはずだ。

 でも、ぼくにはその数十秒の沈黙のほうが、ずっと広かった。

「同じじゃない」と兄はやがて言った。

「俺は、支配したいんじゃない。支配の土台を壊したい」

「そのために病院も港も巻き込むのか」

「世界中が、あの家の拡張版だからだよ」

 ぼくは、すぐには反論できなかった。

 たしかに、ひどい認証設計はたくさんある。秘密を預かる側が強すぎるシステムも、透明性のない監視も、あとからあとから生えてくる。

 でも、だからといって壊していい理由にはならない。

 数学の公理に不満があるからといって、証明の途中にいる人間ごと紙を燃やしてはいけない。

6. 家

 兄の通話は、意図的に一つの中継点を長く踏んでいた。

 こちらをおびき寄せるためなのか、逆に見つけてほしかったのかは分からない。

 ただ、その中継点は偶然ではなかった。北辰側ではすでに数時間前から、攻撃の指揮系統に混じる家庭用回線の癖を追っていた。兄の着信は、その最後の答え合わせみたいに見えた。

 位置は、神奈川の古い住宅街だった。

 ぼくらが育った家のある場所だった。

 北辰の別チームと警察が各所へ走るなか、真鍋さんがぼくに言った。

「行く?」

「行きます」

「分かった。じゃあ、個人的な感情で判断しそうになったら、そのことだけ先に言って」

 それは信頼だった。

 人を信頼する時、全部を把握している必要はない。ただ、壊れそうな点を申告してもらえばいい。ぼくはその時、ゼロ知識証明のことを思い出した。秘密を明かさなくても、確かさの一部だけは渡せる。

 家はまだあった。

 外壁は塗り直されていたが、窓の大きさも、玄関横のひびも、そのままだった。

 父は三年前に死に、母は今、療養施設にいる。家は相続の途中で宙ぶらりんになっていたはずだった。

 玄関の鍵は替えられていた。

 けれど、二階の兄の部屋だけ、昔から外壁側に露出配線が伸びていた。その癖まで変わっていなかった。

 裏へ回ると、窓のすぐ下に新しい光ファイバの引き込みが見えた。

「詩人じゃなくて本当にエンジニアなんですね」と、同行していた若い捜査員が小さく言った。

「たぶん兄もです」

 部屋の中には、ラックが二本、折り畳み机が一つ、ノートPC が三台、ポータブル HSM が一台あった。

 そして兄がいた。

 思っていたより痩せていて、思っていたより普通の顔をしていた。

 世界規模のセキュリティテロを指揮する人間は、もっと神話的な顔をしていてほしい、と一瞬だけ思った。そうでないと困るのだ。兄であることが、あまりにも現実的だから。

「久しぶり」と兄が言った。

 まるでコンビニで偶然会ったみたいな言い方だった。

「何してるの」

「最後の署名待ち」

 机の上の端末には、Aletheia の次段階が表示されていた。主要な透明性ログのうち、応答の遅いミラー群へ偽の整合証明を押し込み、緊急バンドル側の信用まで崩す仕掛けだった。うまくいけば、復旧側の橋も折れる。

「やめて」

「その『やめて』、母さんそっくりだ」

 ぼくは息を吐いた。

「最低だな」

「知ってる」

 兄は少し笑った。でも、その笑い方には昔みたいな悪戯っぽさがなかった。

「湊、お前は覚えてるか。父さん、パスワードを紙に書かせて台所の引き出しに入れてただろ」

「覚えてる」

「家族に秘密は不要だって」

「覚えてる」

「俺、あの時に分かったんだよ。ほとんどのセキュリティは、秘密を守るためじゃない。誰が他人の秘密にアクセスできるかを決めるためのものなんだって」

 兄は HSM の上に指を置いた。

「ルート証明書って、結局は父親なんだよ。いちばん強いやつが『これを本物とする』と言う。あとはみんな従う」

 その比喩は、嫌になるくらいよく出来ていた。

 だからこそ、間違っていた。

「違う」とぼくは言った。

「違わない」

「違うよ。少なくとも、そうじゃないものを作ろうとしてる人たちがいる」

「北辰のことか」

「兄さんが最初にぼくに教えたの、覚えてる?」

 兄は黙った。

「暗号表をくれた時、兄さん、なんて言ったと思う」

 返事はなかった。

「『読ませなくていい。あるってだけ分かればいい』って言ったんだよ」

 兄の目が、そこで初めて少し動いた。

 ぼくは続けた。

「あれ、ゼロ知識証明みたいなものだよ。中身を見せなくても、知ってることは示せる。秘密を奪わなくても、信じる方法はある」

「理屈だ」

「そうだよ。理屈だ。理屈がないと、ぼくらはまた家族に戻る」

 兄は笑わなかった。

 部屋の隅で、ファンの音だけが回っていた。

 子どものころ、父が怒る前の家も、こういう音だった。パソコンとプリンタの小さな機械音がして、誰も喋らなくなる。

「湊」と兄が言った。

「俺は、お前の会社を壊した時、少しだけ期待してた。お前なら分かると思ってた」

「分かるよ」

 ぼくは言った。

「だから、兄さんが父さんになったことが分かる」

 兄はそこでようやく、ほんの少しだけ傷ついた顔をした。

 その顔を見て、ぼくは安心しなかった。

 人が傷つけられるということは、まだ戻れるという意味ではない。そこからもっと壊れることのほうが、たぶん多い。

 兄の右手が HSM に触れた。

 ぼくは一歩前に出た。

 その瞬間、真鍋さんが部屋の入口から低く言った。

「湊くん、左」

 反射で視線を振ると、ラック横の UPS に伸びる電源ラインが見えた。兄は次段階の署名自体を HSM で出すつもりだったが、前段の中継ノードはまだこの部屋の電源に依存していた。

 ぼくは足元のケーブルカバーを蹴り上げ、露出した電源プラグを引いた。

 部屋が一瞬だけ暗くなり、次に非常灯めいた青い光だけが残った。

 兄が舌打ちした。

 そのわずかな遅延のあいだに、北辰側では緊急バンドルの閾値署名がそろい、偽整合証明を弾く設定が各所へ流れた。

 世界規模の攻撃が止まる時、だいたいそういうものだ。

 天使も雷も降りない。

 誰かが、ただ正しいプラグを抜く。

7. 証明

 兄はその場で確保された。

 抵抗はしなかった。

 連行される前、兄はぼくに一度だけ言った。

「お前はちゃんと家を出たんだな」

 ぼくは答えられなかった。

 外に出ると、十二月の空気が痛いくらい冷えていた。

 住宅街は静かで、こんな場所から港や病院や物流網の夜が揺れていたのかと思うと、少し変な気分になった。世界史というのは広い地図の話に見えて、実際には狭い部屋の話であることが多い。王朝も戦争も革命も、けっきょくは誰かの食卓や寝室から始まる。

 数週間後、被害はだいたい収束した。

 完全ではない。完全な復旧という言葉は、だいたい広報資料の中にしかない。

 でも橋は落ちなかった。

 病院の認証系は持ちこたえ、港湾システムは一部手動に切り替わり、自治体の更新基盤は仮設の信頼バンドルで年末を越えた。泥くさい実装は、たまに人命を支える。

 ぼくは今も北辰で働いている。

 相変わらず仕事は地味だ。署名失効のテストをし、鍵ローテーションの手順書を書き、深夜に謎の証明書チェーンを追って、朝になったらコンビニのサンドイッチを食べる。

 でも前より少しだけ、何を作りたいのかがはっきりした。

 ぼくは、他人の秘密を預かるためのシステムではなく、他人の秘密を奪わなくても信じられるシステムを作りたい。

 哲学の言葉を借りるなら、信頼は全知ではない。

 数学の言葉を借りるなら、証明はいつも全部を展開する必要はない。

 歴史の言葉を借りるなら、どんな帝国も「全部見える」という幻想から腐る。

 だから、たぶん、いいセキュリティは愛情に少し似ている。

 部屋に鍵があること。

 ノックがあること。

 相手の中身を勝手に読まなくても、そこに誰がいるかを信じる手つきがあること。

 ぼくの育った家には、ルート証明書がなかった。

 あると思わされていただけだった。

 だから今は、自分で作るしかないのだと思う。