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, 机器学习, 泄漏模型, 特征工程, 网络安全, 逆向工具, 隐私保护