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, 侧信道攻击, 后量子密码, 客户端加密, 密码学, 密钥恢复, 手动系统调用, 无后门, 机器学习, 逆向工具