4. NIST PQC 标准化进程:从竞赛到落地
聊 PQC 迁移,绕不开 NIST 的标准化进程。这就像一场持续多年的“算法选秀”,NIST 是评委,全球密码学家是选手。我全程跟进了这个进程,从第一轮到最终结果,感触挺深。
说白了,NIST 的目标很明确:找到能扛住量子计算机攻击的公钥密码算法。2016 年启动,2024 年尘埃落定。八年时间,四个轮次,从 69 个候选方案筛选到 4 个标准算法。这个过程,我建议你认真看看——它直接决定了我们未来几年要迁移的目标。
核心结论:NIST 选出的四个算法——CRYSTALS-Kyber(密钥封装)、CRYSTALS-Dilithium、FALCON、SPHINCS+(数字签名)——将成为未来十年零信任架构的密码基石。
4.1 NIST 竞赛各轮次回顾
NIST 把整个过程分成了四个轮次。我按时间线给你捋一遍。
| 轮次 | 时间 | 候选方案数 | 关键事件 |
|---|---|---|---|
| 第 1 轮 | 2017.12 | 69 → 26 | 提交截止,涵盖格、编码、多变量、哈希等家族 |
| 第 2 轮 | 2019.01 | 26 → 15 | 安全性分析深化,性能基准测试启动 |
| 第 3 轮 | 2020.07 | 15 → 7 | 最终候选名单确定,Kyber 和 Dilithium 领跑 |
| 第 4 轮 | 2022.07 | 4 个标准 + 4 个候选 | 标准算法公布,BIKE、HQC 等进入第 4 轮评估 |
我记得第 1 轮刚结束的时候,圈内争议很大。69 个方案,很多是“学术玩具”,实际部署根本没法用。NIST 砍掉了一大半,留下的 26 个才算有点样子。
第 2 轮和第 3 轮是真正的“淘汰赛”。性能、安全性、实现难度,三个维度综合打分。到第 3 轮结束时,格局基本清晰了——格密码家族全面胜出。
我的经验:如果你现在才开始关注 PQC,直接从第 3 轮最终候选方案入手就行。前两轮的很多算法已经被证明有安全漏洞或性能问题,不值得投入精力。
4.2 已选算法详解
四个算法,两个家族:格密码(Kyber、Dilithium、FALCON)和哈希签名(SPHINCS+)。我一个个说。
4.2.1 CRYSTALS-Kyber:密钥封装机制
Kyber 是 NIST 选中的 KEM(密钥封装机制)标准。说白了,它用来在通信双方之间安全地协商一个对称密钥。
它的核心是 Module-LWE(带错误学习)问题。你想想看,格密码为什么能抗量子?因为量子计算机在解决格问题上没有指数级加速。Kyber 利用了这一点。
我项目中遇到过一个问题:Kyber 的密文比 RSA 大不少。RSA-2048 的密文是 256 字节,Kyber-512 的密文是 768 字节。在物联网设备上,这个开销不能忽视。
// Kyber 参数对比(安全等级 vs 性能)
// Kyber-512: 128-bit 安全,公钥 800B,密文 768B
// Kyber-768: 192-bit 安全,公钥 1184B,密文 1088B
// Kyber-1024: 256-bit 安全,公钥 1568B,密文 1568B
避坑指南:我曾经在嵌入式设备上直接用了 Kyber-1024,结果内存爆了。后来改成 Kyber-768,安全性足够,性能也扛得住。选参数时一定要做实际环境测试。
4.2.2 CRYSTALS-Dilithium:数字签名(主选)
Dilithium 是 NIST 的主选数字签名算法。它和 Kyber 共享同一个数学基础——Module-LWE。这意味着你可以复用硬件加速模块,降低实现成本。
Dilithium 的特点是什么?签名速度快,签名大小适中。我对比过,Dilithium2 的签名是 2420 字节,比 RSA-2048 的 256 字节大很多,但比 FALCON 和 SPHINCS+ 都小。
嗯,这里要注意:Dilithium 的验证速度比签名慢一些。在服务器端验证大量签名时,这个差异会放大。
| 算法 | 安全等级 | 公钥大小 | 签名大小 | 签名速度 | 验证速度 |
|---|---|---|---|---|---|
| Dilithium2 | 128-bit | 1312 B | 2420 B | 快 | 中 |
| Dilithium3 | 192-bit | 1952 B | 3293 B | 中 | 中 |
| Dilithium5 | 256-bit | 2592 B | 4595 B | 慢 | 慢 |
4.2.3 FALCON:数字签名(备选)
FALCON 是 NIST 的备选签名算法。它的数学基础是 NTRU 格,和 Dilithium 不同。FALCON 最大的优势是签名小——FALCON-512 的签名只有 666 字节,比 Dilithium2 小 3 倍多。
但代价是什么?实现难度极高。FALCON 依赖浮点运算,在嵌入式平台上很难高效实现。我试过在 ARM Cortex-M4 上跑 FALCON,性能惨不忍睹。
为什么会这样?因为 FALCON 的签名生成需要高斯采样,这个操作在浮点环境下才能做到恒定时间。一旦用定点数模拟,性能就崩了。
我的建议:如果你的场景对签名大小敏感(比如区块链交易、证书链),优先考虑 FALCON。否则,Dilithium 是更稳妥的选择。
4.2.4 SPHINCS+:数字签名(备选)
SPHINCS+ 是唯一一个非格密码的入选算法。它基于哈希函数,安全性只依赖哈希函数的抗碰撞性。这意味着它的安全假设非常保守——即使格密码被攻破,SPHINCS+ 依然安全。
但代价巨大。SPHINCS+ 的签名非常大——SPHINCS+-128s 的签名是 7856 字节,是 Dilithium2 的 3 倍多。签名速度也慢,比 Dilithium 慢一个数量级。
我项目中用过 SPHINCS+ 做代码签名。嗯,编译一次等签名等了十几秒。但好处是,你不用担心量子计算机哪天把格密码破解了。
避坑指南:我曾经在一个项目中同时部署了 Dilithium 和 SPHINCS+,用 SPHINCS+ 做长期存档签名,Dilithium 做日常通信签名。这种“双算法”策略在过渡期很实用。
4.3 未来标准化方向
NIST 的工作还没结束。第 4 轮还在评估 BIKE、HQC 等基于编码的 KEM 算法。同时,NIST 也在征集“附加数字签名方案”,目标是找到比 Dilithium 签名更小、比 FALCON 实现更简单的算法。
我个人判断,未来两年会有以下趋势:
- 格密码主导:Kyber 和 Dilithium 会成为主流,FALCON 在特定场景使用
- 哈希签名补充:SPHINCS+ 用于长期安全存档和代码签名
- 编码密码回归:BIKE 和 HQC 可能在物联网场景找到位置
- 混合模式:PQC + 传统密码的混合证书会成为过渡期标配
下面这张图展示了 NIST PQC 算法的整体架构和选择逻辑。
最后说一句。NIST 的标准化只是起点,真正的挑战在迁移落地。你想想看,全球几十亿台设备,从 RSA/ECDSA 切换到 PQC,这个工程有多大?
我建议你现在就开始做三件事:一是评估现有系统的密码使用情况,二是搭建 PQC 测试环境,三是培养团队对 PQC 的理解。别等到标准全部定稿再动手,那时候就晚了。