Sbsm157/NPcVAE-OSM
GitHub: Sbsm157/NPcVAE-OSM
NPcVAE-OSM 是一个实现可解释非剖析侧信道攻击的生成模型工具。
Stars: 1 | Forks: 0
# 从线性回归到可解释的非剖析侧信道攻击的生成模型
此 Git 仓库与文章 *从线性回归到可解释的非剖析侧信道攻击的生成模型* 相关联,该文章可在 [Cryptology ePrint Archive](https://eprint.iacr.org/2026/274) 上获取。
## 仓库内容
### 背景
我们在此仓库中提供了 NPcVAE-OSM 的实现和允许重新执行我们文章中进行的仿真和攻击的笔记本。
需要指出的是,对于 *Non profiled attack.ipynb* 笔记本,攻击场景仅针对仿真迹执行,因为我们出于环境原因未在此仓库中提供我们攻击所使用的数据集,但它们是公开可用的。
可在此处下载:
- **DPA contest v4.2**: https://dpacontest.telecom-paris.fr/v2
- **AES_HD_Ext**: https://github.com/AISyLab/AES_HD_Ext
- **ASCAD v1-F**: https://github.com/ANSSI-FR/ASCAD/blob/master/ATMEGA_AES_v1/ATM_AES_v1_fixed_key
- **ASCAD v1-R**: https://github.com/ANSSI-FR/ASCAD/blob/master/ATMEGA_AES_v1/ATM_AES_v1_variable_key
此外,我们提请用户注意,为确保正确执行攻击,*non_profiled_attack.py* 文件中的第 138、140、262 和 264 行也必须根据目标数据集进行调整。
我们使用 Python 3.11.8 开发了我们的模型,并使用了 Tensorflow [AAB+15] 和 Keras [C+15] 库。
### 实现技巧
如 [BCG+25] 中所述,我们指出在实现我们的模型时,考虑了一些实现技巧。
首先,关于方差权重的初始化和更新需要特别注意,以确保模型正常工作。
事实上,我们最初将它们设置为 1,并在它们的更新过程中添加了一个自定义约束,强制这些权重始终为正。
关于估计每个密钥假设 $k\in\mathcal{K}$ 的 $\Psi_\phi(Y^k)$ 和 $\Psi_\theta(Y^k)$ 的层,我们在实现这些全连接层时移除了偏置项,因为偏置项已经包含在敏感值的 Walsh-Hadamard 基分解中。
此外,由于 $(\mu_\phi)^k$ 和 $(\sigma^2_\phi)^k$ 必须分别收敛于 $D$ 和 $2D$(参见我们论文的第 3.2 节和公式 6),我们仅估计与 $(\mu_\phi)^k$ 相关的权重,然后使用这些估计值来计算 $(\sigma^2_\phi)^k$,而不是重新估计 $(\sigma^2_\phi)^k$ 的权重。
这使得对于每个密钥假设 $k$,可训练参数的数量减少了 $D$(其中 $D$ 是迹的维度)。
类似地,根据我们论文中的定理 3,我们为第一个密钥假设 $k_0$ 估计与 $(\mu_\phi)^{k_0}$ 相关的权重,即 $(\hat{\sigma}^2_\phi)^{k_0}$,然后为所有其他密钥假设重用这些估计的权重。
事实上,对于所有样本,所有 $(\hat{\sigma}^2_\phi)^{k}$ 都收敛于输入迹 $T$ 的真实方差 $\sigma^2_i$,无论考虑的是哪个密钥假设。
这使得我们因此能够达到我们论文命题 1 中所述的复杂度。
最后,为方便起见,我们将重建损失项乘以因子 $\frac{1}{|\mathcal{K}|}$(参见我们论文的命题 2),即我们考虑对 $k\in\mathcal{K}$ 取经验平均,而不是求和。
请注意,添加这个乘法常数不会使我们论文定理 2 中关于条件边际似然变分下界失效。
为确保所有密钥假设的权重适当收敛,我们在模型中应用局部梯度。
换言之,对于给定的密钥假设 $k$,梯度是通过考虑 KL 散度损失项和相应的重建子损失(即 $\mathbb{E}_{z \sim E_\phi}[\log(\mathbb{P}(T|Y^k,z,\theta))]$,参见我们论文的命题 2)之和来计算的。
然后,这些梯度被应用于涉及与 $k$ 相关的权重的计算图子部分。
NPcVAE-OSM architecture.
### 迹预处理 根据目标数据集的不同,执行了一些迹预处理,因为它们能提供更好的实验结果。 下面,我们详细介绍在每个数据集上执行的预处理: - 由于两个 **ASCAD v1** 数据集都是掩码实现,因此需要一个初步的预处理步骤来执行一阶攻击。 为此,我们重组了 13 个样本,这些样本最大化了与掩码值 $SBox[P_3 \oplus k^*] \oplus R_3$ 和掩码值 $R_3$ 相关的信噪比 (SNR)。 在我们的情况中使用的组合函数是 **中心化乘积组合** 方法。 获得这些攻击迹后,对 **ASCAD v1-F** 重组迹执行最后一个预处理步骤,即应用最大绝对值缩放。 对于 **ASCAD v1-R** 数据集,我们不应用额外的缩放。 - 关于 **仿真数据集** 和 **DPA contest v4.2** 数据集的预处理,我们分别对这两个数据集应用了标准化和最大绝对值缩放。 - 最后,对于 **AES\_HD\_Ext** 数据集,我们对迹应用偏置抑制预处理方法,然后添加一个我们设定的任意常数,在我们的案例中设为 $5$。 偏置抑制预处理包括去除迹的调制,即偏置。 这是通过从迹中减去经验均值 $\boldsymbol{\hat{\mu}}\in\mathbb{R}^D$ 来完成的,其中 $D$ 是迹的维度。 LRA 和 NPcVAE-OSM 攻击都考虑了相同的迹预处理。 为了可重现性,报告论文结果所使用的所有预处理设置总结在下表中。 | 数据集 | 重组函数 | 迹预处理 | 攻击迹维度 | | :----------------------------------- | :------------------: | :-----------------------------:| :----------------------:| | **仿真数据集** (两个数据集) | 不适用 | 标准化 | $D=1,000$ | | **DPA contest v4.2** | 不适用 | 最大绝对值缩放 | $D = 4,000$ | | **AES_HD_ext** | 不适用 | 偏置抑制 | $D = 1,250$ | | **ASCAD v1-F** | 中心化乘积 | 最大绝对值缩放 | $D=169$ | | **ASCAD v1-R** | 中心化乘积 | 无预处理 | $D=169$ | ### 超参数选择 由于 NPcVAE-OSM 是一种神经网络架构,优化过程需要定义一组可训练的超参数,即**学习率**、**批量大小**和**训练轮数**。 超参数是使用经典的随机搜索方法选择的,并将 Adam 作为优化器。 随机搜索优化所选范围被任意定义如下: - 学习率范围在 $[0.001, 0.01]$; - 批量大小范围在 $[2, 4, 8, 16, 32, 64]$; - 训练轮数范围在 $[10, 25, 50, 75, 100]$。 为了可重现性,我们在下表中报告了为所有数据集生成本文所呈现结果所使用的超参数设置。 然而,应该指出的是,并未对 NPcVAE-OSM 所考虑的超参数进行优化工作。 | 数据集 | 学习率 | 批量大小 | 训练轮数 | | :----------------------------------- | :-----------: | :---------:| :---------------:| | **仿真数据集** (两个数据集) | $0.01$ | $16$ | $50$ | | **DPA contest v4.2** | $0.001$ | $2$ | $50$ | | **AES_HD_ext** | $0.01$ | $32$ | $75$ | | **ASCAD v1-F** | $0.001$ | $8$ | $50$ | | **ASCAD v1-R** | $0.01$ | $2$ | $10$ | ### 仓库结构 我们的仓库具有以下结构: ``` . | Non profiled attack.ipynb | NPcVAE_OSM_picture.svg | requirements.txt | └── NPcVAE_OSM_utils non_profiled_attack.py NPcVAE_OSM_model.py NPcVAE_OSM_tools.py generate_traces.py Kernel_Weights_Constraints.py __init__.py ``` 此仓库包含 1 个笔记本、1 个文件、一张图片和一个包含 6 个模块的包。 下面,我们简要总结每个文件的内容。 如前所述,这些笔记本允许用户重新执行第 6 节中进行的攻击。 - *Non profiled attack.ipynb* 是一个笔记本,我们在其中使用 NPcVAE-OSM 并遵循第 5.2 节提供的策略进行非剖析攻击。 - *NPcVAE_OSM_picture.svg* 是一张 NPcVAE-OSM 架构的图片。 - *requirements.txt* 文件在 快速开始 部分描述。 此外,我们提供了一个名为 $`\texttt{NPcVAE\_OSM\_utils}`$ 的包,其中包含运行笔记本所需的模块。 - *non_profiled_attack.py* 实现了第 5.2 节介绍的非剖析攻击策略。 - *NPcVAE_OSM_model.py* 实现了 NPcVAE-OSM 模型。 - *NPcVAE_OSM_tools.py* 包含使用 NPcVAE-OSM 时可能有用的所有辅助函数,例如权重可视化函数或投影到论文中使用的 Guilley *等* 的正交归一化基 [GHMR17]。 - *generate_traces.py* 实现了迹生成函数,用于进行我们的仿真。 - *Kernel_Weights_Constraints.py* 实现了 实现技巧 部分中解释的自定义权重约束。 - *\_\_init\_\_.py* 是一个空文件,用于创建我们的 $`\texttt{cvae\_osm\_utils}`$ 包。(返回顶部)
## 快速开始 ### 前置条件 为了确保实验的可重现性,我们提供了一个 `requirements.txt` 文件,用于通过 `pip install` 重现用于实验的 Python 环境。 如果此方法不合适(无法使用虚拟环境),我们另外提供一份不带版本信息的依赖项列表。 在后一种情况下,很可能无法重现相同的结果和/或需要调整部分代码。 ### 安装 #### 使用 `requirements.txt` 首先,你需要使用标准的 `python` 命令创建一个新的虚拟环境: ``` python -m venv .venv ``` 然后激活环境并安装依赖项: ``` source .venv/bin/activate pip install -r requirements.txt ``` #### 使用依赖项列表 运行笔记本所需的包是: - tensorflow, - scipy, - numpy, - scikit-learn, - matplotlib, - ipykernel. 如果以上方法都不适合你的情况,你可以尝试使用你选择的方法安装这些包并运行脚本。 为方便起见,我们提供下面的 pip 命令。 ``` pip install tensorflow scipy numpy scikit-learn matplotlib ipykernel ```(返回顶部)
## 引用 如果您使用我们的代码、模型或希望引用我们的结果,请使用以下 BibTex 条目: ``` @misc{cryptoeprint:2026/274, author = {Sana Boussam and Mathieu Carbone and Benoît Gérard and Guénaël Renault and Gabriel Zaid}, title = {From linear regression to generative model for explainable non profiled side-channel attacks}, howpublished = {Cryptology {ePrint} Archive, Paper 2026/274}, year = {2026}, url = {https://eprint.iacr.org/2026/274} } ```(返回顶部)
## 参考文献 [AAB+15] Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S. Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Ian Goodfellow, Andrew Harp, Geoffrey Irving, Michael Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dandelion Mané, Rajat Monga, Sherry Moore, Derek Murray, Chris Olah, Mike Schuster, Jonathon Shlens, Benoit Steiner, Ilya Sutskever, Kunal Talwar, Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Viégas, Oriol Vinyals, Pete Warden, Martin Wattenberg, Martin Wicke, Yuan Yu, and Xiaoqiang Zheng. TensorFlow: Large-scale machine learning on heterogeneous systems, 2015. Software available from tensorflow.org. [BCG+25] Sana Boussam, Mathieu Carbone, Benoît Gérard, Guénaël Renault, and Gabriel Zaid. Optimal dimensionality reduction using conditional variational autoencoder. IACR Transactions on Cryptographic Hardware and Embedded Systems, 2025(3):164–211, Jun. 2025. [C+15] François Chollet et al. Keras. https://keras.io, 2015. [GHMR17] Sylvain Guilley, Annelie Heuser, Tang Ming, and Olivier Rioul. Stochastic side-channel leakage analysis via orthonormal decomposition. In Innovative Security Solutions for Information Technology and Communications: 10th International Conference, SecITC 2017, Bucharest, Romania, June 8–9, 2017, Revised Selected Papers 10, pages 12–27. Springer, 2017.(返回顶部)
标签:Jupyter笔记本, meg, NPcVAE-OSM模型, 侧信道攻击, 信息安全, 公开数据集, 变分自编码器, 可解释机器学习, 实验模拟, 密码分析, 密码学安全, 攻击模拟, 数据集处理, 机器学习应用, 模型实现, 深度学习, 特征预处理, 生成模型, 线性回归, 超参数调优, 逆向工具, 非描述性侧信道攻击, 驱动签名利用