ML-DSA(FIPS 204)与 SLH-DSA(FIPS 205)
比较基于格的 CRYSTALS-Dilithium 签名与基于哈希的 SPHINCS+ 签名,了解二者的权衡。
ML-DSA(FIPS 204)与 SLH-DSA(FIPS 205) 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
ML-DSA 的起源
ML-DSA(基于模块格的数字签名算法)被标准化为 FIPS 204,源自 CRYSTALS-Dilithium。Dilithium 由 Ducas、Kiltz、Lepoint、Lyubashevsky、Schwabe、Seiler 和 Stehle 设计,并于 2017 年提交给 NIST。它将带中止机制的 Fiat-Shamir 框架应用于 Module-LWE,形成了具有严密安全性证明的实用签名方案。
带中止机制的 Fiat-Shamir
经典 Fiat-Shamir 变换可以将交互式身份识别协议转换为签名。对于格方案,直接应用会通过响应向量泄露秘密密钥的信息。Lyubashevsky 提出的带中止机制的技术加入了拒绝采样:签名者会检查响应是否可能泄露信息,如果可能,就中止并重试。这样会增加少量签名开销,但对安全性至关重要。
ML-DSA 签名过程
进行签名时,ML-DSA 从均匀分布中采样掩码向量 y,计算承诺 w = Ay,对(消息、w)进行哈希以获得挑战多项式 c,然后计算响应 z = y + cs。拒绝采样会检查 z 是否泄露 s 的信息。如果检查通过,签名就是(c, z)以及用于高效验证的提示信息。如果未通过,则重复整个过程。
ML-DSA 参数集
ML-DSA 定义了三个参数集:ML-DSA-44(NIST 安全级别 2,约 128 位)、ML-DSA-65(级别 3,约 192 位)和 ML-DSA-87(级别 5,约 256 位)。这些数字表示方案中的模块秩。公钥长度分别为 1312、1952 和 2592 字节。ML-DSA-65 的签名长度为 3293 字节,而在 128 位安全性下,Ed25519 的签名长度为 64 字节。
ML-DSA 签名大小的权衡
与 ECDSA 或 EdDSA 相比,ML-DSA 最显著的缺点是签名长度。ML-DSA-65 的签名为 3293 字节,而 Ed25519 的签名为 64 字节。对于传输大量签名的协议(例如 TLS 证书链和代码签名),这会增加带宽需求。不过,ML-DSA 的签名和验证速度都非常快(与 ECDSA 相当或更快),因此这种权衡主要体现在通信成本上。
SLH-DSA 的起源与设计
SLH-DSA(无状态基于哈希的数字签名算法)被标准化为 FIPS 205,源自 SPHINCS+。与格方案不同,SLH-DSA 的安全性仅依赖底层哈希函数(SHA-256 或 SHAKE-256)的抗碰撞性和抗第二原像性。这使得 SLH-DSA 极为保守:即使格假设被攻破,它仍然能够保持安全。
WOTS+ 一次性签名
SLH-DSA 构建在 WOTS+(Winternitz 一次性签名)之上。WOTS+ 是一种基于哈希的方案,其私钥是一组随机字符串,公钥则通过反复对每个字符串进行哈希得到。签名时,会根据消息位进行部分哈希处理。每个 WOTS+ 密钥对只能安全使用一次;使用两次会泄露信息。SLH-DSA 通过树结构在 WOTS+ 之上实现了多次签名。
用于多次签名的 Merkle 树
SLH-DSA 使用超树,即由多棵 Merkle 树组成的树。每个叶节点都是一个 WOTS+ 实例的公钥,根节点则是 SLH-DSA 公钥。签名由消息的 WOTS+ 签名以及从叶节点到根节点的认证路径组成。通过使用不同的 WOTS+ 叶节点,超树结构允许使用单个密钥对进行多次签名。
SLH-DSA 参数集
SLH-DSA 有 12 个参数集,组合了哈希函数(SHA-256 或 SHAKE-256)、安全级别(128s/128f、192s/192f、256s/256f)和优化选项(s = 签名较小,f = 签名较快)。128f 变体的签名长度为 7856 字节,签名速度较快;128s 的签名长度同样为 7856 字节,但签名速度较慢。所有变体的签名都比 ML-DSA 大得多,但采用了最强的安全假设。
何时选择 SLH-DSA 而不是 ML-DSA
当性能和带宽很重要,并且信任格假设时,应优先选择 ML-DSA。如果部署环境极为保守、只信任哈希函数的安全性,或者需要防范未来潜在的格方案破解,则应优先选择 SLH-DSA。很少进行签名但需要最大程度保障的证书颁发机构和政府系统可能会倾向于 SLH-DSA,而频繁签名的 TLS 服务器则更适合 ML-DSA。
FN-DSA(FALCON):另一种格签名
FN-DSA(FIPS 206,基于 FALCON)使用 NTRU 格和高斯采样,其签名比 ML-DSA 更小(FALCON-512 在 128 位安全性下的签名长度为 897 字节)。不过,FALCON 需要谨慎采用恒定时间实现,以避免高斯采样器引发的侧信道攻击。预计 FIPS 206 将在 FIPS 203 至 FIPS 205 之后完成标准化,为资源受限环境提供高性能选项。
ML-DSA 与 SLH-DSA 测验
与 ML-DSA 相比,SLH-DSA 的主要安全优势是什么?
ML-DSA 与 SLH-DSA 回顾
ML-DSA(FIPS 204)在 Module-LWE 上使用带中止机制的 Fiat-Shamir,在 192 位安全性下提供快速签名和 3 KB 的签名长度。SLH-DSA(FIPS 205)使用基于哈希的 Merkle 树(WOTS+),只依赖哈希函数安全性,签名长度为 7 至 50 KB。ML-DSA 适合对性能敏感的应用;SLH-DSA 则适合追求最大程度保守性的应用。FN-DSA(FALCON、FIPS 206)将增加一种签名更小的格方案。
常见问题解答
「ML-DSA(FIPS 204)与 SLH-DSA(FIPS 205)」课时是免费的吗?
是的 — 「ML-DSA(FIPS 204)与 SLH-DSA(FIPS 205)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「ML-DSA(FIPS 204)与 SLH-DSA(FIPS 205)」这节课中我会学到什么?
比较基于格的 CRYSTALS-Dilithium 签名与基于哈希的 SPHINCS+ 签名,了解二者的权衡。 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「ML-DSA(FIPS 204)与 SLH-DSA(FIPS 205)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- NIST PQC 竞赛:流程与标准
- ML-KEM(FIPS 203):CRYSTALS-Kyber 标准
- ML-DSA(FIPS 204)与 SLH-DSA(FIPS 205)
- 规划向后量子标准的迁移