Reproducible Python lab for side-channel attacks on AES-128, side-by-side comparison of classical (DPA / CPA / Template) and AI (MLP / CNN-Zaid / Transformer-SCA) approaches. All traces are synthetic — no hardware needed. PyTorch auto-uses CUDA when available (tested on RTX 4060 Laptop).
配合《电压测量 · 从基本功到硬件安全最前沿》汇报使用的可运行 Python 实验。 十个静态脚本 + 三个 LIVE 动画脚本,分别对应 PPT 上的关键结论; 录视频时按顺序跑即可。
python -m venv .venv
.venv/Scripts/python.exe -m pip install -i https://pypi.org/simple/ -r requirements.txt依赖极简:只用 numpy / matplotlib / scikit-learn,所有 trace 都是仿真生成,
不需要 ChipWhisperer 硬件。单机笔记本 2 分钟跑完全套。
| # | 脚本 | 对应 PPT | 一句话 |
|---|---|---|---|
| 1 | 01_visualize_trace.py |
S6 术语速查 | 一条 trace 到底长什么样 · 单条 / 100 叠加 / 1000 平均 |
| 2 | 02_dpa_attack.py |
S6 DPA 原理 | Kocher 1998 · Δ(t) = ⟨T|b=1⟩ − ⟨T|b=0⟩ · 256 候选柱状图 |
| 3 | 03_cpa_attack.py |
S7 CPA 三步 | Brier 2004 · Pearson ρ(H, T) · CPA 数据效率曲线 |
| 4 | 04_masking_breaks_cpa.py |
S8 Masking | 加一阶掩码,同样 2000 条 CPA 被打到 GE=231 |
| 5 | 05_ai_beats_masking.py |
S9 高潮 | MLP + 2 阶交叉特征 · 154 条 attack trace 把 masking 打穿 |
| 6 | 06_hero_comparison.py |
S9 柱状图 | 三条 GE 曲线 · 经典 + MLP 对比(主视觉 A) |
| 7 | 07_template_attack.py |
S8 Chari | Template Attack · AI 之前最强的经典方法 |
| 8 | 08_cnn_sca.py |
S9 CNN-Zaid | CNN-Zaid 2020 · PyTorch · 1D Conv 自动学泄漏对齐 |
| 9 | 09_transformer_sca.py |
S9 Transformer | Transformer-SCA 2022 · PyTorch · 自注意力 + attention 热图可视化 |
| 10 | 10_deep_hero.py |
S9 柱状图 | 五方终极对比 · CPA/CPA+Mask/MLP/CNN/Transformer(主视觉 B) |
| L1 | L1_live_cpa.py |
S7 live demo | CPA 256 柱状图实时生长 · 录视频用 |
| L2 | L2_live_race.py |
S9 live demo | 三条 GE 曲线实时赛跑 · 录视频用 |
| L3 | L3_deep_race.py |
S9 终极收尾 | 五方 GE 曲线实时赛跑 · 含 CNN + Transformer · 从 .pt 缓存秒出 |
- 段 1(S6 开头):
01_visualize_trace.py· 让观众看到 trace 的真身 - 段 2(S6→S7):
02_dpa_attack.py→03_cpa_attack.py· 古典攻击连讲 - 段 3(S8):
04_masking_breaks_cpa.py→07_template_attack.py· 防御 + 经典上限 - 段 4(S9 高潮):
05_ai_beats_masking.py· AI 破防 - 收尾:
06_hero_comparison.py(静态) 或L2_live_race.py(live 赛跑,强推)
cd sca_lab
python run_all.py # 跑 01..10(含 PyTorch 训练 · 约 15 分钟)
python run_all.py 01 02 03 04 05 06 07 # 只跑经典 + MLP(约 2 分钟)
python run_all.py 03 05 06 # 只跑指定单独跑 AI 对比(10/L3 都依赖 08/09 的 .pt 缓存):
python 08_cnn_sca.py # CNN-Zaid · GPU 约 2 分钟 (缓存命中 ~10s)
python 09_transformer_sca.py # Transformer · GPU 约 7 分钟 (缓存命中 ~10s)
python 10_deep_hero.py # 五方静态对比 · 读缓存 · 约 1 分钟
python L3_deep_race.py # 五方实时赛跑动画 · 读缓存 · MLP 2.5 min 后弹窗录视频重拍时加 --fresh 才强制重训:
python 08_cnn_sca.py # 默认:有 _cnn_zaid.pt 就跳过训练直接 attack
python 08_cnn_sca.py --fresh # 强制重训 · 录"从 0 开始训 40 epoch"那种镜头才用动画脚本要手动单独启动(它们是给视频录制用的 GUI 窗口):
python L1_live_cpa.py # CPA 柱状图 25s 动画
python L2_live_race.py # 三方 GE 赛跑 · 前期 1min profiling 后 25s 动画每个脚本会:
- 向终端打印关键数字(GE、trace 数、训练精度等)
- 弹出 matplotlib 窗口(本地运行 · Agg 模式下仅保存 PNG)
- 把图保存到
figures/(.png,150 dpi)
用仿真而不是 ChipWhisperer 真采集的理由:
- 可复现:不同机器、不同时间跑都是一样的结果,录视频不会翻车
- 可清洁对比:CPA / CPA+mask / Template / MLP 所有曲线都在同一套 SNR 参数下,差距完全来自算法本身
- 分钟级出结果:真采 2000 条 trace 要若干分钟,masked profiling 要几十分钟
仿真参数(见 sca_utils.simulate_traces):
leak_point = 50:主泄漏时刻alpha = 0.3(默认 1.0,04/05 默认脚本里再调):泄漏幅度noise_sigma = 1.0:高斯噪声 σ- masked 模式:
mask_leak_point = 30处额外漏 H(m)
本机实测结果(RTX 4060 Laptop GPU · 跑一次给的数字):
| 方法 | 场景 | 首次 GE=1 所需 attack trace | 训练用时 |
|---|---|---|---|
| ① CPA | 未防护 AES | 11 | 秒级 |
| ② CPA | Masked AES | 未攻破 (2000 条下 GE ≈ 30) | 秒级 |
| Template | Masked AES | 未攻破 | 秒级 |
| ③ MLP (sklearn + 2 阶交叉) | Masked AES | 126 | ≈ 50s (CPU) |
| ④ CNN-Zaid (PyTorch · GPU) | Masked AES | 50 | ≈ 2 min |
| ⑤ Transformer (PyTorch · GPU, 配对 token) | Masked AES | 37 | ≈ 7 min |
—— Transformer 最强,和 PPT S9 "Transformer ~160 / CNN ~200 / MLP ~650" 同量级 (PPT 是 ASCAD 真数据,我们是仿真;定性排序一致)。
GPU 加速对比(4060 Laptop vs CPU · batch=1024 · Transformer 单步训练):
| 后端 | ms / step | 提速 |
|---|---|---|
| CPU fp32 | 8437 | 1× |
| CUDA fp32 | 248 | 34× |
| CUDA fp16 (autocast) | 131 | 64× |
这就是为什么实验 08/09 在 GPU 上 2–7 分钟能训完一个完整的 AI-SCA 模型, CPU 则需要几十分钟到几小时。
- 换真数据:ASCAD v1(法国 ANSSI 2018 · 一阶 masked AES) https://github.com/ANSSI-FR/ASCAD
- 换 CNN / Transformer:把
05_ai_beats_masking.py里的MLPClassifier换成 PyTorch 写的 CNN-Zaid 或 Transformer-SCA - 真硬件:ChipWhisperer-Lite ≈ $300,对 STM32 做真 AES 采集 https://rtfm.newae.com
这套 lab 的所有 trace 都是合成的,目标 AES 也是自己仿真的 —— 零法律风险。 在真实硬件上复现请只在:自己的板子、公开数据集(ASCAD)、授权 CTF 靶场 这三种场景里做。对他人未授权设备做侧信道分析,在中国大陆可能触及 《刑法》第 285–287 条。
