Skip to content

xzzzzc217/sca-lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SCA Lab · 侧信道攻击实验套件

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).

hero

配合《电压测量 · 从基本功到硬件安全最前沿》汇报使用的可运行 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 页码对应

# 脚本 对应 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 缓存秒出

推荐录制顺序(见 RECORDING_GUIDE.md 详版)

  1. 段 1(S6 开头):01_visualize_trace.py · 让观众看到 trace 的真身
  2. 段 2(S6→S7):02_dpa_attack.py03_cpa_attack.py · 古典攻击连讲
  3. 段 3(S8):04_masking_breaks_cpa.py07_template_attack.py · 防御 + 经典上限
  4. 段 4(S9 高潮):05_ai_beats_masking.py · AI 破防
  5. 收尾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)

仿真 vs 真设备 的对齐

用仿真而不是 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
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 条。

About

侧信道攻击教学实验套件 · 经典 DPA/CPA/Template + AI MLP/CNN-Zaid/Transformer-SCA 对 Masked AES 的完整对比 · PyTorch + GPU

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages