KrishJeswal/CipherTrace-side-channel-ml
GitHub: KrishJeswal/CipherTrace-side-channel-ml
这是一个针对掩码AES-128的机器学习侧信道攻击剖面分析管道,通过特征工程和分类器评估来恢复密钥。
Stars: 0 | Forks: 0
# CipherTrace
**基于机器学习的AES-128掩码侧信道攻击。**
系统评估特征工程策略在侧信道攻击剖面分析中的应用,结合SHAP泄漏定位与泄漏模型比较。
## 项目概述
这是一个针对一阶布尔掩码AES-128实现的完整剖面攻击流程。攻击目标是ASCAD固定密钥数据集——由ANSSI(法国国家网络安全局)从ATM8515微控制器采集的50,000条功耗轨迹。
核心问题:给定AES加密过程中记录的功耗轨迹,经典机器学习模型能否恢复密钥?如果可以,哪种特征工程策略与分类器组合效果最佳——评估标准不是准确率,而是猜测熵。
三个新发现:
- **宏F1分数无法预测猜测熵。** 决策树F1最高(0.1094),但猜测熵最差(148.86)。MLP的F1中等,但猜测熵最优(PCA k=50时为16.36)。
- **ANOVA分析对掩码AES有害。** 它选择的是与掩码相关的采样点而非密钥相关点,导致猜测熵高于随机基准127。
- **身份标签可破解密钥,汉明重量标签则不能。** 用256类身份标签替代9类汉明重量标签,在500条轨迹下将猜测熵从12.03降至0.46——近乎完全恢复密钥。
## 数据集
**ASCAD固定密钥** — 由ANSSI通过[data.gouv.fr](https://www.data.gouv.fr/en/datasets/ascad-anssi-sca-database/)发布
ANSSI原始下载包是压缩的大文件(~800 MB)。它并非直接可用的`ASCAD.h5`格式——需要从中提取相关HDF5文件。`generate_ascad.py`脚本处理此过程:定位原始压缩包、提取固定密钥轨迹文件,并将`ASCAD.h5`写入`data/`目录(已划分剖面/攻击轨迹)。
| 属性 | 值 |
|---|---|
| 剖面轨迹数 | 50,000 |
| 攻击轨迹数 | 10,000 |
| 每条轨迹采样点 | 700 |
| 目标字节索引 | 2 |
| 正确密钥字节 | 0xe0 (224) |
| 防护措施 | 一阶布尔掩码 |
| 数据类型 | int8(训练前转为float32) |
| 最大信噪比 | 0.0032 |
信噪比低(采样点567处为0.0032)并非数据质量问题——这证实掩码防护措施工作正常。一阶布尔掩码将每个中间值拆分为两个随机份额,使得单个时间采样点本身信息量不足。
## 实验结果
### 分类性能(信噪比 k=200)
| 分类器 | 准确率 | 宏F1分数 |
|---|---|---|
| 随机森林 | **0.2713** | 0.0799 |
| XGBoost | 0.2675 | 0.0871 |
| MLP | 0.2612 | 0.0867 |
| 逻辑回归 | 0.2633 | 0.0748 |
| 决策树 | 0.2341 | **0.1094** |
随机基准:准确率=0.111,宏F1≈0.111。所有模型均超过基准,证明尽管存在掩码,仍存在真实泄漏信号。
### 500条轨迹下的猜测熵(k=50)
| 分类器 | 信噪比 | ANOVA | PCA |
|---|---|---|---|
| MLP | 53.49 | 138.23 | **16.36 ★** |
| XGBoost | 110.06 | 146.19 | 102.07 |
| 决策树 | 148.86 | 113.29 | 100.75 |
| 随机森林 | 121.86 | 146.66 | 134.45 |
| SVM | 126.63 | — | — |
| 逻辑回归 | 151.76 | 149.91 | 153.82 |
随机基准猜测熵=127。SVM的ANOVA/PCA结果已省略——k=50时运行时间过长。
### 汉明重量标签与身份标签对比(MLP + PCA k=100)
| 泄漏模型 | 类别数 | GE@100 | GE@500 | NtD |
|---|---|---|---|---|
| 汉明重量 | 9 | 51.34 | 12.03 | 未达到 |
| 身份 | 256 | 9.81 | **0.46** | ~500条轨迹 |
500条轨迹时猜测熵0.46,对于目标字节而言已构成实际可行的密钥恢复。
## 项目结构
```
CipherTrace-side-channel-ml/
├── src/
│ ├── components/
│ │ ├── data_ingestion.py # Load ASCAD.h5, return profiling/attack splits
│ │ ├── data_transformation.py # POITransformer: SNR, ANOVA, PCA (sklearn API)
│ │ └── model_trainer.py # Train 6 classifiers, 5-fold CV, joblib save
│ ├── pipeline/
│ │ ├── train_pipeline.py # Orchestrates full training flow
│ │ └── predict_pipeline.py # Load saved model, compute GE on attack traces
│ ├── utils.py # GE computation, SNR formula, SHAP helpers
│ ├── logger.py # Rotating file logger
│ └── exception.py # Custom exception with traceback detail
├── notebooks/
│ ├── 01_EDA.ipynb # Trace visualization, SNR spectrum, label dist
│ ├── 02_feature_engineering.ipynb # POI strategy comparison, PCA variance analysis
│ ├── 03_model_comparison.ipynb # 72-run grid, GE heatmap, effect of k
│ └── 04_novel_contributions.ipynb # SHAP analysis, HW vs. Identity GE curves
├── artifacts/ # Saved models (.joblib) and processed arrays
├── data/ # ASCAD.h5 lives here (not committed — see setup)
├── app.py # Streamlit app: upload trace → predict key byte
├── generate_ascad.py # Extracts ASCAD.h5 from the raw ANSSI archive
├── verify.py # Confirms dataset shapes before training
├── requirements.txt
├── setup.py
└── README.md
```
流程架构遵循模块化端到端机器学习结构:每个组件都是具有单一职责的独立类,配置使用数据类,所有训练模型通过joblib序列化,全流程贯穿日志记录和异常处理。
## 环境配置
**1. 克隆仓库并创建环境**
```
git clone https://github.com/KrishJeswal/CipherTrace-side-channel-ml
cd CipherTrace-side-channel-ml
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
```
**2. 下载ANSSI原始数据包**
访问[data.gouv.fr](https://www.data.gouv.fr/datasets/ascad)下载ASCAD固定密钥压缩包。将下载的文件放入`data/`目录。
**3. 生成ASCAD.h5文件**
压缩包并非直接可用的HDF5文件。运行:
```
python generate_ascad.py
```
此操作从压缩包中提取固定密钥轨迹文件,并将`data/ASCAD.h5`写入正确的50k/10k剖面/攻击划分。
**4. 验证数据集**
```
python verify.py
# Expected output:
# profiling_traces: (50000, 700)
# attack_traces: (10000, 700)
```
若形状匹配即可开始训练。
## 运行流程
**完整训练(全部72种配置):**
```
python src/pipeline/train_pipeline.py
```
在3种兴趣点选择策略和k∈{20,50,100,200}范围内训练全部6种分类器。模型保存至`artifacts/`。
**攻击轨迹上的猜测熵评估:**
```
python src/pipeline/predict_pipeline.py
```
**在notebooks中探索结果:**
```
jupyter notebook notebooks/
```
从`01_EDA.ipynb`开始按顺序执行。
**Streamlit应用:**
```
streamlit run app.py
```
上传原始功耗轨迹,获取预测的汉明重量类别和密钥字节概率分布。
## 方法论
### 攻击目标
攻击针对第一轮AES-128 S盒计算:
```
v = S-Box[ plaintext_byte ⊕ key_byte ]
```
在汉明重量模型下,设备此刻的功耗与`HW(v)`(`v`中1比特的数量)成正比。这产生9个标签类别(HW从0到8)。攻击者已知明文(在TLS、支付终端、固件启动序列中是现实假设),测试256个密钥假设,通过累积轨迹对数似然进行排序。正确密钥字节为0xe0。
### 兴趣点提取策略
评估了三种特征工程策略,每种将700采样点轨迹缩减为k个特征:
**信噪比** — 领域标准方法。计算每个时间采样点的`SNR[t] = Var(类别均值) / Mean(类内方差)`,按分数选取前k个。明确建模汉明重量泄漏,因此在存在一阶泄漏时能找到密钥相关采样点。
**ANOVA F检验** — 通过sklearn的`SelectKBest`进行通用机器学习特征选择。不假设泄漏结构。在掩码AES中,这实际上是阴性对照:它检测的是掩码处理产生的统计差异,而非密钥。信噪比与ANOVA在k=50时仅重叠13/50个采样点。
**PCA** — 对全部700个采样点联合降维。不同于信噪比和ANOVA,PCA组合相关时间采样点而非选择子集。前50个主成分捕获94.8%的轨迹方差。由于掩码将泄漏分散在两个时间窗口(分别对应`v'`和掩码`m`),PCA能将联合统计信息编码到单一成分中——MLP随后进行非线性利用。
### 独立测试中的猜测熵
GE(N)是100次独立随机实验中正确密钥字节的平均排名,每次实验在N条攻击轨迹上累积对数似然:
```
score(k) = Σᵢ log[ P(label(pᵢ, k)) + ε ]
```
GE=0表示正确密钥始终排第一。GE=127是随机猜测。文献中GE<5即视为实际可行的攻击。
## 关键发现
**为何宏F1不预测猜测熵:** 猜测熵取决于概率校准而非argmax准确率。决策树产生过度自信的叶节点概率——对数似然累积会指数级放大该误差。MLP的sigmoid输出本质上更柔和、校准更好,使其概率输出即使F1较低时,对密钥排序也更有用。
**为何ANOVA在掩码AES中失效:** ANOVA选择的是掩码处理在不同汉明重量类别间产生统计差异的采样点——而非密钥相关点。MLP使用ANOVA时猜测熵为138.23,比随机(127)更差。
**为何PCA优于信噪比:** 信噪比独立评估700个时间采样点,忽略其相关性。掩码抑制了每个采样点的一阶泄漏(峰值信噪比=0.0032)。PCA捕获跨时间窗口的联合统计信息,编码了信噪比无法检测的二阶掩码信号。SHAP分析证实MLP利用的成分与信噪比选择区域的重叠度仅为2/10。
**为何身份标签优于汉明重量标签:** 汉明重量将256个S盒输出压缩为9个类别,丢失了细粒度区分度。身份标签保留全部256个不同字节值作为独立类别。在50,000条剖面轨迹下,MLP有足够数据近似256类后验概率——更丰富的输出空间显著改善了对数似然累积,加速收敛至GE≈0。
## 技术栈
- **数据处理** — h5py, numpy, pandas
- **机器学习** — scikit-learn, XGBoost
- **可解释性** — SHAP (KernelExplainer)
- **可视化** — matplotlib, seaborn
- **应用** — Streamlit
- **序列化** — joblib
## 论文
**掩码AES-128侧信道攻击的机器学习分类器与特征工程策略系统评估**
Krish Jeswal — 印度班加罗尔RV工程学院
*提交至IEEE Access,2026年5月*
## 作者
**Krish Jeswal**
电子与通信工程,RVCE(2024–2028届)
[GitHub](https://github.com/KrishJeswal) · [LinkedIn](https://linkedin.com/in/krishjeswal)
标签:AES加密, Apex, ASCAD数据集, Guessing Entropy, Kubernetes, ML安全评估, SHAP分析, 侧信道攻击, 信息泄露, 分类器比较, 功率分析, 密码分析, 密码学, 手动系统调用, 掩码AES, 机器学习, 泄漏模型, 特征工程, 网络安全, 逆向工具, 隐私保护