一、引言
前几节我们学习了基于 椭圆曲线(ECC) 的密钥协商协议,例如 ECDH、SIGMA、TLS 握手等。
它们的安全性依赖于 椭圆曲线离散对数问题(ECDLP) 的困难性。
然而,随着 量子计算 的发展,Shor 算法能够在多项式时间内高效解决 离散对数问题 和 大数分解问题。
这意味着:
- 一旦大规模量子计算机出现,RSA、DH、ECDH 等传统公钥协议将不再安全。
因此,密码学界提出了 后量子密码学(Post-Quantum Cryptography, PQC),并探索 混合密钥协商 来平稳过渡。
二、后量子密码学 (PQC) 概述
1. 核心思想
设计新的密码算法,使其即使面对量子计算机也安全。
2. 常见候选算法
- 格密码(Lattice-based):如 Kyber、NTRU。
- 同源密码(Isogeny-based):如 SIDH、CSIDH。
- 编码理论密码:如 Classic McEliece。
3. NIST 标准化进程
- 2022 年,NIST 公布了首批后量子标准候选算法:
- Kyber(密钥封装机制 KEM)。
- Dilithium、Falcon(数字签名)。
三、混合密钥协商
1. 为什么需要“混合”?
- 目前 ECC 仍是主流,完全切换到 PQC 需要时间。
- PQC 算法较新,可能会被发现漏洞。
- 混合方案能提供“双重保险”:
- 即使 PQC 被攻破,ECC 仍然安全。
- 即使 ECC 被量子攻击,PQC 仍然安全。
2. 工作原理
- 双方同时运行 ECDH 和 PQC KEM,生成两个密钥。
- 最终会话密钥 = 组合(ECDH 密钥, PQC 密钥)。
3. 应用场景
- TLS 1.3 混合密钥交换:Cloudflare、Google 已测试过 ECDH + Kyber 的混合模式。
- 区块链与 Web3:过渡期可能采用混合签名/混合协商方案。
四、案例:TLS 1.3 混合密钥交换
1. 传统模式
- 客户端与服务器通过 ECDHE 协商密钥。
2. 混合模式
- 客户端发送:(A=aP,Kyber 公钥)(A = aP, \text{Kyber 公钥})(A=aP,Kyber 公钥)。
- 服务器回复:(B=bP,Kyber 密文)(B = bP, \text{Kyber 密文})(B=bP,Kyber 密文)。
- 双方共享密钥:
- ECDH 计算 abPabPabP。
- Kyber 生成共享密钥 KPQK_{PQ}KPQ。
- 最终会话密钥 K=Hash(KECDH∥KPQ)K = \text{Hash}(K_{ECDH} \| K_{PQ})K=Hash(KECDH∥KPQ)。
这样,即使量子计算机能破解 ECDH,仍然需要破解 Kyber,反之亦然。
五、Go 小实验:模拟混合密钥协商
我们用 Go 写一个 混合 ECDH + 简化版“PQC” 的 Demo。
这里的 “PQC” 用随机生成代替,只是为了演示组合思想。
package main
import (
"crypto/elliptic"
"crypto/rand"
"crypto/sha256"
"fmt"
"math/big"
"math/rand"
"time"
)
// 模拟 PQC KEM (这里用随机数代替)
func pqcKeyExchange() ([]byte, []byte) {
rand.Seed(time.Now().UnixNano())
shared := make([]byte, 16)
rand.Read(shared)
return shared, shared
}
func main() {
curve := elliptic.P256()
// Alice ECDH
privA, xA, yA, _ := elliptic.GenerateKey(curve, rand.Reader)
// Bob ECDH
privB, xB, yB, _ := elliptic.GenerateKey(curve, rand.Reader)
// ECDH 共享密钥
sharedA, _ := curve.ScalarMult(xB, yB, privA)
sharedB, _ := curve.ScalarMult(xA, yA, privB)
// PQC 共享密钥 (模拟)
pqcA, pqcB := pqcKeyExchange()
// 最终混合密钥
finalA := sha256.Sum256(append(sharedA.Bytes(), pqcA...))
finalB := sha256.Sum256(append(sharedB.Bytes(), pqcB...))
fmt.Printf("Alice 最终会话密钥: %x\n", finalA)
fmt.Printf("Bob 最终会话密钥: %x\n", finalB)
}
运行结果示例:
Alice 最终会话密钥: 7f2d34ab...
Bob 最终会话密钥: 7f2d34ab...
说明双方通过 混合 ECDH + PQC 协商得到了相同的会话密钥。
六、总结
- 后量子密码学 (PQC):为对抗量子计算机而提出的新一代算法。
- 混合密钥协商:结合 ECDH 与 PQC KEM,提供双重保险。
- 应用现状:TLS 1.3、Cloudflare、Google 已开始部署混合实验。
混合方案是传统 ECC → PQC 的过渡桥梁。
未来,当 PQC 算法稳定成熟,可能会逐步取代 ECC。