跳到主要内容
ecdsa.com

FN-DSA(Falcon)vs ML-DSA:格签名选紧凑还是简单

Falcon 签名的大小约为 ML-DSA 的四分之一,这对证书和受限链路很重要。ML-DSA 已经标准化,更容易安全地实现,也是当前的默认选择。

本页比较 NIST 在2022年选定的两种格签名方案:FN-DSA 与 ML-DSA。ML-DSA(源自 CRYSTALS-Dilithium)于2024年8月成为 FIPS 204。FN-DSA 是 NIST 为 Falcon 起的名称,正在作为 FIPS 206 进行标准化,截至2026年10月仍是草案。Falcon 紧凑得多;ML-DSA 正确实现起来则容易得多。

概览

FN-DSA-512(Falcon-512)ML-DSA-44FN-DSA-1024(Falcon-1024)ML-DSA-87
安全类别1255
公钥897 字节1,312 字节1,793 字节2,592 字节
签名666 字节(填充后)2,420 字节1,280 字节(填充后)4,627 字节
公钥 + 签名1,563 字节3,732 字节3,073 字节7,219 字节
格的类型NTRUModule-LWE / Module-SISNTRUModule-LWE / Module-SIS
签名运算浮点(离散高斯采样)仅整数浮点仅整数
标准FIPS 206 草案FIPS 204(正式版,2024年)FIPS 206 草案FIPS 204
X.509尚未标准化RFC 9881尚未标准化RFC 9881

Falcon 的大小取自 Falcon 规范(签名也可以采用变长压缩编码,最多分别为 752 和 1,462 字节);ML-DSA 的大小取自 FIPS 204 表 2。ML-DSA-65(类别 3)没有对应的 Falcon 参数集。

为什么大小很重要

Falcon 借助陷门和快速傅里叶采样在 NTRU 格中生成一个短向量,因此在所有 NIST 后量子签名中,它的公钥加签名最小:类别 1 下约 1.6 KB,而 ML-DSA-44 为 3.7 KB。在 TLS 证书链中,每张证书都带有一个公钥和一个签名,握手还会再加上更多签名和 SCT,这一差别决定了证书链是大约翻一倍,还是增长到四倍。DNSSEC 的签名必须能放进 UDP 响应,区块链上每个字节都要付费,这两者对此感受更深。

为什么难点在实现

Falcon 的签名算法使用浮点运算,在格上从离散高斯分布中采样。这带来了 ML-DSA 没有的三个问题:

  • 常量时间。在某些 CPU 上,浮点运算的耗时可能取决于数据,而用整数模拟浮点运算又很慢;研究中的攻击已经证明,采样器的计时泄露会暴露密钥。
  • 可测试性。由于舍入,两个正确的实现可能对相同输入生成不同的签名,因此已知答案测试无法发现存在细微偏差的采样器,而有偏差的采样器在泄露密钥信息的同时,生成的签名仍然有效。2026年9月,NIST 的 FIPS 206 团队提出了一种定点签名流程,目的正是让实现变得确定且可测试。
  • 可移植性。没有浮点运算单元的嵌入式处理器需要软件模拟,这会牺牲速度并增加代码体积。

ML-DSA 只使用模 8,380,417 的整数运算和拒绝采样;它很容易做到常量时间,输出也由 FIPS 204 完全规定。两者的验证都很简单,Falcon 的验证尤其快:据 Falcon 团队的参考实现报告,在 2.3 GHz 的 Intel Core i5-8259U 上,每秒约可完成 27,900 次 Falcon-512 验证和 5,900 次签名。在 Apple M4 Max 的单个核心上,OpenSSL 3.6.5 的可移植 ML-DSA-44 代码实测每秒约完成 20,800 次验证和 3,900 次签名。两组数据来自不同的机器,因此只应看作数量级参考,而不是直接对比的基准测试。

标准化状态

  • ML-DSA:自2024年8月13日起成为正式标准(FIPS 204),已有 X.509 标识符(RFC 9881)、CMS 和 OpenPGP 使用规范、CNSA 2.0 的选用(ML-DSA-87)以及通过验证的模块。
  • FN-DSA:NIST 于2022年7月宣布将把 Falcon 标准化,并计划在 FIPS 204 和 205 之后推出 FIPS 206。NIST 工作人员在2025年表示,首个公开草案已基本写完,正在等待批准;截至2026年10月,仍没有正式标准,而2026年9月的定点方案表明规范仍在变化。IETF 关于在 JOSE、COSE 和 X.509 中使用 FN-DSA 的草案会跟随该 FIPS 的进展。

由于 FIPS 206 可能与 Falcon 第三轮规范有所不同,现在编写的实现可能需要修改,才能符合最终标准。

如何选择

  • 当前的通用后量子签名:ML-DSA(44 或 65)。
  • 合规驱动的部署(FIPS 140-3、CNSA 2.0):ML-DSA;在 FIPS 206 定稿之前,FN-DSA 无法通过验证。
  • 未来大量依赖证书的协议(TLS 证书链、DNSSEC、受限物联网设备的更新):关注 FN-DSA;在不改变协议结构的前提下,它最有可能让签名开销保持在可控范围内。
  • 没有浮点单元或有严格侧信道要求的硬件:ML-DSA;如果用 Falcon,只能采用经过审查的常量时间整数实现。
  • 大小无关紧要的长期根证书:SLH-DSA(安全性仅依赖哈希函数)或 ML-DSA;FN-DSA 签名小的优势在这里派不上用场。

迁移说明

  1. 按算法敏捷性来设计:携带算法标识符,避免固定签名长度,并准备好在 ML-DSA 之外把 FN-DSA 添加为第二种后量子选项。
  2. 谨慎地制作原型:使用以常量时间实现 Falcon 采样器的库,并把它们的输出标记为预标准;在要求遵循标准的场合,不要发布这些实现。
  3. 现在就用 ML-DSA 测算协议的大小预算;如果放得下,这个协议可能永远用不上 FN-DSA。
  4. 关注 FIPS 206 终稿:参数名称、编码和签名流程都可能与第三轮的 Falcon 不同,测试向量也会相应改变。
  5. 考虑混合方案:无论你选择哪种格方案,过渡期间都可以用复合签名把后量子方案与 ECDSA 或 EdDSA 搭配使用。

参考资料

全部对比