このリポジトリは、論文 What a CAGE 4 Score Measures: An Audit of a Learned Cyber-Defense Benchmark, Its Reference Defenders, and the Tables Built on Them(James M. Rice およびアドバイザー、ロチェスター工科大学、2026年)の背後にあるハーネス、パッチ、分析ツール、台帳です。arXiv 識別子は、投稿後の最初のコミットでここに追加されます。タグ arxiv-v1 は、投稿された論文のすべての数値が計算された時点の状態です。
論文の数値の計算元となるトレースとチェックポイントは、https://doi.org/10.5281/zenodo.23681828 に4つのアーカイブとして別途寄託されています。
| アーカイブ | 内容 | 展開先 | sha256 |
|---|---|---|---|
traces_arms_arxiv-v1.tar.zst | 主要監査のすべての評価アームのステップ記録。論文の付録Bに列挙された123アームと、ARMS.md に記載された診断アームを含み、アームごとに1ディレクトリ、エピソードごとに1つの JSON-lines ファイル | data/traces/ | db2c3d17684180e5d4ca7fb9a7f1f739b5414e62da0e8c4b9b792cd31568f456 |
traces_pilot_arxiv-v1.tar.zst | busy-check パイロットとその継続のステップ記録(アーム名 kbf_*) | data/traces/ | ece72ca24d17bf688144b2d0276ae9f0209aa8a50f95ecdd0aab9a6f8a9c0fc0 |
checkpoints_pilot_arxiv-v1.tar.zst | パイロットおよび継続トレーニング実行の保存済みチェックポイントと再開状態 | repos/cage-4-submission/checkpoints/ | dc2c8219e12a0c2931263be0003c8858039931b04b019e1bfa60c0ba6856c07e |
checkpoints_continuation_arxiv-v1.tar.zst | 第5節の Wrecker 継続実行のチェックポイント | repos/cage-4-submission/checkpoints/ | SHA256SUMS 内 |
run_logs_arxiv-v1.tar.zst | 両マシンからのパイロットおよび継続実行のトレーニングと評価のログ。pilot_runs.log には各実行のホスト、スレッド数、ワーカー数、コードダイジェスト、イメージが記録されている | data/ | SHA256SUMS 内 |
寄託物内の SHA256SUMS に4つすべてが記載されています。展開前に sha256sum -c SHA256SUMS でアーカイブを検証してください。
| パス | 内容 |
|---|---|
bin/run | このディレクトリを /work にマウントした状態で、2つのイメージのいずれかでコマンドを実行し、KEEP_* と HMARL_* のスイッチを引き渡します。クローンが ~/cage にあることを前提としています。 |
build/ | 2つの Dockerfile(Dockerfile.keep、Dockerfile.marl)と、イメージのビルド前に上流リポジトリへ適用されるパッチ |
scripts/capture.py | ペアになった環境シード上で KEEP のリリース済みポリシーを実行し、エージェントの生の観測とシミュレータの真の状態を含むステップ記録を書き出します |
scripts/capture_hmarl.py | H-MARL Expert について同様の処理を、著者らの評価経路(--compat)または監視ハーネス経由で行います |
scripts/oracle.py、scripts/oracle_rules.py | KEEP 上の監視ハーネス、ルール O1 から O15 およびルールディフェンダーで、配信スイッチ(--wait-busy、--queue、--min-gap)を備えています |
red_agents/ | 論文が標準の FiniteStateRedAgent に加えて実行する敵対エージェント。Wrecker とその Pn および Qn のラダーは論文独自のもの(セクション2)であり、bin/run は起動時にこのディレクトリ内のすべてのファイルをイメージの SimpleAgents ディレクトリへコピーします |
tools_*.py | 分析ツール群。tools_paired.py(ペア差、ブートストラップ区間、勝数、符号検定)、tools_charge.py と tools_busy_charge.py(Restore チャージとその他)、tools_dropped.py(アサートされた介入に対して実行)、tools_cont.py、tools_ceiling.py、tools_fraction_ci.py、tools_latch_sum.py、tools_drawspread.py、tools_lagcorr.py、tools_busy_restores.py、tools_pilot_decisions.py など。それぞれが data/traces/ 配下のトレースディレクトリから計算した内容を出力します |
tools_patch_*.py | リリース済みコードへのパッチスタック。tools_patch_keep_busy.py、tools_patch_keep_seedmode.py、tools_patch_keep_readall.py をこの順に適用すると、KEEP のトレーナーにセクション6のスイッチが付与されます。tools_patch_hmarl_busy.py は H-MARL のラッパーに HMARL_BUSY=none スイッチを付与します。tools_patch_oracle_truth.py はハーネスに --log-truth を追加します。いずれも冪等であり、認識できないコード上では実行を拒否します |
run_keep_pilot.sh、eval_keep_pilot.sh、pilot_status.sh、test_keep_*.sh | セクション6のパイロットと継続、その評価およびテスト |
run_busy_reds.sh | リリース済みの KEEP ポリシーを、標準の敵対エージェントと他の9体に対してビジーチェックのオン・オフ両方で実行します(セクション6.1) |
queue_*.sh、read_*.sh、run_*.sh、rerun_F.sh、gate_O15.sh、pilot_O15.sh、svy_O15.sh | キャンペーンのランチャーとリーダー。論文のすべてのアームはこれらのいずれかによって起動されたため、各アームの正確な呼び出しの記録となっています |
ARMS.md | すべてのアームを名前別に、そのコマンド、平均値、およびそれを保持するファイルとともに記載 |
RESULTS.md | 作業の日付付きログ(新しい順) |
papers/ | 論文の分析レイヤーのアーティファクトコピー(論文本文を除く)。papers/paper1/ledger.csv は台帳であり、論文に印刷された数値ごとに1行、それを再計算するコマンドとともに記載されています。papers/paper1/fig/ には図と表のスクリプトが格納されています。papers/paper1/check_identities.py はすべてのビルドが満たすべき算術的恒等式を検証します。papers/ にある recompute_*.py と means.py のスクリプトは、台帳が呼び出す基準、分散、シェアの計算です |
data/ と repos/ 配下のすべては git によって無視されます。トレースは data/traces/ に、上流リポジトリとチェックポイントは repos/ に置かれます。
論文の付録Aは3つのレベルを挙げています。それぞれ、より多くの環境を必要とします。
クローンし、2つのトレースアーカイブを data/traces/ に展開し、リポジトリのルートから再計算を実行します。このディレクトリから台帳内のすべての異なるコマンドを実行し、各行の保存値がそのコマンドの出力に現れることを確認します。
git clone https://github.com/jrice-ai/cage ~/cage && cd ~/cage && git checkout arxiv-v1
mkdir -p data/traces && tar -I zstd -xf traces_arms_arxiv-v1.tar.zst -C data/traces && tar -I zstd -xf traces_pilot_arxiv-v1.tar.zst -C data/traces
./recompute.sh
python3 papers/paper1/check_identities.py papers/paper1/ledger.csv
台帳のコマンドは、解析レイヤーを著者のマシン上のパス ~/papers で指定しているため、recompute.sh は HOME を papers/ をそこにリンクしたスクラッチディレクトリに向けてチェックを実行します。リポジトリ外には何も書き込まれません。ラップトップ上では完全な再計算に数十分かかり、その大半はパイロットアームです。リリースされたチェックポイントから読み取ったハイパーパラメータ(キー keep* と trident*、これらは bin/run を経由して実行されます)を使用する10行は、レベル2イメージを必要とし、それがなければ「見つからない」と報告されます。check_identities.py は算術的恒等式(すべての分割でコストがチャージと残余の合計に等しいこと、4回抽選および4シードの区間とその平均および標準偏差、H-MARLのマスクオフペアの残余ゼロ)を報告します。papers/paper1/fig/ 配下の図と表のスクリプトは、同じトレースから論文の図と表を CAGE=~/cage python3 papers/paper1/fig/fig_curves.py で再生成し、fig_drop.py、fig_noise.py、make_tables.py、make_busyreds.py、make_arms.py についても同様です。
これには2つのイメージ、固定されたリビジョンの上流リポジトリ、およびリリースされたチェックポイントが必要です。
論文の計算に使用されたリビジョン(論文の表12に記載されているリビジョン)で、3つの上流リポジトリを repos/ にクローンします。
| リポジトリ | リビジョン |
|---|---|
cage-challenge/cage-challenge-4 | 8c3c50ca54b1 |
cybermonic/cage-4-submission(KEEP、weights/ 配下にリリースされた5つのチェックポイントを含む) | 2afd652d80ce |
adityavs14/Hierarchical-MARL(H-MARL Expert、リリースされたチェックポイントを含む) | 6fe960f5931f |
build/ 内のパッチを、それが指定するリポジトリに適用し(各クローン内から git apply)、その後リポジトリルートから2つのイメージをビルドします。2つのディフェンダーの依存関係セットは共存できないため、2つ存在します。
docker build -f build/Dockerfile.keep -t cage-keep:dev .
docker build -f build/Dockerfile.marl -t cage-hmarl:dev .
論文が報告するチェックポイントダイジェストは、ソートされたファイルごとのmd5に対するmd5であり、KEEPの5ファイルでは55fb3e7f46540eeea63230b149e1744e、H-MARLの15個のポリシーファイルとalgorithm_state.pklではfd9e9172fd56b723fedca72ce0e78a16です。何かを実行する前にこれらを確認してください。
次に、1つのアームはbin/runを通じた1つのコマンドです。標準の敵対者に対して100個のペア環境シード上で、真の状態を記録した状態でリリースされたKEEPポリシー、これがcorpus_v1アームです。
bin/run cage-keep:dev python3 /work/scripts/capture.py --episodes 100 --base-seed 0 --red FiniteStateRedAgent --out /work/data/traces/corpus_v1 --workers 4
H-MARL Expert は著者の評価パスを通じて、これは再現区間のアームである、
bin/run cage-hmarl:dev python3 /work/scripts/capture_hmarl.py --rule none --episodes 100 --base-seed 0 --compat --out /work/data/traces/hmarl_s0
and a supervised arm, O1 held until the agent is idle with a gap of 32 steps on KEEP,
bin/run cage-keep:dev python3 /work/scripts/oracle.py --rule O1 --min-gap 32 --wait-busy --episodes 100 --out /work/data/traces/so_O1_g32_wb
論文内の各アームの正確な呼び出しは queue_*.sh および run_*.sh スクリプトにあり、ARMS.md に記録されており、同じシードでの再実行はリリースされたアームを桁まで再現する。これは、6.1 節の H-MARL アームが、イメージのコピーから別のマシンで取得され、その対照を再現するのと同様である。6.1 節のビジーチェックのアブレーションは、KEEP では run_busy_reds.sh、H-MARL では tools_patch_hmarl_busy.py に続けて HMARL_BUSY=none と --log-policy を指定した capture_hmarl.py である。
これにはパッチ適用済みのトレーナーと、シードごとに数日分の CPU 時間が必要である。3 つの KEEP トレーナーパッチを順番に適用し、それらのテストを実行する。テストはそれぞれ数分かかり、すべてのスイッチを検証する。
python3 tools_patch_keep_busy.py && python3 tools_patch_keep_seedmode.py && python3 tools_patch_keep_readall.py
./test_keep_busy.sh && ./test_keep_seedmode.sh && ./test_keep_readall.sh
その後、パイロットアームを起動します。F は出荷時のままの busy チェックありでトレーニングし、N はそれなし、S は固定レイアウトのシード付きコントロール、R は全読み取りコントロールです。1回の更新は5エピソード(R は25エピソード)で、保持されたチェックポイントは100更新ごとに repos/cage-4-submission/checkpoints/ の下に保存され、resume 引数は状態ファイルから実行を継続します。
nohup ./run_keep_pilot.sh F 4101 400 0-17 > /dev/null 2>&1 &
./pilot_status.sh
./eval_keep_pilot.sh kbf_F_s4101 400 shipped 6
eval_keep_pilot.sh <tag> <update> [busy] [workers] [policy seed] は、保持されたチェックポイントを100組のペアシード上で、訓練済みまたは交差済みのチェックとともに、また4回抽選推定の再シード抽選用のポリシーシードとともにスコアリングします。パイロット実行は、学習器のスレッド数までシードから再現可能であり、スレッド数は重みを小数第7位で変動させるため、異なる cpus 引数での再実行は、リリースされたチェックポイントに近い一致を示すものの、ビット単位では一致しません。論文内のすべての実行の実行構成、スレッド数、ホスト、コードダイジェストは、デポジットの実行ログアーカイブ内の pilot_runs.log と ARMS.md に記載されています。