3. 后量子密码学基础:四大主流家族与NIST标准化
好,咱们进入正题。后量子密码,说白了就是——能扛住量子计算机攻击的密码算法。传统RSA、ECDSA在量子计算机面前,基本就是纸糊的。Shor算法一跑,私钥分分钟被扒光。
我个人习惯把后量子密码分成四大流派:格密码、哈希签名、多变量密码、编码密码。每个流派都有自己的脾气,也都有自己的坑。今天咱们一个一个捋清楚。
核心观点:没有完美的后量子方案,只有适合场景的方案。选型时,性能、密钥尺寸、签名大小、成熟度,四者必须权衡。
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+) | 第四轮评估中 | 第四轮评估中 |
| 适用场景 | 通用(推荐首选) | 固件签名、代码签名 | 嵌入式签名(需谨慎) | 长期安全、预置公钥场景 |