
cryptography-research-demo — Updated!
削減ラウンドAESに対する単一鍵回復攻撃のための再現可能な暗号解析成果物。ブラックボックス鍵回復、DDT-Gray探索、Sボックスキャッシュ、Lean形式証明を含む。
"Further Single-Key Recovery Attacks on Reduced-Round AES" の成果物(Artifacts)
本論文で引用されているすべての実験のソースコードです。測定出力や既製のテーブルは同梱していません。各プログラムが自身の結果を出力・書き出すため、すべての数値をゼロから再生成できます。
| ディレクトリ | 内容 |
|---|---|
experiments/ | Measured costs 付録の根拠となる2つの実験: SR(7,2,2,6) に対する完全なブラックボックス鍵回復と、本物の7ラウンド AES-128 攻撃のエントリ単位・候補単位の測定 |
c/ | スタンドアロンのCプログラム。構成要素となる主張ごとに1つ(ブリッジ、フィンガープリント、DDT-Gray ウォーク、S-box キャッシュ、誤鍵ランダム化、ルックアップ下限) |
python/ | Python による単一主張の検証と、攻撃レイヤの教育的なリファレンス実装(python/a1/) |
rust/ | 構成要素実験(e1〜e13)の2つ目の独立した実装 |
figures/ | C プログラムが書き出す TSV を読み込むプロットスクリプト |
lean/ | χ★ の偽陽性計数上限の Lean 4 + Mathlib による形式化(lean/chi-fp/、論文 §5.5) |
論文の鍵回復に関する主張は experiments/ に基づいています。c/、python/、rust/ は個々の構成要素(恒等式、不変量、DDT の性質、キャッシュの正しさ、ランダム化の統計)を検証するものであり、攻撃ではありません。
experiments/
experiments/README.md を参照してください。
sr7226-e2e/— AES SR(7,2,2,6)(2x2 状態、6ビット語、24ビット鍵)に対する完全なオフラインテーブルを用いた、完全なブラックボックス鍵回復。同一コードベース上で3つの変種を実装: 我々の方式、テーブル列挙最適化を適用した Derbez–Fouque–Jean、公開されたままの Derbez–Fouque–Jean。aes128-measured/— 本物の7ラウンド AES-128 攻撃を1ユニットずつ測定: 実際のオフラインテーブルエントリ(部分テーブル)、3変種のオンライン候補あたりのサイクル数、AES 分母、順序付きフィンガープリントの偽陽性率とカバレッジ率、全体数への射影。
c/
各ディレクトリは単一ファイルまたは自己完結型です。ビルドは
gcc -O3 -march=native -fopenmp -o <bin> <file.c> -lm で行います(ローカルヘッダを使う場合はそのディレクトリを -I で追加)。使い方は各ファイルの先頭コメントに記載されています。
| パス | 検証内容 | 論文上の位置 |
|---|---|---|
clump.c, chi_clump.c | I_{m,n} および χ★ フィンガープリントの衝突エントロピー | フィンガープリントの性質; 付録 衝突エントロピー |
wrongkey.c | 誤鍵ランダム化、k_6 の全数 2^32 探索 | 付録 誤鍵ランダム化 |
fp_solve.c | テーブル構築で用いる DDT 求解と分岐ビット列挙 | §DDT-Gray |
bridge-consistency/bc_impl_{a,b}.c, bc_truehit.c | ブリッジ整合性の偽受理統計量の2つの独立した実装 | Alg. BridgeConsistency |
ddt-gray/ddt_gray_*.c | DDT 対応 Gray ウォーク: 増分計算とコールド再計算の比較、償却 S-box コスト、タイミング | §DDT-Gray, 付録 DDT-Gray |
sb-cache/sbc_repro.c | W / UU S-box キャッシュの背後にある XOR 分離可能性、c_iSB の閉形式 | §S-box キャッシュ |
mobius-honest/honest_online.c | |K_on| = 8 の場合のオンライン側: k_{-1} のみから再構築する δ-set、および誤鍵生存率 | §構成要素レンマ |
mobius-honest/honest_rebound.c, degen_analysis.c, saes_imn.c | オフラインリバウンドと小規模 AES 上での I_{m,n} 照合のパイプライン検証。既知鍵ショートカットは各ヘッダに記載されています。これらはパイプライン検証であり、鍵回復ではありません | §構成要素レンマ, 付録 退化ケース |
floor/verify_ls_fp.c, floor/verify_incompat.c, floor/a1_floor.py | |K_on| = 8 の場合のルックアップ下限: dim LS(fp) ∈ {0,8} および T ≥ 2^88.67 | 付録 下界 |
python/
Python 3 を使用。python/a1/ は標準ライブラリのみ。トップレベルのテストスクリプト、figures/、experiments/aes128-measured/phi/ は numpy、scipy、matplotlib を必要とします(pip install -r requirements.txt、正確なバージョンで検証済み)。python/a1/README.md は層状リファレンス実装(gf256.py、aes7r.py、chi_canon.py、prop2.py、test_vectors.py 内のゴールデンベクトル)を説明しています。トップレベルスクリプトは単一主張の検証です: ブリッジ不変量(test_invariants.py、verify_Imn.py)、実 AES トレース上のブリッジ(test_bridge_aes.py)、0^{-1} の境界挙動(test_zeroinv.py)、誤鍵ランダム化(test_wrongkey.py)、クランピング / 衝突エントロピー(test_clumping*.py)、CompleteKey の背後にある鍵スケジュール逆変換(keysched_solve.py)、フィンガープリント接頭辞の偽陽性デモ(fp_concat_demo.py)。
rust/
cargo build --release の後、./target/release/repro <exp> [args] を実行します。各実行はタイムスタンプ付きブロックを rust/results/ に追記します。実験の一覧と各実験の検証内容は rust/src/main.rs にあります: e1〜e13 は、ブリッジ恒等式、群と剰余類の性質、実 AES-128 トレース上の正直なブリッジ、誤鍵ランダム化、衝突エントロピー、χ★ 不変性、DDT スペクトル、AES の健全性、エントリ単位のタイミング、SR(7,4,4,4) パイプラインを対象としています。