2、PQC算法家族巡礼:格密码、哈希签名、编码密码、多变量密码的核心差异

好,咱们进入正题。上一章聊了为什么传统密钥轮换策略在量子计算面前会失效,这一章咱们得把目光聚焦到接班的候选者身上——PQC算法家族。

说实话,我刚接触PQC那会儿,看着NIST筛选出来的这几类算法,头都大了。格密码、哈希签名、编码密码、多变量密码……每个名字背后都是一套完全不同的数学难题。你想想看,RSA和ECC好歹都是基于数论,换汤不换药。但PQC这四大家族,底层逻辑几乎完全不同。

我个人习惯,学习新东西先画个框架图,把骨架搭起来再填肉。咱们先看看这四大家族在整个PQC生态里处于什么位置。

PQC算法家族全景图 后量子密码 (PQC) 格密码 Lattice-based 哈希签名 Hash-based 编码密码 Code-based 多变量密码 Multivariate Kyber / Dilithium / Falcon SPHINCS+ Classic McEliece / BIKE Rainbow / GeMSS 核心难题 格上最短向量问题(SVP) 核心难题 哈希函数抗碰撞性 核心难题 一般线性码译码(NP-C) 核心难题 多元二次方程组(MQ) 密钥轮换适配性 ★★★★★ 优秀 ★★★★☆ 良好 ★★★☆☆ 中等 ★★☆☆☆ 挑战大

这张图把四大家族的代表算法和核心难题都列出来了。下面咱们逐个拆解,看看它们到底有什么不一样,以及——这对咱们的密钥轮换策略意味着什么。

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) 中等
安全性成熟度 高 极高 高 低
密钥轮换友好度 ★★★★★ ★★★★☆ ★★★☆☆ ★★☆☆☆

看到这里,你应该明白了:没有完美的算法,只有适合场景的选择。格密码是当前最均衡的方案,哈希签名适合安全至上的场景,编码密码在特定领域有优势,多变量密码则还在成长中。