第19話「パケット・ロス」
転送魔法を使えば半日もかからないはずの道が、三日かかった。
「なんで転送魔法を全部止めてるんだ」俺は馬の背でぼやいた。
「自分たちで止めたんだろ」ガルドが前を向いたまま言う。「暴走してる時に使ったら、どこに飛ばされるかわからないからな」
「それはそうだが……」
「蓮、その『わかってるけど納得いかない顔』やめてくれ。見てて疲れる」
「してない」
「してる」アリアが言った。
二対一だった。俺は口を閉じた。
陸路三日、馬で移動した先——ネットワーク連合の中枢都市「ポート・ハブ」は、文字通り「繋がりの都市」だった。大陸中の通商路が交差し、転送ゲートが集積するこの街は、本来であれば一日中商人と旅人で溢れているはずだ。
しかし今は——閑散としていた。
街に入ると、まず目に入ったのは滞留した荷馬車の列だ。どこにも行けない商人たちが、荷を積んだまま広場に溜まっている。遠くから怒鳴り声が聞こえる。「いつまで待たせるんだ」「補償はどうなる」「うちの商品が腐る」。
人が止まると、街が腐る。インフラというのはそういうものだ。
「ひどいな」ガルドが眉をひそめた。
「これが全部止まったらどうなるか、見えるな」俺は街を眺めながら言った。「連合だけじゃない。ロジカ王国にも食糧が届かなくなる。補給が滞れば冬が越せない村も出てくる」
「のんびりしてられないな」
連合の担当官——コネクタという名の、五十がらみの中肉中背の男——が俺たちを出迎えた。頭を両手で抱える癖があるらしく、話しながら何度も頭に手を当てた。
「本当に困ってるんです。ゲートAはビジュアル帝国向けの商隊をデータベルグに飛ばした。ゲートBは——人が消えた。どこに飛ばされたか、まだ確認できていません」
「人が?」アリアの声が鋭くなる。
「はい、四人。急いで調査をしているのですが、なにしろゲートが止まっているので追跡もできなくて——」
「止まっているからこそ追跡できる場合もあります」俺は言った。「ゲートのコードを見せてください。管理室に案内してください」
連合の管理室は、街の中心部にあった。
広い部屋の天井まで届く水晶の柱が十数本並んでいる。それぞれが一基のゲートに対応しており、ゲートの座標と状態を管理している。今は全部が暗い光を放っていた——稼働停止中のインジケーターだ。
「全部止めたのか」
「はい。暴走が続いていたので——」
俺はデバッガーズ・アイで管理システムのコードにアクセスした。
```
[System: Teleport Gate Network - Port Hub Central]
total_gates: 89
active_gates: 0 ← 全停止中
routing_table: [CORRUPTED]
error_flag: CRITICAL
last_modified: 2 days ago
modified_by: EXTERNAL_SOURCE
```
案の定だった。
「ルーティングテーブルが根本から書き換えられている」
ルーティングテーブルというのは、平たく言えば「宛先リスト」だ。「ロジカ王国首都」と入力したら正しい座標に飛ばすための対応表。それが——全部バラバラになっていた。「ロジカ王国首都」と入力すると、データベルグの辺境に飛ばされる。「データベルグ図書館」と入力すると、海の上空に飛ばされる。
「ヴァイラスの仕業だ」俺は静かに断言した。
コネクタが「ヴァイラス?」と繰り返したが、俺はそれに答える前にメモリに話しかけた。「バックアップデータはあるか?」
メモリが管理システムに接触し、数秒で答えた。「三日前のスナップショットが残っています。ただし暴走が始まったのが三日前なので、そのバックアップ自体が——」
「既に改竄されているかもしれない」
「はい」
「じゃあ直接修正する。本来の構造から再構築する方が速い」
ガルドが「修正してもまた書き換えられるんじゃないか?」と言った。
「その可能性がある。だからまず、修正した状態を「守る」仕組みを作る」
俺は作業を開始しながら、頭の中で構造を組み立てた。
今必要なのは二段階の対処だ。一つ目はルーティングテーブルの正しい状態を復元する。二つ目は、復元した状態を「外部からの書き換えに対して守る」ファイアウォール的な機構を作る。
しかし——
「修正しても、修正するそばから書き換えられていく。これは直してもキリがない」
ガルドが「どういうことだ?」と眉を寄せた。
「バグを植え付ける仕組みが残っている限り、いくら直しても無意味だ。扉の鍵を直しても、合鍵を持った侵入者がいる状態と同じ」
「じゃあどうする」
「侵入者を締め出す仕組みを作る。合鍵が効かない扉を」
アリアが考え込んだ。「論理魔法で——前の状態と異なる変更を自動で弾く結界式は……作れるかもしれない。でも変化を検知するには——変化の定義が先に必要で、その定義自体が変化したら——」
論理のパラドックスに突き当たり、アリアが額を押さえた。
「堂々巡りになる」俺が言った。「そこで——ハッシュ値を使う」
「ハッシュ?」
「変更前の正しい状態を、一種の『指紋』に変換する。その指紋が変わったかどうかを常にチェックする仕組みだ。指紋が変わっていれば——外部から書き換えられたということがわかる。その時、自動的に正しい状態に戻す。それをループで回す」
「永続的に監視するということ?」
「そう。監視が止まらない限り、書き換えは検知され続ける」
「でも——誰がその監視を続けるの?」
俺はメモリを見た。
メモリが俺を見返した。瞳の回路模様が、静かに明滅している。
「マスター——私がハッシュの監視を引き受けます」
「常時稼働できるのか」
「できます。これは私の本来の機能です、システム・ナビゲーターとして」
「負荷が高い。他の処理に影響しないか」
「並列処理できます。マスターのサポートは——最優先タスクですが、バックグラウンドでの監視は問題ありません」
メモリの声は静かだったが、確かな意志があった。
「わかった。頼む」
俺はルーティングテーブルの正しい状態を、連合の記録と技術者の証言をもとに再構築した。メモリがその状態のハッシュ値を生成し、変動監視プログラムを起動する。
```
// ファイアウォール監視プログラム
function monitor_routing_table() {
const baseline_hash = generate_hash(routing_table);
while (true) {
const current_hash = generate_hash(routing_table);
if (current_hash !== baseline_hash) {
// 改竄を検知
restore_routing_table(); // 正しい状態に戻す
}
sleep(100ms);
}
}
```
作業時間、四時間。
「ゲート一番、再起動します」
コネクタが恐る恐るゲートを起動した——問題なく、正しい座標に接続された。
「二番、問題なし」「三番、問題なし」
順次再稼働していくゲート。広場に溜まっていた商人たちの間に、歓声が上がった。滞留していた荷馬車が動き始める。三日間止まっていた物流が、再び流れ始めた。
「——本当に直りましたか」コネクタが信じられないという顔で言った。「二日間、連合の技術者を総動員しても原因すら掴めなかったのに」
「監視プログラムが動いている限り、書き換えはリセットされる。ただし——」俺は釘を刺した。「根本の犯人はまだいる。監視を止めないでくれ。そしてメモリに過剰な負荷をかけるような処理を並行させないこと」
「あ、はい。もちろんです」
「油断しないでくれ」
ガルドが「お前さん、素直に喜べないのか?」とつっこんだ。
「喜んでる。ただ喜ぶだけじゃ足りない状況だ」
「まあそうだけどよ……」
コネクタが礼金を山積みにしようとしていたが、アリアが「今は要りません。必要な時に協力してもらえれば」と断った。賢明な判断だ。借りを作っておく方が礼金より価値がある場面がある。
---
夕方、四人で宿を取った。メモリは監視プログラムを動かしながら、手持ち無沙汰にテーブルの端に座っていた。
俺が「疲れてないか?」と聞くと、メモリは「監視は自動です」と答えた。
「監視を動かしながら——何か別のことをしてたのか」
「……はい」メモリが少し間を置いた。「ヴァイラスの改竄コードを、精査していました。先ほどの修正で削除したルーティングテーブルの書き換えコード——その最下層に、奇妙なものを発見しました」
「奇妙なもの?」
「バグとは無関係の、暗号化された文字列が埋め込まれていました。機能を持たない文字列です。コードとして実行されるものではなく——メッセージのようなものが」
俺は少し前のめりになった。
「どんな内容だ」
「暗号化されているため、まだ内容は不明です。でもパターンがあります。解読できる可能性があります」
「解読に時間がかかるか」
「一晩いただければ」
俺はガルドとアリアを見た。二人とも静かに頷いた。
「わかった。今夜はここに泊まる」
俺は書き留めた暗号の文字列を改めて眺めた。規則性はある。乱数ではなく、意図して並べられた文字列だ。暗号化はしてあるが——パターンを読めば解けるかもしれない。
「解ける」俺は呟いた。
ヴァイラスは何を伝えようとしているのか。
それとも——誰かへのメッセージではなく、自分自身の記録なのか。
改竄コードの最深部に、メッセージを残す意味。バグのついでに埋め込むような性質のものではない。意図的に、そこに置かれたものだ。
俺は宿の窓から、夜のポート・ハブを眺めた。
再び動き始めた街の灯りが、遠くに見える。流れが戻った街は、ようやく元の姿を取り戻しつつあった。
メモリが静かに解析を開始する。四人は翌日の朝を待った。
次回、第20話「隠しメッセージ」——一晩かけて解読された暗号の内容。ヴァイラスの目的が、その言葉の中に見えてくる。そして封印されたメモリの記憶が、また一枚——剥がれ落ちる。




