DawnGlow/Single-trace-on-HQC

GitHub: DawnGlow/Single-trace-on-HQC

复现针对后量子密码方案 HQC 的单迹侧信道密钥恢复攻击的完整实验代码,涵盖基于 CNN 与置信传播的 SASCA 以及类 Turbo 后处理密钥恢复流程。

Stars: 0 | Forks: 0

# 运行“从乘法到恢复:针对 HQC 的单迹侧信道攻击”的代码 ## 1. 针对 Recursive Karatsuba 的 SASCA 论文第 4 节中关于 Karatsuba SASCA 的代码位于 `SASCA` 文件夹中。 ### 如何运行代码: 该程序在 HQC 的参考实现中,对其 Karatsuba 乘法执行 SASCA。 它使用了基于 LLR 域的 Belief Propagation (BP) 算法,包括基于 Sum-Product Algorithm 的 BP (LLR-SP) 和基于 Normalized Min-Sum Algorithm 的 BP (LLR-NMS)。 使用 SASCA,它可以恢复 HQC-128 的密钥。 #### 所需的输入文件: 要运行 `test.py`,需要以下输入文件: - **侧信道预测文件**: - `mask_a0.txt`:使用 CNN 得到的侧信道泄漏 `y0`(算法 2,第 7 行)的概率分布。 - `mask_a1.txt`:使用 CNN 得到的侧信道泄漏 `y2`(算法 2,第 7 行)的概率分布。 - `mask_ta.txt`:使用 CNN 得到的侧信道泄漏 `y1`(算法 2,第 7 行)的概率分布。 - `r_a0.txt`:使用 CNN 得到的侧信道泄漏 `r0`(算法 2,第 9、10 行)的概率分布。 - `r_a1.txt`:使用 CNN 得到的侧信道泄漏 `r2`(算法 2,第 9、10 行)的概率分布。 - `r_ta.txt`:使用 CNN 得到的侧信道泄漏 `r1`(算法 2,第 9、10 行)的概率分布。 ## 2. 有效密文下的单迹密钥恢复 单迹密钥恢复的代码位于 `KeyRecovery` 文件夹中(论文第 5 节)。 ### 如何运行代码: 该程序实现了一个类 turbo 的后处理/密钥恢复过程,并对存储在文本文件中的位级向量进行操作。 所有输入均代表长度为 `PARAM_N` 的二进制向量,并作为位压缩的 `uint64_t` 数组(`VEC_N_SIZE_64` 个字)加载。 每个位对应向量的一个坐标;未使用的尾部位必须为零。 #### 所需的输入文件: 要运行 `turbo-solver.c`,需要以下输入文件: - **侧信道预测文件**: - `PRED_C_TXT`:对密文向量 `c` 的含噪预测。 - `PRED_Y_TXT`:对秘密向量 `y` 的含噪预测。 - `PRED_X_TXT`:对秘密向量 `x` 的预测或概率输出(用于初始化或比较)。 - **真实参考文件**(仅用于验证和调试): - `C_TRUE_TXT`:真实的密文向量 `c`。 - `Y_TRUE_TXT`:真实的秘密向量 `y`。 - `X_TRUE_TXT`:真实的秘密向量 `x`。 - **公开和已知参数文件**: - `R1_TXT`:用于乘积 `r1 * y` 的稀疏向量 `r1`。 - `R2_TXT`:用于乘积 `r2 * x` 的稀疏向量 `r2`。 - `E_TXT`:已知的固定重量错误向量 `e`。 - `H_TXT`:公开向量 `h`。 - `S_TXT`:定义为 `s = x + h * y` 的向量。 - `M_TXT`:与消息相关的向量 `m`,用于构造 `mG`。
标签:Apex, C, Python, 侧信道攻击, 后量子密码, 客户端加密, 密码学, 密钥恢复, 手动系统调用, 无后门, 机器学习, 逆向工具