
cryptography-research-demo — 已更新!
可复现的密码分析工件,用于对降轮 AES 实施单密钥恢复攻击,包括黑盒密钥恢复、DDT-Gray 搜索、S 盒缓存以及 Lean 形式化证明。
"Further Single-Key Recovery Attacks on Reduced-Round AES" 的实验产物
论文中引用的每项实验的源代码。 未捆绑任何测量输出或预制表:每个程序自行打印或写入其结果,因此所有数字都可以从头重新生成。
| 目录 | 内容 |
|---|---|
experiments/ | Measured costs 附录背后的两个实验:对 SR(7,2,2,6) 的完整黑盒密钥恢复,以及真实 7 轮 AES-128 攻击的逐条目 / 逐候选测量 |
c/ | 独立的 C 程序,每个组件论断一个(桥接、指纹、DDT-Gray 游走、S-box 缓存、错误密钥随机化、查找下限) |
python/ | Python 单论断检查以及攻击层的教学参考实现(python/a1/) |
rust/ | 组件实验(e1–e13)的第二个独立实现 |
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 位密钥)上使用完整离线表进行的完整黑盒密钥恢复,基于同一份代码库实现三个变体:我们的版本、带我们表枚举优化的 Derbez–Fouque–Jean 版本,以及原样发布的 Derbez–Fouque–Jean 版本。aes128-measured/— 逐单元进行的真实 7 轮 AES-128 攻击:真实的离线表条目(部分表)、三个变体下每个在线候选的周期数、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 | 桥接一致性误接受统计量的两个独立实现 | 算法 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} 重建的 δ-集,以及错误密钥存活率 | §组件引理 |
mobius-honest/honest_rebound.c, degen_analysis.c, saes_imn.c | 对离线 rebound 以及小规模 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) 流水线。