摘要

  • RFC 9881 规定在 PKIX 证书和 CRL 中使用纯 ML-DSA-44、ML-DSA-65 与 ML-DSA-87。
  • 完整 OID 分别为:ML-DSA-44 的 2.16.840.1.101.3.4.3.17、ML-DSA-65 的 2.16.840.1.101.3.4.3.18、ML-DSA-87 的 2.16.840.1.101.3.4.3.19。它们对应安全等级 2、3 和 5。
  • AlgorithmIdentifier 的 parameters 组件必须缺省,不能编码为 NULLsignatureValue 放置针对 DER 编码签名结构的原始 ML-DSA 签名,context 保持为空。

这里的算法身份是字节级约定。证书或 CRL 的 AlgorithmIdentifier 放置选定 OID,signatureValue 放置原始签名。验证方必须针对签名结构的 DER 编码进行验证,而不能验证某种看似等价的重新序列化结果。RFC 9881 在 PKIX 用途中保留空的可选 context。

SubjectPublicKeyInfo 直接承载 ML-DSA 公钥字节串,不再添加 ASN.1 包装。ML-DSA-44、65、87 的公钥大小分别为 1,312、1,952 和 2,592 个八位组。如果存在 keyUsage,至少要设置一个签名相关位;ML-DSA 密钥不得设置加密或密钥协商位。这些是 RFC 要求,而不是运营团队的偏好。

OneAsymmetricKey 可以包含 seed、expandedKey,或同时包含二者。仅 seed 的形式被推荐用于节省存储空间。解析器必须依据 ASN.1 标签选择表示形式,不能根据长度猜测。如果两种表示都存在且一致性检查失败,接收方必须将私钥判定为畸形并拒绝。

RFC 9881 选择纯 ML-DSA。所覆盖的 PKIX 协议不得使用 HashML-DSA OID。还必须明确与标准化前 Dilithium 的边界:ML-DSA 与 Dilithium 不兼容,因此实现识别出一个名称,不代表可以接受另一种线格式。

来源