表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
現実世界にゼロデイを見つけたので、こっそり修正しています  作者: せい | 健康優良不良プログラマ


この作品ページにはなろうチアーズプログラム参加に伴う広告が設置されています。詳細はこちら

PR
22/25

第22話 漏れた設計

どこから漏れたかを調べるとき、最後まで容疑者から外すのは、たいてい自分だ。


今日は、その椅子に、最初に自分を座らせた。


机の上に、白い点はもう出ない。代わりに、画面の中を収集の脈が流れている。六分、八分、また六分。規則正しくないことだけが、規則正しい。


聞き耳は、昨日の夜から鳴りっぱなしだった。


その脈の一件を、俺は拡大した。


来ていない人間の、出勤打刻。同じ操作が二度来て、記録は一回。二度目が、静かに落ちている。


その畳み方に、覚えがあった。見るたびに、見なかったことにしたくなる。


同じ識別子の二度目を、黙って捨てる。俺が、自分の道具のために組んだ癖だ。


operation_id。


「MICA」


「はい」


「昨日、俺はこれを見て、信じたくないと思った」


「記録にあります」


「今日は、信じる前に調べる。順番が、逆だった」


他人の現場なら、こうはしない。容疑者を全部並べて、上から潰す。感情で容疑者を選ばない。自分のときだけ、その手順を飛ばしていた。


「容疑を全部出せ。俺が、どこから漏らしたか」


画面に、三行が並んだ。作業環境のログ。外との通信。納品物。


「手が触れた経路は、この三つです」


「上から潰す」


最強のデバッガーが、調べる側ではなく、調べられる側に座る。妙な気分だった。容疑者の顔は、よく知っている。毎朝、鏡で見ている。


——


一つ目。作業環境のログ。


俺の机は、外につながっていない。検証は遮断した環境でやる。MICA の権限も、昨日、調査に要る範囲しか開けていない。本番にも、外部サービスにも、手は届かない。


「ローカルから、operation_id を含む実行記録を全部出せ。発行時刻と、出力先も」


リストが流れた。どれも一時ディレクトリ。どれも、外へ出ていない。


「外向きの書き込みは」


「ありません。出力先は、全件ローカルです」


一つ目、シロ。だが、安堵はしなかった。シロを出すのは簡単だ。難しいのは、見落としを探すほうだ。


「二つ目。通信ログ。期間は、道具を作り始めてから今まで」


MICA が相関を組む。宛先、時刻、データ量。並べているうちに、一件、目に留まった。


深夜の、外への送信。


俺は、身を乗り出した。三時台。まとまった量。宛先は、外部。漏洩なら、ここだ。


指が、勝手に方眼紙の縁を叩いていた。


「宛先を解決しろ。中身の種別も」


「解決中」


数秒。


「あなた名義の退避先です。送信時刻は、自動退避の予定と一致します」


「……俺の、退避か」


「中身は、暗号化済みの差分。第三者には読めません」


俺は、息を吐いた。


色めき立った分だけ、間抜けだった。深夜の外部送信は、自分が自分のために組んだ退避だった。漏洩じゃない。空振りだ。


「初見で当てるな、だな」


「あなたが、よく言います」


引っかかったことより、引っかかりかけて喜んだ自分が、気になった。早く犯人を、自分の外に置きたい。その気持ちが、目を鈍らせる。


二つ目も、シロ。ローカルも通信も、漏洩を再現できない。容疑者が、二人消えた。


——


残るは、納品物。


だが、その前に、確かめたいことがあった。


「MICA。実験に付き合え」


「内容を」


「コードを一つ読ませる。書き手は伏せる。どこの誰が書いたか分からない、拾い物として読め」


「了解しました」


俺は、自分が昔書いた検証コードを一つ選んだ。名前も日付も剥がして、誰のものか分からない状態にして、渡す。二重実行を一回に畳む、あの処理が入っている。


「読みました」


「書き手について、言えることは。名前は要らない。手つきだけでいい」


少し置いて、MICA が答えた。


「同じ書き手の手です」


「同じ、とは」


「畳み方が一致します。識別子の発行単位、時間窓、二度目を捨てる順序」


「収集の脈と、か」


「はい。三つとも、同型です」


画面が、二つに割れた。


左に、収集の脈。右に、名前を剥がした俺の昔のコード。MICA が、二つの重複排除の形を重ねる。


発行のタイミング。捨てる順番。残す一回。


線が、綺麗に重なった。


誰の名前も使わず、設計の癖だけで、書き手が指される。


——あれは、誇りだった。


あの夜、空中の Enter が二度効いて、俺は二重実行を一つに畳んだ。同じ番号の二度目を、静かに捨てる。無駄のない解き方だと思った。自分の手際に、少しだけ満足した。


その綺麗さが、今は俺の輪郭を、外に残していた。


直したくて書いたコードが、俺を名指ししている。


「指紋だな」


「はい」


「綺麗に書くほど、くっきり残る」


「設計の癖は、識別子になります」


軽口じゃなかった。事実だった。事実のほうが、効いた。


——


夕方、莉央さんに電話を入れた。


調査の一環だ。どこから漏れたか、報告する責任がある。昨日引いた線を、初めて実地で使う。


「相馬さん。何か、分かったんですか」


「漏洩経路を、半分まで絞った。先に、報告書に書けることから話す」


「お願いします」


「うちの納品物の作り方に、外から癖を読まれる隙があった。これは再現できる事実だから、書く。今後は、渡す前に書き手の癖を落とす。その手順も書く」


「癖、というのは」


「同じ人間が書くと、コードの畳み方が揃う。それを外から見ると、書き手が分かる。指紋みたいなものだ」


電話の向こうで、ペンの音がした。会社のシステムじゃなく、たぶん紙のほうだ。


「書けないことも、ありますよね」


「ある。誰がそれを読んで、何に使ったか。証拠がない。だから報告書には書かない。今、口頭で言ってる。犯人は、まだ分からない」


「分かりました」


莉央さんは、そこで黙らなかった。


「それ、塞げるんですか」


来た、と思った。莉央さんは、怖がる前に確かめにくる。


「ミスなら塞げる。書き間違いや設定の漏れなら、直せる。だが、これはミスじゃない。正しく書いたコードに開いた穴だ。正しさに開いた穴は、塞ぎ方が、まだ分からない」


「分からない、で、私は何を聞けばいいんですか」


順番を飛ばさない人だ。


「次に渡すときは、指紋を落としてからにする。それは約束する。だが、今ある納品物は、もう先方の手元にある。そこから先は、俺の手が届かない。届かないってことだけは、正直に言っておく」


短い沈黙。


「報告書には、どこまで書けますか」


「絞った経路と、今後の手順まで。読み取られた事実は書く。読んだ相手は、書かない」


「……分かりました。その線で、社内に上げます」


書ける紙と、書けない口頭。二つは、混ざらずに動いた。線を引いた意味は、あった。


——


電話を切って、机に戻った。


ローカルは、シロ。通信も、シロ。自分の管理下のログからは、漏洩を再現できない。


それでも、収集の脈には、俺の畳み方が出ている。


手の中で再現できないのに、外には出ている。


つまり、漏れたものは、もう俺の手の中にない。


「MICA。納品物の一覧を出せ。表示ズレの修正で、NEXTPULSE に渡したもの全部」


リストが出た。修正パッチ。手順書。そして——検証データ。


再現コードと、テストの記録。


俺は、その一件を開いた。


開いて、止まった。


検証データの中に、二重実行を抑える処理が、動く状態のまま入っていた。


動く状態のまま——つまり、俺の組み方のまま。畳み方も、捨てる順番も、あの夜の設計のままだ。検収を通すために、いちばん綺麗に書いた部分だった。


そのいちばん綺麗な部分に、俺の指紋が、くっきり残っている。


「これは、もう先方の管理下です」MICA が、静かに言った。「納品済み。あなたの手は、届きません」


「……だな」


俺の外に、容疑者が一人だけ残った。盗まれたのでも、ミスでもない。仕事として正しく渡したものの中に、俺が映っていた。


画面の隅で、収集の脈が、不規則なまま鳴り続けている。


六分。八分。また六分。


開いたままの検証データを、もう一度見た。


「明日、これを読み直す」


「どう読みますか」


「向こうの席から読む。俺がどこで見えてたのか、相手の目で確かめる」


塞ぎ方は、まだ分からない。だが、どこに穴が開いているかは、もう分かっている。


俺が、いちばん誇った場所だ。


■ 技術メモ


【自己監査(容疑者を並べる)】


何かが漏れた、壊れた、というとき、原因を探す近道は、思い当たる経路を一度すべて並べ、上から一つずつ潰していくことです。


このとき難しいのは、自分を容疑者から外さないことです。人はつい、原因を自分の外に置きたがります。早く「自分のせいではない」と確かめたくなり、その気持ちが目を曇らせます。外部の事故を調べるときと同じ手つきで、自分の環境も同じように疑う。作中で透が、最初に自分を被疑者の椅子に座らせたのは、この切り分けです。


【ログ相関と切り分け】


別々に取られた記録を、時刻や宛先で突き合わせ、同じ出来事を指しているかを調べることをログ相関と呼びます。


「外への送信があった」という一行だけでは、それが漏洩なのか正規の処理なのかは分かりません。宛先を解決し、時刻を予定と突き合わせて初めて、「これは自分の退避だった」と除外できます。怪しい一件に飛びつかず、別の記録で裏を取ってから消す。この地味な突き合わせが、思い込みによる誤検知を防ぎます。作中の深夜の送信は、この手順で空振りと分かりました。


【コードの癖は書き手を指す】


プログラムには、書いた人の癖が出ます。名前の付け方、処理の畳み方、例外をどう捨てるか。同じ人が書いたコードは、こうした細部が揃いやすく、名前を消しても「同じ書き手らしい」と推定できることがあります。


これは現実のソフトウェアでも起きることで、丁寧に整った設計ほど癖が一貫し、かえって書き手を特定しやすくします。便利さや美しさのために磨いた部分が、外から見れば個人を見分ける手がかりになる。直すために書いたものが、自分の輪郭を残してしまう、という反転です。


【報告境界を実地で使う】


何を文書に書き、何を口頭に留めるかを、あらかじめ決めておく取り決めを、作中では報告境界と呼んでいます。


今回はそれを、初めて実際の報告で使っています。「外から癖を読まれる隙があった」という再現できる事実は文書に書き、「誰が読んで何に使ったか」という証拠のない部分は口頭に回す。受け取る側は、確かなことと推測とを分けて扱えます。報告境界は、相手が次に何を確かめればよいかを問い返せるときに、初めて機能します。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ