ML-DSA (基于模格的数字签名算法(FIPS 204))
定义
ML-DSA 是 NIST 于 2024 年 8 月在 FIPS 204 中标准化的基于格的后量子数字签名算法,源自 CRYSTALS-Dilithium。
ML-DSA 是一种安全性基于模格问题的数字签名方案,由 NIST 在 FIPS 204 中标准化,定义了 ML-DSA-44、ML-DSA-65、ML-DSA-87 三组参数,强度依次递增。NIST 还在 FIPS 205 中标准化了基于哈希的替代方案 SLH-DSA,其公钥更小,但签名更大、速度更慢。
为什么重要
要让 TLS 的身份认证扛得住未来的量子攻击者,证书签名和握手签名终究要从 RSA 和 ECDSA 迁移出去。最大的障碍是体积:ML-DSA-44 的签名有 2,420 字节,而 ECDSA P-256 签名只有约 64 字节;一次典型握手要携带多个签名和公钥,包括叶子证书公钥、叶子与中间证书上的签名、CertificateVerify 签名和内嵌的 SCT。全部换成 ML-DSA,每次握手会多出好几 KB。由于身份认证无法被"事后破解",这项迁移不如基于 ML-KEM 的后量子密钥交换紧迫。
例子
FIPS 204 中的尺寸,以及用 OpenSSL 3.5 及以上版本生成密钥:
Parameter set Public key Signature
ML-DSA-44 1,312 bytes 2,420 bytes
ML-DSA-65 1,952 bytes 3,309 bytes
ML-DSA-87 2,592 bytes 4,627 bytes
openssl genpkey -algorithm ML-DSA-65 -out mldsa65.key
openssl pkey -in mldsa65.key -pubout -out mldsa65.pub
常见误区
- 应该先上后量子证书,再上后量子密钥交换。 顺序正好相反:录下的流量可以日后解密,而签名只需在被验证的那一刻抗伪造。
- ML-DSA 可以直接替换 ECDSA。 它的密钥和签名大了几十倍,会影响握手、CT 日志和硬件安全模块。
- ML-DSA 和 ML-KEM 干的是同一件事。 ML-DSA 负责签名,ML-KEM 负责建立共享密钥。