1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【個人開発】「あなたはそこにいますか?」に抗う!ブラウザで動く次世代ネットワーク防衛シミュレータを作ってみた

1
Posted at

はじめに

「あなたはそこにいますか?」

SFアニメ『蒼穹のファフナー』を観たことがある方なら、この恐ろしい問いかけを知っているはずです。この問いに答えてしまうと、敵(フェストゥム)に精神を読まれ、最終的には「同化(乗っ取り)」されてしまいます。

今回は、この「問いかけ(プローブ)による同化」という絶望的な攻撃からネットワークを守るにはどうすればいいか?という着想から、ブラウザ上で動く次世代ネットワーク防衛シミュレータ「NextGen Security Shield (AAIMA-Core)」を開発しました!

フレームワークは一切使わず、HTMLとVanilla JS(Canvas API)だけでサクサク動くように実装しています。

image.png

👉 実際にシミュレーションを動かしてみる(公開URL)

シミュレーションのコンセプト(絶望と希望)

このシミュレータでは、画面上の青い点が「正常なデバイス」、赤い点が「同化されたデバイス」を表します。

脅威:同化プローブ(Are you there?)

赤いデバイスは、周囲の正常なデバイスに対して「Are you there?」というプローブ(探査パケット)を放ちます。
従来型のファイアウォール(FW)では、この未知の問いかけを防ぎきれず、限界を超えるとデバイスが「同化」され、新たな攻撃拠点となって被害が爆発的に拡大してしまいます。

image.png

希望:次世代防衛プロトコル「AAIMA」と自律隔離

そこで実装したのが、次世代防衛モード「AAIMA」です。このモードには以下の2つの強力な機能が備わっています。

  1. ZKP(ゼロ知識証明)による防御: 自分の内部情報を一切渡さずに「私はここにいる(正常である)」ことだけを証明し、問いかけを弾き返します。
  2. 自律的フェイルセーフ(トカゲの尻尾切り): 防御を突破され、自己同一性(統合情報量Φ)が危険域まで低下した場合、完全に同化されて周囲を攻撃し始める前に、自ら通信を物理・論理的に切断し、データを暗号的消去して沈黙します。

一つのデバイスを犠牲にしてでも、ネットワーク全体の「カスケード故障(感染爆発)」を食い止めるという、胸熱なシステムになっています。

image.png


技術スタックと実装の工夫点

「ただのパーティクルアニメーション」で終わらせないため、JavaScriptのコアな部分でパフォーマンスとロジックの堅牢性にこだわりました。

① ビット演算(フラグ)による高速な状態管理

ノード(デバイス)の稼働状況や同化状態を、複数の真偽値変数ではなく、32bitのビット列を想定したフラグで管理しています。
メモリ効率の向上だけでなく、C#などの低レイヤー言語での開発経験を活かした、ハードウェアに近い設計思想を取り入れています。

// UCD-F_ABC: 32bitビットパッキングを想定した状態フラグ
const AGENT_STATE = {
    FLAG_ACTIVE:       1 << 0, // 正常稼働
    FLAG_COMPROMISED:  1 << 1, // 完全同化(フェストゥム化)
    FLAG_ISOLATED:     1 << 2, // 自律的ネットワーク切断(無害化)
};

// 状態の判定もビット論理積で高速に行う
get isActive() { return (this.stateRaw & AGENT_STATE.FLAG_ACTIVE) !== 0; }
get isCompromised() { return (this.stateRaw & AGENT_STATE.FLAG_COMPROMISED) !== 0; }
get isIsolated() { return (this.stateRaw & AGENT_STATE.FLAG_ISOLATED) !== 0; }

② 統合情報量(Φ)による自律切断ロジック

「Are you there?」の問いかけに晒され続けると、デバイスの「自己同一性」が崩壊していく過程を phi (統合情報量Φ)というパラメータで表現しています。
ダメージが閾値(PHI_FAILSAFE_THRESHOLD)を下回ると、即座に triggerFailsafe() が発動します。

receiveProbe(intensity) {
    // ... 前略(ZKPによる防御判定など)...

    // 【防御失敗】 ダメージ蓄積
    this.ruinScore += 30;
    
    // AAIMA フェーズ4:カスケード故障の防止(自己検知と自律切断)
    if (this.phi <= AAIMA_CONFIG.PHI_FAILSAFE_THRESHOLD) {
        // 完全な同化を防ぐため、自らネットワークから切断しデータ消去
        this.triggerFailsafe();
        return { defended: false, failsafeTriggered: true };
    }
}

triggerFailsafe() {
    this.stateRaw = AGENT_STATE.FLAG_ISOLATED;
    // UI上で線(エッジ)が消え、灰色(地形化)になる
}

③ 動的トポロジの描画(Canvas API)

毎フレームの描画処理において、DOM要素(divなど)を大量に生成・操作するとブラウザが悲鳴を上げます。
そこで、すべてのノード、接続線(エッジ)、飛び交うプローブの描画は HTML5 CanvasrequestAnimationFrame を用いて1枚のキャンバス上にレンダリングしています。これにより、100個以上のノードが複雑に通信・攻撃し合うシチュエーションでも、60FPSで滑らかに動作します。

おわりに

アニメのSF的な恐怖「同化」を、ネットワークセキュリティの「ラテラルムーブメント(横展開)の阻止」という現実的な課題に落とし込んでシミュレータ化してみました。

右側のパネルから「疑似攻撃テスト実行」ボタンを押すと、赤い脅威が迫り、緑の波紋(ZKP防御)と黄色の光(自律隔離)がネットワークを守る美しい様子が観察できます。
ぜひ、以下のリンクから「従来型FW」と「AAIMA」の違いを自分の目で確かめてみてください!

👉 NextGen Security Shield を起動する

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?