2、PQC算法家族巡礼:格密码、哈希签名、编码密码、多变量密码的核心差异
好,咱们进入正题。上一章聊了为什么传统密钥轮换策略在量子计算面前会失效,这一章咱们得把目光聚焦到接班的候选者身上——PQC算法家族。
说实话,我刚接触PQC那会儿,看着NIST筛选出来的这几类算法,头都大了。格密码、哈希签名、编码密码、多变量密码……每个名字背后都是一套完全不同的数学难题。你想想看,RSA和ECC好歹都是基于数论,换汤不换药。但PQC这四大家族,底层逻辑几乎完全不同。
我个人习惯,学习新东西先画个框架图,把骨架搭起来再填肉。咱们先看看这四大家族在整个PQC生态里处于什么位置。
这张图把四大家族的代表算法和核心难题都列出来了。下面咱们逐个拆解,看看它们到底有什么不一样,以及——这对咱们的密钥轮换策略意味着什么。
2.1 格密码:PQC的「万金油」
格密码是目前最受关注的一类。NIST选中的Kyber(KEM)和Dilithium(签名)都属于这个家族。为什么它这么火?说白了,格密码能同时搞定加密和签名,而且性能相对均衡。
它的数学基础是格上的最短向量问题(SVP)。你想象一个多维空间里散落着无数个点,这些点构成一个「格」。给你一个不在格上的点,让你找到离它最近的格点——这事儿在经典计算机上很难,量子计算机也没找到捷径。
格密码的核心优势:
- 功能全面:KEM、签名、甚至全同态加密都能做
- 性能均衡:密钥和密文大小适中,计算速度较快
- 安全性成熟:有最坏情况到平均情况的归约证明
我在项目中遇到过一个问题:Kyber的密钥生成速度比RSA快不少,但密文膨胀率需要关注。你想想看,RSA-OAEP的密文和明文差不多大,但Kyber的密文会比共享密钥大几倍。这在带宽受限的场景下是个坑。
密钥轮换视角:格密码的密钥结构相对灵活,支持高效的密钥更新。我个人建议,如果系统对性能要求高、需要频繁轮换密钥,格密码是首选。Dilithium的签名大小虽然比ECDSA大,但密钥生成和签名验证的速度完全可以接受。
2.2 哈希签名:最保守的选择
哈希签名家族的代表是SPHINCS+。它的数学基础简单到令人发指——就是哈希函数的抗碰撞性。没有复杂的数论结构,没有格上的几何问题,就是哈希。
「那它为什么能抗量子?」你可能会问。因为哈希函数的安全性不依赖于任何数论难题,只依赖于输出的均匀分布和碰撞难度。Grover算法只能把暴力搜索的复杂度从2^n降到2^(n/2),那我们只要把哈希输出长度翻倍就行了。
我记得第一次看SPHINCS+的论文时,被它的签名大小吓了一跳——动辄几十KB,比Dilithium大了十几倍。但它的安全性假设是所有PQC算法中最保守的。如果你对安全性有极端的执念,哈希签名会让你睡得安稳。
避坑指南:我曾经在一个嵌入式项目中尝试用SPHINCS+做固件签名验证。结果发现签名验证需要几百万次哈希计算,在低端MCU上耗时超过10秒。嗯,后来换成了Dilithium。哈希签名适合签名频率低、验证环境性能充裕的场景。
哈希签名的密钥轮换有个天然优势:它的密钥本质上就是哈希函数的输出,你可以随时生成新的密钥对,不需要依赖任何复杂的数学运算。但要注意,SPHINCS+是有状态的——你需要记录已经使用过的密钥索引,否则会引发安全灾难。
2.3 编码密码:老牌劲旅
编码密码的历史比RSA还早。1978年McEliece就提出了基于Goppa码的加密方案,只是当时密钥太大(几百KB),被业界嫌弃了。四十年后,量子计算的威胁让这个「老古董」重新焕发生机。
它的安全性基于一般线性码的译码问题——给你一个加了噪声的码字,让你恢复原始消息。这个问题被证明是NP完全的。量子计算机拿它也没辙。
Classic McEliece是NIST第四轮仍在评估的候选算法。它的密钥有多大?公钥接近1MB。你没看错,1MB。这在TLS握手场景下几乎是灾难性的。但它的密文很小,加密和解密速度也很快。
| 算法 | 公钥大小 | 私钥大小 | 密文/签名大小 | 加解密速度 |
|---|---|---|---|---|
| Classic McEliece (m=13, t=128) | ~1 MB | ~14 KB | ~256 字节 | 极快 |
| BIKE (Level 1) | ~1.5 KB | ~1.5 KB | ~256 字节 | 较快 |
| HQC (Level 1) | ~2 KB | ~2 KB | ~256 字节 | 中等 |
编码密码的密钥轮换有个现实问题:生成一个McEliece密钥对需要几分钟,甚至更久。如果你每小时轮换一次密钥,服务器可能有一半时间都在生成密钥。BIKE和HQC的密钥生成快得多,但安全性分析不如McEliece充分。
2.4 多变量密码:签名快,但坑也多
多变量密码的核心难题是求解多元二次方程组(MQ问题)。给你一堆二次多项式,让你找到一组解——这事儿在经典和量子计算机上都很难。
它的最大亮点是签名速度极快,而且签名很短。Rainbow(多变量签名方案)的签名只有几十字节,比Dilithium和SPHINCS+都小。但它的公钥很大,通常几十KB。
不过,多变量密码有个致命伤:安全性分析不够充分。2022年,Rainbow的候选方案被攻破了——研究者找到了一个多项式时间攻击,直接把它从NIST候选名单中移除。嗯,这提醒我们,不要轻易相信「看起来很美」的方案。
多变量密码的现状:
- 优势:签名极快、签名尺寸极小
- 劣势:公钥大、安全性分析不成熟、已有候选方案被攻破
- 密钥轮换:密钥生成较慢,且部分方案存在密钥恢复攻击
从密钥轮换的角度看,多变量密码目前不太适合作为主力方案。它的密钥结构复杂,轮换成本高,而且安全性的不确定性让轮换策略的设计变得很棘手。我个人建议,除非你有非常特殊的性能需求(比如高频签名、极短签名),否则先观望。
2.5 四大家族对比:一张表说清楚
咱们把核心差异整理成一张表,方便你对照参考。
| 维度 | 格密码 | 哈希签名 | 编码密码 | 多变量密码 |
|---|---|---|---|---|
| 数学难题 | SVP / LWE | 哈希抗碰撞 | 线性码译码 | MQ问题 |
| 功能 | KEM + 签名 | 仅签名 | 仅KEM | 仅签名 |
| 公钥大小 | ~1 KB | ~1 KB | ~1 KB ~ 1 MB | ~50 KB |
| 签名/密文大小 | ~2 KB (签名) | ~40 KB (签名) | ~256 B (密文) | ~100 B (签名) |
| 签名速度 | 快 | 慢 | N/A | 极快 |
| 密钥生成速度 | 快 | 快 | 慢 (McEliece) | 中等 |
| 安全性成熟度 | 高 | 极高 | 高 | 低 |
| 密钥轮换友好度 | ★★★★★ | ★★★★☆ | ★★★☆☆ | ★★☆☆☆ |
看到这里,你应该明白了:没有完美的算法,只有适合场景的选择。格密码是当前最均衡的方案,哈希签名适合安全至上的场景,编码密码在特定领域有优势,多变量密码则还在成长中。