AdyaSarr/Stage-de-Fin-d-ann-e-M2-Side-Channel-Attack

GitHub: AdyaSarr/Stage-de-Fin-d-ann-e-M2-Side-Channel-Attack

该项目实现了针对后量子密码系统 Classic McEliece 的侧信道攻击,通过分析解封装过程中的汉明重量泄露,完整恢复包括 Goppa 多项式和支持集在内的私钥。

Stars: 0 | Forks: 0

# M2 阶段实习 — 针对 Classic McEliece 的侧信道攻击 [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) 本仓库包含针对后量子密码系统 **Classic McEliece** 的侧信道攻击 (*side-channel attack*) 的完整实现。该工作是在 **Hubert Curien 实验室**(圣艾蒂安)进行的 M2 毕业实习的一部分,由 **Pierre-Louis Cayrel(里昂大学 Jean Monnet 大学 - LabHC 的 HDR 讲师)、Brice Colombier(圣艾蒂安 IUT 的电子与编程研究员及教授)、Michaël Bulois(Camille Jordan 研究所实验室的数学讲师)、Vincent GROSSO(CNRS 研究员)和 Vlad-Florin Dragoi(罗马尼亚阿拉德 Aurel Vlaicu 大学副教授)** 共同指导完成。 ## 背景 Classic McEliece 是一种基于 **二元 Goppa 码** 的后量子密码系统,也是 NIST PQC 标准化的决赛选手。其安全性建立在随机码译码的困难性,以及通过秘密置换隐藏 Goppa 结构的基础之上。 本研究探讨了一种利用解封装过程中信息泄露的**侧信道攻击**。基于带噪声的汉明重量采集结果: $$y_{i,j} = \mathrm{wt}(\alpha_i^j \cdot G(\alpha_i)^{-2}) + \varepsilon_{i,j}, \qquad \varepsilon_{i,j} \sim \mathcal{N}(0, \sigma^2)$$ 攻击者可以完整重构出私钥 $(G, L)$:即 Goppa 多项式 $G$ 和支持集 $L = (\alpha_0, \ldots, \alpha_{n-1})$。 ## 攻击 Pipeline ┌─────────────────────────────────────────────────────────────────┐ ───────────────────┐\\ │1. 通过 FFT 进行 MLE 译码│ │带噪声的采集结果 (n×N) → 数据对 (α_i, β_i = G(α_i)^-2)│ │ 开销:O(P² log P) 其中 P = 2^m - 1│ ├───────────────────────────────────────────────────────────────── ─────────┤ │2. G 的代数重构│ │Bernstein 算法 (2024) — Reed-Solomon 插值│ │含纠错功能│ │开销:O(n² m²) 次二元运算│ ├───────────────────────────────────────────────────────────────── │3. 支持集 L 的重构│ │在公共校验矩阵上进行高斯消元(Pivot de Gauss)│ │开销:O((mt)³ + n(mt)²) 次二元运算│ └───────────────────────────────────────────────────────────────── ─────────┘ ## 实验结果 ### Classic McEliece 官方参数验证 | 参数 | m | t | n | mt | 测试的 σ | 攻击 | |------------------|----|-----|------|------|---------|---------| | mceliece348864 | 12 | 64 | 3488 | 768 | 0 – 2.3 | ✓ | | mceliece348864 | 12 | 64 | 3488 | 2.5+ | ✗ (达到阈值) | | mceliece460896 | 13 | 96 | 4608 | 1248 | 0 – 3.0+| ✓ | 只要 FFT 译码器的错误率对于 `mceliece348864` 保持在约 5% 以下,对于 `mceliece460896` 保持在 3% 以下,该攻击就能完全成功(同时重构 $G$ **和** $L$)。 ### mceliece460896 上的 σ 扫描测试 | σ | 成功率 | 错误数 | 恢复 G | 恢复 L | |------|----------|---------|--------|--------| | 0.5 | 1.0000 | 0 | ✓ | ✓ | | 1.0 | 1.0000 | 0 | ✓ | ✓ | | 1.5 | 1.0000 | 0 | ✓ | ✓ | | 2.0 | 1.0000 | 0 | ✓ | ✓ | | 2.5 | 0.9979 | 3 | ✓ | ✓ | | 3.0 | 0.9827 | 25 | ✓ | ✓ | ## 仓库结构 . ├──────src/ │ ├── Classe_Classic_McEliece.py # 密码系统的实现 │ ├── Classe_Decodeur_FFT.py # 基于 FFT 的 MLE 译码器 │ └── GoppaReconstructor.py # 代数重构 ├──────tests/ │ └── tests.py # 完整的测试 pipeline ├──────docs/ # 实习报告(即将推出) ├──────results/ # 实验结果 ├──────requirements.txt ├──────.gitignore └──────README.md ## 安装与使用 ### 前置条件 - Python ≥ 3.9 - 依赖库:`numpy`, `galois`, `joblib` ### 安装 ``` git clone https://github.com/AdyaSarr/Stage-de-Fin-d-annee-M2-Side-Channel-Attack.git cd Stage-de-Fin-d-annee-M2-Side-Channel-Attack pip install -r requirements.txt ``` ### 执行 运行完整的测试 pipeline: ``` python tests/tests.py mceliece348864 python tests/tests.py mceliece460896 ``` ### 编程方式使用示例 ``` import sys sys.path.insert(0, 'src') from Classe_Classic_McEliece import ClassicMcEliece from Classe_Decodeur_FFT import DecodorFFT from GoppaReconstructor import GoppaAttack import numpy as np # 密钥生成 mc = ClassicMcEliece('mceliece348864') mc.key_generation() # 含噪 acquisition decoder = DecodorFFT(mc) acq = decoder.noise_acquisitions(sigma=2.0) # FFT 解码 alphas, betas, scores = decoder.found_all_alpha_beta( acq, mode='alpha_any', Nb_couple=968 ) # 密钥 reconstruction attacker = GoppaAttack(mc) positions = np.arange(968, dtype=np.int64) G_hat, L_hat = attacker.full_attack( alphas, betas, positions, e_max=70, r_for_G=300 ) print(f"G_hat == G ? {G_hat == mc.G}") print(f"L_hat == L ? {np.array_equal(L_hat, [int(a) for a in mc.L])}") ``` ## 理论框架 本攻击依赖于以下工具: - **最大似然译码** (MLE),利用循环抽取和离散对数变量替换实现 FFT 加速。 - Daniel J. Bernstein 提出的**带误差的 Reed-Solomon 插值算法**(*Understanding binary-Goppa decoding*, IACR ePrint 2024),通过求解线性方程组来计算近似值。 - **Goppa 支持集重构**,利用系统化形式的公共校验矩阵,并基于映射 $\Phi_G$ 的单射性。 报告中详细介绍了关于可容忍噪声阈值($\sigma_c$)、所需最小数据对数量($n_{\min}(p)$)的分析,以及对由 $X$(Artin 素数)生成的正规基的病态情况的探讨。 ## 参考文献 1. **Classic McEliece team.** *Classic McEliece: conservative code-based cryptography*. NIST PQC Round 4 submission (2022). [https://classic.mceliece.org/](https://classic.mceliece.org/) 2. **Daniel J. Bernstein.** *Understanding binary-Goppa decoding*. IACR Communications in Cryptology, 2024. [https://cic.iacr.org/p/1/1/14/](https://cic.iacr.org/p/1/1/14/) 3. **Nicolas Vallet, Brice Colombie, Vlad-Florin Drăgoi, Vincent Grosso, Pierre-Louis Cayrel**[https://cic.iacr.org/p/2/2/26/pdf](https://cic.iacr.org/p/2/2/26/pdf). 4. **Vlad Dragoi, Brice Colombier, Nicolas Vallet, Pierre-Louis Cayrel, Vincent Grosso.**[https://hal.science/hal-04835914/document](https://hal.science/hal-04835914/document) 5. **Michaël Bulois , Pierre-Louis Cayrel , Vlad-Florin Drăgoi , and Vincent Grosso**.**** 6. **Annelie Heuser⋆, Olivier Rioul, and Sylvain Guilley**.[https://eprint.iacr.org/2014/527.pdf](https://eprint.iacr.org/2014/527.pdf) ## 作者 **Adya SARR** M2 数学、计算机与密码学应用 (MIC) 巴黎西岱大学 (Université Paris Cité) Hubert Curien 实验室实习生 — 让·莫奈大学 (Université Jean-Monnet),圣艾蒂安 ## 许可证 本代码在 MIT 许可证下分发。详情请参阅 [LICENSE](LICENSE) 文件。
标签:Classic McEliece, Python, 侧信道攻击, 后量子密码学, 密码学, 手动系统调用, 无后门, 逆向工具