adityasnipnet/Post_Quantum_Encryption_Toolkit
GitHub: adityasnipnet/Post_Quantum_Encryption_Toolkit
一个基于 Python 的后量子加密工具包,实现 NIST 标准化算法并提供基准测试与混合加密演示,解决经典公钥算法在量子计算下的破解风险。
Stars: 0 | Forks: 0
# 后量子加密工具包
一个完整的 Python 后量子密码学工具包,提供 NIST 标准化算法、基准测试以及混合加密演示应用。**这是所有加密的未来。**
## 是什么与为什么
经典加密(RSA、ECDH、ECDSA)可被足够大的量子计算机上的 Shor 算法破解。NIST 于 2024 年 finalized 了其后量子标准。本工具包实现了这些标准并进行基准测试。
| 经典算法 | 后量子替代方案 | 基础 |
|----------|----------------|------|
| RSA / ECDH | CRYSTALS-Kyber | 模块 LWE |
| ECDSA / RSA-PSS | CRYSTALS-Dilithium | 模块 LWE + SIS |
| — | SPHINCS+ | 哈希函数 |
## 项目结构
```
pqc_toolkit/
├── main.py # CLI entry point
├── kyber_kem.py # CRYSTALS-Kyber Key Encapsulation Mechanism
├── dilithium_sig.py # CRYSTALS-Dilithium digital signatures
├── classical_baseline.py# RSA and ECDH/ECDSA for comparison
├── hybrid_encrypt.py # Kyber + AES-256-GCM file encryption
├── benchmark.py # Full performance comparison suite
├── requirements.txt
└── tests/
└── test_pqc.py # Pytest unit tests (38 tests)
```
## 安装
```
# 安装 liboqs 系统依赖 (macOS)
brew install liboqs
# 安装 liboqs 系统依赖 (Ubuntu/Debian)
sudo apt install -y liboqs-dev
# 安装 Python 依赖
pip install -r requirements.txt
```
## 快速开始
```
# 运行所有演示 (Kyber, Dilithium, 混合加密)
python main.py demo
# 生成 Kyber-768 密钥对
python main.py keygen --level 768 --out mykey
# 加密文件给收件人
python main.py encrypt secret.txt --pubkey mykey.pub
# 解密
python main.py decrypt secret.txt.pqe --privkey mykey.key
# 签名文件
python main.py sign document.pdf --privkey dilithium.key
# 验证签名
python main.py verify document.pdf --pubkey dilithium.pub --sig document.pdf.sig
# 运行完整基准测试 (PQC vs RSA vs ECC, 200 次迭代)
python main.py benchmark --runs 200 --chart
```
## 基准测试结果(Apple M2,100 次迭代)
### 密钥交换 / KEM
| 算法 | 量子安全 | 公钥 | 私钥 | 密文 | 密钥生成 | 封装 | 解封装 |
|------|----------|------|------|------|----------|------|--------|
| ECDH-P256 | 否 | 91 B | 121 B | 91 B | 0.08 ms | 0.07 ms | 0.07 ms |
| ECDH-P384 | 否 | 120 B | 167 B | 120 B | 0.12 ms | 0.10 ms | 0.10 ms |
| RSA-2048 | 否 | 294 B | 1218 B | 256 B | 38 ms | 0.08 ms | 1.1 ms |
| RSA-4096 | 否 | 550 B | 2374 B | 512 B | 280 ms | 0.3 ms | 8.5 ms |
| **Kyber512** | **是** | **800 B** | **1632 B** | **768 B** | **0.04 ms** | **0.05 ms** | **0.05 ms** |
| **Kyber768** | **是** | **1184 B** | **2400 B** | **1088 B** | **0.06 ms** | **0.07 ms** | **0.06 ms** |
| **Kyber1024** | **是** | **1568 B** | **3168 B** | **1568 B** | **0.09 ms** | **0.10 ms** | **0.09 ms** |
**关键洞察:** Kyber768 比 ECDH-P256 更快,且比 RSA-2048 快 500 倍以上,密钥虽更大但仍非常紧凑。
### 数字签名
| 算法 | 量子安全 | 公钥 | 私钥 | 签名 | 密钥生成 | 签名 | 验证 |
|------|----------|------|------|------|----------|------|--------|
| ECDSA-P256 | 否 | 91 B | 121 B | ~71 B | 0.08 ms | 0.07 ms | 0.12 ms |
| RSA-PSS-2048 | 否 | 294 B | 1218 B | 256 B | 38 ms | 1.1 ms | 0.08 ms |
| **Dilithium2** | **是** | **1312 B** | **2528 B** | **2420 B** | **0.05 ms** | **0.07 ms** | **0.04 ms** |
| **Dilithium3** | **是** | **1952 B** | **4000 B** | **3293 B** | **0.07 ms** | **0.10 ms** | **0.06 ms** |
| **Dilithium5** | **是** | **2592 B** | **4864 B** | **4595 B** | **0.10 ms** | **0.15 ms** | **0.09 ms** |
**关键洞察:** Dilithium 的密钥生成速度比 ECDSA 快,且远快于 RSA-PSS。签名体积更大(约 3 KB 对比 ECDSA 的 71 字节)—这是主要的权衡。
## 混合加密包格式(`.pqe`)
```
[4B] Magic: "PQE\x01"
[1B] Version
[2B] Algorithm ID (Kyber512=1, Kyber768=2, Kyber1024=3)
[4B] Kyber ciphertext length
[N B] Kyber ciphertext ← the "lockbox" for the AES key
[12B] AES-GCM nonce
[4B] Plaintext length
[M B] AES-256-GCM ciphertext + 16B auth tag
```
Kyber 密文允许接收者派生 AES 密钥。只有持有私钥的一方可以执行此操作。AES-GCM 认证标签可检测任何篡改。
## 安全特性
- **IND-CCA2 安全:** Kyber768 在自适应选择密文攻击下是安全的。
- **EU-CMA 安全:** Dilithium3 在选择消息攻击下具有可证明安全性。
- **混合设计:** 即使 Kyber 在经典意义上被破解,AES-256-GCM 层仍然安全。
- **认证:** AES-GCM 提供内置认证 — 任何对加密有效载荷的篡改都会被检测到。
## 下一步要构建的
- 使用 Kyber + Dilithium 实现的 TLS 1.3 风格握手模拟器
- 加密剪贴板内容的浏览器扩展
- 带有 PQC 密钥交换的安全消息应用
- 与 mTLS 集成的微服务
- 硬件安全模块(HSM)模拟器
## 参考
- [NIST 后量子标准(2024)](https://csrc.nist.gov/projects/post-quantum-cryptography)
- [CRYSTALS-Kyber 规范](https://pq-crystals.org/kyber/)
- [CRYSTALS-Dilithium 规范](https://pq-crystals.org/dilithium/)
- [Open Quantum Safe 项目](https://openquantumsafe.org/)
- [liboqs-python](https://github.com/open-quantum-safe/liboqs-python)
标签:AES-256-GCM, benchmark, CRYSTALS-Dilithium, CRYSTALS-Kyber, CVE, liboqs, NIST, PQC, Python, SPHINCS+, 二进制发布, 加密工具包, 后量子密码, 密钥封装, 密钥生成, 开源工具, 性能评测, 数字签名, 文件加密, 无后门, 混合加密, 签名验证, 蓝队防御, 逆向工具, 量子安全, 量子计算安全