3. PQC算法家族总览
好,咱们进入正题。PQC 不是只有一个算法,而是一群算法。它们分属五个家族,每个家族的数学原理完全不同。我常说,这就像武林里的五大门派——招式路数不一样,但目标都是扛住量子计算机的攻击。
这五个家族分别是:基于格的密码、基于编码的密码、多变量密码、基于哈希的签名、基于同源的密码。下面我一个一个拆开讲。
3.1 基于格的密码:当前 PQC 的“头号选手”
格密码是目前最受关注的 PQC 家族。NIST 第一批选定的四个算法里,有三个是格密码。为什么?因为它在安全性、性能、密钥尺寸三者之间取得了最好的平衡。
格密码的安全性基于格上的困难问题,比如最短向量问题(SVP)和学习带错误问题(LWE)。说白了,就是在高维空间里找一个最短的向量——听起来简单,但维度一高,经典计算机和量子计算机都很难解。
我个人习惯把格密码分成两类:
- 基于 LWE/MLWE 的密码:比如 Kyber(KEM)和 Dilithium(签名)。密钥和密文尺寸适中,性能优秀。
- 基于 NTRU 的密码:比如 NTRU 和 Falcon。NTRU 的数学结构更紧凑,Falcon 的签名尺寸非常小。
3.2 基于编码的密码:老牌劲旅,密钥偏大
编码密码的历史比 RSA 还早。它基于线性码的译码问题——给你一个加了错误的码字,恢复出原始消息。经典计算机上很难,量子计算机上同样很难。
最著名的代表是 Classic McEliece。这个算法从 1978 年就有了,安全性极其保守,至今没有被攻破过。但它的公钥非常大——McEliece 在 128 位安全级别下,公钥大约 1 MB。相比之下,Kyber 的公钥只有 800 字节。
嗯,这里要注意:编码密码的密钥尺寸是它的硬伤。我在一个云存储项目中评估过 McEliece,密钥分发成了瓶颈。但如果你做的是长期文档签名或固件签名,公钥大一点不是问题,安全性才是第一位的。
| 算法 | 类型 | 公钥尺寸 | 密文/签名尺寸 | 特点 |
|---|---|---|---|---|
| Classic McEliece | KEM | ~1 MB | ~128 字节 | 安全性最保守,密钥极大 |
| BIKE | KEM | ~1 KB | ~128 字节 | 密钥较小,基于 QC-MDPC 码 |
| HQC | KEM | ~2 KB | ~256 字节 | 结构简单,安全性分析较充分 |
3.3 多变量密码:签名快,但密钥大
多变量密码的安全性基于求解多元二次方程组的困难性。你想想看,给出一堆二次方程,让你找出一组解——这在数学上被证明是 NP-完全的。
多变量密码最大的优点是签名速度极快,非常适合资源受限的签名场景。但它的公钥和私钥都很大,而且大部分方案没有 KEM 功能,只能做签名。
代表算法是 Rainbow(彩虹签名)。Rainbow 的签名速度比 Dilithium 快好几倍,但公钥大约 150 KB,私钥更大。我曾经在评估一个车载 V2X 签名方案时考虑过 Rainbow,签名速度确实惊艳,但密钥存储成了问题——车载 ECU 的闪存有限。
3.4 基于哈希的签名:只做签名,但安全性极强
基于哈希的签名,说白了就是只用哈希函数来构造签名方案。它的安全性完全依赖于哈希函数的抗碰撞性——只要 SHA-2 或 SHA-3 不被攻破,它就是安全的。
这个家族的代表是 SPHINCS+。SPHINCS+ 是无状态的哈希签名方案,不需要维护状态。它的签名尺寸比较大(约 8-16 KB),但安全性非常保守。
哈希签名有一个重要限制:它只能做签名,不能做加密或密钥封装。所以它适合作为签名专用方案,比如代码签名、固件签名、证书签名。
我记得有一次帮客户做 PKI 迁移评估,他们担心格密码万一被攻破怎么办。我建议他们在根 CA 层使用 SPHINCS+ 做交叉签名——这样即使格密码出问题,根信任锚还是安全的。
3.5 基于同源的密码:数学优雅,但性能是短板
基于同源的密码是 PQC 家族里最年轻的一个。它基于椭圆曲线之间的同源映射——说白了,就是在不同的椭圆曲线之间建立一种特殊的映射关系。这个问题的困难性在于:给你两条曲线,找到它们之间的同源映射非常困难。
代表算法是 SIKE(基于同源的密钥封装)。SIKE 的密钥尺寸非常小(公钥约 300 字节),但计算速度很慢——比 Kyber 慢一到两个数量级。
不过,2022 年 SIKE 被攻破了。一个数学攻击找到了同源映射的捷径,SIKE 的安全性被大幅削弱。目前基于同源的密码家族处于调整期,新的方案正在设计中。
3.6 五大家族对比:一张表看懂
最后,我整理了一张对比表。你选型的时候可以直接参考。
| 家族 | 功能 | 密钥尺寸 | 性能 | 成熟度 | 推荐场景 |
|---|---|---|---|---|---|
| 格密码 | KEM + 签名 | 小-中 | 快 | 高(NIST 已选) | 通用场景,首选 |
| 编码密码 | KEM | 大 | 中 | 高(历史悠久) | 长期安全、文档签名 |
| 多变量密码 | 签名 | 大 | 快 | 中(Rainbow 被攻破) | 待观望 |
| 哈希签名 | 签名 | 中-大 | 中 | 高(安全性保守) | 根信任锚、代码签名 |
| 同源密码 | KEM | 小 | 慢 | 低(SIKE 被攻破) | 前沿研究 |