3. 后量子密码学基础:四大主流家族与NIST标准化

好,咱们进入正题。后量子密码,说白了就是——能扛住量子计算机攻击的密码算法。传统RSA、ECDSA在量子计算机面前,基本就是纸糊的。Shor算法一跑,私钥分分钟被扒光。

我个人习惯把后量子密码分成四大流派:格密码、哈希签名、多变量密码、编码密码。每个流派都有自己的脾气,也都有自己的坑。今天咱们一个一个捋清楚。

核心观点:没有完美的后量子方案,只有适合场景的方案。选型时,性能、密钥尺寸、签名大小、成熟度,四者必须权衡。

后量子密码四大主流家族 后量子密码 (PQC) 格密码 (Lattice) 哈希签名 (Hash-Based) 多变量密码 (MPC) 编码密码 (Code-Based) 格密码特点 密钥小、性能好 NIST主力候选 安全性争议少 哈希签名特点 仅签名,无加密 有状态 vs 无状态 安全性最保守 多变量密码特点 签名极短 公钥巨大 安全性争议大 编码密码特点 最古老、最保守 公钥巨大 加密/签名均可 NIST PQC 标准化进程(截至2025) 2016: 启动征集 → 2022: 选定首批算法 2024: 发布FIPS 203/204/205标准 2025+: 第四轮候选评估 & 备用方案征集

3.1 格密码:当前最主流的选择

格密码是目前NIST标准化进程里最受青睐的流派。为什么?因为它平衡了安全性、性能和密钥尺寸。说白了,它最像我们熟悉的RSA和ECDSA——密钥不大,速度不慢,而且安全性有比较扎实的理论基础。

格密码的核心难题是最短向量问题(SVP)和带错误学习问题(LWE)。你不需要完全搞懂数学细节,但要知道:量子计算机目前没有找到能高效破解这些问题的算法。

实战经验:我在做远程证明方案选型时,优先考虑了格密码。原因很简单——它的密钥尺寸和签名大小最接近传统算法,迁移成本最低。但要注意,格密码的实现容易出侧信道漏洞,常数时间实现是必修课。

NIST已经选定的格密码算法:

  • CRYSTALS-Kyber(FIPS 203):密钥封装机制(KEM),用于加密密钥交换
  • CRYSTALS-Dilithium(FIPS 204):数字签名算法,用于身份认证
  • FALCON(FIPS 205):另一种签名算法,签名尺寸更小但实现更复杂

嗯,这里要注意。Kyber和Dilithium用的是同一个数学结构——模格(Module Lattice)。这意味着你可以复用部分硬件加速逻辑。我在项目中就吃过这个甜头,一套硬件加速器同时支持加密和签名。

3.2 哈希签名:最保守的安全选择

哈希签名,说白了就是靠哈希函数来保证安全性。它的安全性只依赖于哈希函数的抗碰撞性——而哈希函数是量子计算机威胁最小的密码原语之一。

哈希签名分两类:有状态和无状态。

类型 代表算法 特点 坑
有状态 XMSS, LMS 签名极快,安全性极高 必须维护签名次数状态,状态丢失=灾难
无状态 SPHINCS+ 无需维护状态,使用方便 签名大(~8KB),签名慢

我曾经踩过的坑:有状态哈希签名在远程证明场景里特别容易出问题。如果你在多个线程或进程里同时签名,状态同步没做好,轻则签名失败,重则私钥泄露。我建议:除非你能严格控制签名环境(比如单线程HSM),否则别碰有状态方案。

SPHINCS+已经被NIST选为备用签名方案。它的签名尺寸确实大——8KB到49KB不等。但好处是,你不需要操心状态管理。在远程证明里,如果网络带宽不是瓶颈,SPHINCS+其实是个很省心的选择。

3.3 多变量密码:签名极短,但争议大

多变量密码的核心思路是:解一组随机生成的多变量二次方程组是NP难的。它的最大卖点是签名极短——通常只有几十到几百字节。

但代价是什么?公钥巨大。动辄几十KB甚至上百KB。你想想看,在远程证明场景里,如果每次证明都要传输一个100KB的公钥,网络开销就上去了。

多变量密码的代表算法:

  • Rainbow:曾经是NIST第三轮候选,但2022年被攻破了——没错,被经典计算机攻破了
  • GeMSS:签名极短,但公钥巨大,已退出NIST竞争
  • UOV(不平衡油醋):Rainbow的变体,目前还在NIST第四轮评估中

我的看法:多变量密码的安全性争议比较大。Rainbow被攻破这件事,让很多人对这个流派产生了怀疑。我个人建议:除非你对签名尺寸有极端要求(比如嵌入式设备),否则优先考虑格密码或哈希签名。

3.4 编码密码:最古老的后量子方案

编码密码的历史可以追溯到1978年——McEliece加密方案。它基于一个简单的事实:解码一个随机线性码是NP难的。

编码密码的最大优点是安全性最保守。几十年下来,没有实质性的突破。但它的缺点也很明显——公钥巨大。McEliece的公钥通常需要几百KB甚至几MB。

编码密码的代表算法:

  • Classic McEliece:NIST第四轮候选,安全性极高,但公钥巨大(~1MB)
  • BIKE:基于QC-MDPC码,公钥较小,但安全性分析还不够充分
  • HQC:另一种基于编码的KEM,也在NIST第四轮中

实战建议:编码密码在远程证明里其实有独特优势——如果你做的是固件证明,公钥可以预置在设备里,不需要每次传输。我见过一些安全芯片厂商用Classic McEliece做长期安全背书,效果不错。

3.5 NIST标准化进程概览

NIST的后量子密码标准化项目从2016年开始,到现在已经走过了近十年。我整理了一个时间线,方便你理解当前的状态。

时间 事件 关键内容
2016年12月 NIST启动PQC标准化征集 收到69个候选方案
2019年1月 第二轮筛选 26个方案进入第二轮
2020年7月 第三轮筛选 7个决赛候选 + 8个备用候选
2022年7月 首批算法选定 Kyber(KEM)、Dilithium(签名)、FALCON(签名)、SPHINCS+(签名)
2024年8月 FIPS标准发布 FIPS 203 (Kyber)、FIPS 204 (Dilithium)、FIPS 205 (SPHINCS+)
2025年+ 第四轮评估 & 备用方案征集 Classic McEliece、BIKE、HQC、FALCON等继续评估

注意:NIST明确表示,标准化不是终点。他们会持续监控安全性,未来可能替换或补充算法。所以,你的系统架构必须支持算法敏捷性——说白了,就是能方便地换算法。我在做远程证明框架设计时,把算法选择做成了可配置的,而不是硬编码。

3.6 四大流派对比总结

最后,我用一个表格把四大流派的关键指标放在一起对比。这样你在做选型时,可以快速找到适合自己场景的方案。

指标 格密码 哈希签名 多变量密码 编码密码
公钥尺寸 小(~1KB) 中(~1KB) 大(~50KB+) 极大(~1MB)
签名尺寸 中(~2KB) 大(~8KB+) 极小(~100B) 中(~200B)
签名速度 快 快(有状态)/ 慢(无状态) 快 慢
验证速度 快 快 快 快
安全性成熟度 高 极高 中(有攻破案例) 极高
NIST状态 已标准化 已标准化(SPHINCS+) 第四轮评估中 第四轮评估中
适用场景 通用(推荐首选) 固件签名、代码签名 嵌入式签名(需谨慎) 长期安全、预置公钥场景