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 PQC 算法架构与选择逻辑 NIST PQC 标准化 密钥封装机制 (KEM) 数字签名 (Signatures) CRYSTALS-Kyber Dilithium FALCON SPHINCS+(哈希签名) 选择逻辑: • 主选:Kyber (KEM) + Dilithium (签名) — 性能均衡,实现友好 • 备选:FALCON (签名) — 签名小,但实现复杂 • 保守:SPHINCS+ (签名) — 安全假设最弱,但性能开销大 • 未来:BIKE/HQC (KEM) — 编码密码,第 4 轮评估中

最后说一句。NIST 的标准化只是起点,真正的挑战在迁移落地。你想想看,全球几十亿台设备,从 RSA/ECDSA 切换到 PQC,这个工程有多大?

我建议你现在就开始做三件事:一是评估现有系统的密码使用情况,二是搭建 PQC 测试环境,三是培养团队对 PQC 的理解。别等到标准全部定稿再动手,那时候就晚了。