shamanthwick/pqc-tls-1.3

GitHub: shamanthwick/pqc-tls-1.3

这是一个基于 Python 的后量子 TLS 1.3 实现项目,使用 NIST 标准的 ML-KEM 和 ML-DSA 替换传统算法,并提供了详细的性能对比分析。

Stars: 0 | Forks: 0

# 🚀 Post-Quantum TLS 1.3 (PQC-TLS) [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ## 📋 任务 2 目标 **开发一个采用 NIST PQC(后量子密码学)标准进行证书和密钥交换的 TLS 版本,并评估其性能。** ### 我们构建的内容 一个完整的 **Post-Quantum TLS 1.3** 实现,具有以下特点: - ✅ 使用 **ML-KEM-768** (CRYSTALS-Kyber) 替换 X25519 进行密钥交换 - ✅ 使用 **ML-DSA-65** (CRYSTALS-Dilithium) 替换 ECDSA/RSA 进行签名 - ✅ 评估性能:延迟、带宽、安全级别 - ✅ 对比经典 TLS 与后量子 TLS ### 需求 1. ✅ 从 [tls13.xargs.org](https://tls13.xargs.org) 获取现有的 TLS 1.3 实现 2. ✅ 使用 **NIST PQC 标准** 替换经典密码学: - **密钥交换**:CRYSTALS-Kyber (ML-KEM) - **签名**:CRYSTALS-Dilithium (ML-DSA) 或 SPHINCS+ (SLH-DSA) 3. ✅ 评估性能: - 延迟对比 - 通信开销(密钥/证书大小) - 安全级别(经典 vs. 后量子) ## 🎯 NIST PQC 标准 2024 年 8 月,NIST 确定了首批后量子密码学标准: | 算法 | 标准 | 用途 | 安全级别 | |-----------|----------|---------|----------------| | **ML-KEM** (CRYSTALS-Kyber) | FIPS 203 | 密钥封装 | Level 3/5 | | **ML-DSA** (CRYSTALS-Dilithium) | FIPS 204 | 数字签名 | Level 2/3/5 | | **SLH-DSA** (SPHINCS+) | FIPS 205 | 数字签名(备份) | Level 1/3/5 | ### 为什么选择这些算法? - **ML-KEM**:速度快,密钥小 - 非常适合密钥交换 - **ML-DSA**:主要签名标准 - 验证效率高 - **SLH-DSA**:保守的备份方案 - 基于哈希函数(非常保守的安全性) ## 🏗️ 项目架构 ``` ┌─────────────────────────────────────────────────────────┐ │ Classical TLS 1.3 │ │ - X25519 Key Exchange │ │ - RSA/ECDSA Signatures │ │ - AES-GCM / ChaCha20 Encryption │ └─────────────────────────────────────────────────────────┘ ↓ [REPLACE CRYPTO] ↓ ┌─────────────────────────────────────────────────────────┐ │ Post-Quantum TLS 1.3 │ │ - ML-KEM (Kyber) Key Exchange │ │ - ML-DSA (Dilithium) Signatures │ │ - AES-GCM / ChaCha20 Encryption (unchanged) │ └─────────────────────────────────────────────────────────┘ ↓ [PERFORMANCE EVAL] ↓ ┌─────────────────────────────────────────────────────────┐ │ Comparison Report │ │ - Latency: Classical vs. PQC │ │ - Bandwidth: Key sizes, certificate sizes │ │ - Security: 128-bit vs. 256-bit quantum security │ └─────────────────────────────────────────────────────────┘ ``` ## 🚀 快速开始 ### 步骤 1:安装依赖 ``` # 安装 PQCrypto 库 pip install pqcrypto # 对于 Kyber (ML-KEM) pip install kyber # 对于 Dilithium (ML-DSA) pip install dilithium # 对于 SPHINCS+ (SLH-DSA) pip install sphincs # TLS 和加密工具 pip install cryptography pyopenssl ``` ### 步骤 2:运行 PQC-TLS 演示 ``` # 运行经典 TLS 1.3 (baseline) python src/classic_tls.py # 运行后量子 TLS 1.3 python src/pqc_tls.py # 运行性能比较 python src/performance_eval.py ``` ### 步骤 3:查看结果 ``` # 查看性能比较 cat results/performance_comparison.md # 查看详细指标 cat results/metrics.json ``` ## 📊 TLS 1.3 握手流程 ### 经典 TLS 1.3 (X25519 + RSA/ECDSA) ``` Client Server | | |--- Client Hello (X25519 key share) ----------->| | | |<-- Server Hello (X25519 key share) ------------| |<-- [Encrypted] Certificate (RSA/ECDSA) --------| |<-- [Encrypted] Certificate Verify -------------| |<-- [Encrypted] Server Finished ----------------| | | |--- [Encrypted] Client Finished ---------------->| |--- [Encrypted] Application Data --------------->| ``` ### 后量子 TLS 1.3 (ML-KEM + ML-DSA) ``` Client Server | | |--- Client Hello (Kyber key share) ------------>| | | |<-- Server Hello (Kyber key share) -------------| |<-- [Encrypted] Certificate (Dilithium) --------| |<-- [Encrypted] Certificate Verify (ML-DSA) ----| |<-- [Encrypted] Server Finished ----------------| | | |--- [Encrypted] Client Finished ---------------->| |--- [Encrypted] Application Data --------------->| ``` ## 🔐 密码学替换方案 | TLS 组件 | 经典方案 | 后量子方案 | 标准 | |---------------|-----------|--------------|----------| | **密钥交换** | X25519 (ECDH) | ML-KEM-768 (Kyber-768) | FIPS 203 | | **签名** | RSA-2048 / ECDSA P-256 | ML-DSA-65 (Dilithium-3) | FIPS 204 | | **备份签名** | - | SLH-DSA-128s (SPHINCS+-128s) | FIPS 205 | | **加密** | AES-256-GCM | AES-256-GCM(保持不变) | - | | **哈希** | SHA-384 | SHA-384(保持不变) | - | ## 📈 性能指标 ### 密钥大小对比 | 算法 | 公钥大小 | 私钥大小 | 密文/签名 | |-----------|-----------------|------------------|---------------------| | **X25519** | 32 字节 | 32 字节 | - | | **ML-KEM-768** | 1,184 字节 | 2,400 字节 | 1,088 字节 | | **RSA-2048** | 256 字节 | 256 字节 | 256 字节(签名) | | **ML-DSA-65** | 1,952 字节 | 4,032 字节 | 3,309 字节(签名) | | **ECDSA P-256** | 64 字节 | 32 字节 | 64 字节(签名) | ### 安全级别 | 算法 | 经典安全性 | 量子安全性 | |-----------|-------------------|------------------| | **X25519** | 128 位 | 64 位 | | **ML-KEM-768** | 256 位 | 128 位 | | **RSA-2048** | 112 位 | 0 位 | | **ML-DSA-65** | 256 位 | 128 位 | ### 预期性能影响 | 指标 | 经典 TLS | PQC-TLS | 开销 | |--------|---------------|---------|----------| | **握手延迟** | ~50ms | ~70-100ms | +40-100% | | **Client Hello 大小** | ~300 字节 | ~1,500 字节 | +400% | | **证书大小** | ~2 KB | ~5-10 KB | +150-400% | | **签名验证** | ~1ms | ~5-10ms | +400-900% | ## 📁 项目结构 ``` Task2-PQC-TLS/ ├── src/ │ ├── classic_tls.py ← Classical TLS 1.3 implementation │ ├── pqc_tls.py ← Post-quantum TLS 1.3 implementation │ ├── kyber_kem.py ← ML-KEM key encapsulation │ ├── dilithium_sig.py ← ML-DSA signatures │ ├── sphincs_sig.py ← SLH-DSA signatures (backup) │ ├── certificate.py ← X.509 certificate generation │ ├── performance_eval.py ← Performance comparison │ └── utils.py ← Helper functions ├── tests/ │ ├── test_kyber.py │ ├── test_dilithium.py │ └── test_tls_handshake.py ├── results/ │ ├── performance_comparison.md │ ├── metrics.json │ └── latency_graph.png ├── references/ │ ├── nist_pqc_standards.pdf │ └── tls13_spec.pdf ├── README.md ← This file └── TASK2_REPORT.md ← Detailed technical report ``` ## 🔬 实现细节 ### 1. ML-KEM 密钥封装 (Kyber) ``` from pqcrypto.kem.kyber768 import generate_keypair, encapsulate, decapsulate # 服务器生成密钥对 public_key, private_key = generate_keypair() # 客户端封装密钥 ciphertext, shared_secret_client = encapsulate(public_key) # 服务器解封装密钥 shared_secret_server = decapsulate(private_key, ciphertext) # 双方现在共享相同的密钥 assert shared_secret_client == shared_secret_server ``` ### 2. ML-DSA 签名 (Dilithium) ``` from pqcrypto.signature.dilithium3 import generate_keypair, sign, verify # 生成签名密钥对 public_key, private_key = generate_keypair() # 签署证书 signature = sign(private_key, certificate_data) # 验证签名 is_valid = verify(public_key, certificate_data, signature) ``` ### 3. 带有 PQC 的 X.509 证书 ``` # 证书结构 (X.509 v3) certificate = { "version": "v3", "serial_number": "...", "signature_algorithm": "ML-DSA-65", "issuer": "CN=PQC Server", "validity": {...}, "subject": "CN=tls13.server", "subject_public_key_info": { "algorithm": "ML-DSA-65", "public_key": dilithium_public_key # 1,952 bytes }, "extensions": {...}, "signature": dilithium_signature # 3,309 bytes } ``` ## 📖 参考资料 1. **TLS 1.3 Demo**: https://tls13.xargs.org 2. **NIST PQC Standards**: https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards 3. **Let's Encrypt Certificates**: https://letsencrypt.org 4. **FIPS 203 (ML-KEM)**: https://csrc.nist.gov/pubs/fips/203/final 5. **FIPS 204 (ML-DSA)**: https://csrc.nist.gov/pubs/fips/204/final 6. **FIPS 205 (SLH-DSA)**: https://csrc.nist.gov/pubs/fips/205/final ## 📬 提交信息 - **课程:** Formal Verification of Security Protocols - **机构:** IIT Roorkee - **教师:** Prof. Raghvendra Singh Rohit - **任务:** Task 2 - Post-Quantum TLS 1.3 - **许可证:** MIT License
**Made with ❤️ for Formal Verification at IIT Roorkee**
标签:CRYSTALS-Dilithium, CRYSTALS-Kyber, CVE, FIPS 203, FIPS 204, FIPS 205, IIT Roorkee, MIT协议, ML-DSA, ML-KEM, NIST PQC, Python, SPHINCS+, TLS 1.3, 后量子密码学, 密码学, 密钥交换, 带宽分析, 延迟测试, 形式化验证, 性能评估, 手动系统调用, 抗量子计算, 数字签名, 无后门, 网络安全, 逆向工具, 隐私保护