跳到主要内容

7. 私钥格式 (Private Key Format)

"Asymmetric Key Packages" [RFC5958] 描述了如何在一种结构中编码私钥, 该结构既标识私钥适用的算法, 也可选地允许包含公钥以及关于该密钥的附加属性. 为便于说明, 下面复制 ASN.1 结构 OneAsymmetricKey.

   OneAsymmetricKey ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL,
...,
[[2: publicKey [1] IMPLICIT PublicKey OPTIONAL ]],
...
}

PrivateKey ::= OCTET STRING

PublicKey ::= BIT STRING

NOTE: 上述语法来自 [RFC5958], 并且与 2021 ASN.1 语法 [X680] 兼容.

[FIPS205] 第 9.1 节将 SLH-DSA 私钥定义为四个 n 字节元素: SK.seed, SK.prf, PK.seed 和 PK.root. SLH-DSA 私钥的原始八位字节串编码是这四个元素的拼接, 即 SK.seed || SK.prf || PK.seed || PK.root. 八位字节串长度为 4*n 字节, 其中 n 为 16, 24 或 32, 取决于 SLH-DSA 参数集. 在 OneAsymmetricKey 类型中使用时, privateKey OCTET STRING 包含私钥的原始八位字节串编码.

当 SLH-DSA 公钥包含在 OneAsymmetricKey 类型中时, 其编码方式与在 SubjectPublicKeyInfo 类型中相同. 也就是说, publicKey BIT STRING 包含公钥的原始八位字节串编码.

附录 C.2 包含一个使用 [RFC7468] 中定义的文本编码进行编码的 id-slh-dsa-sha2-128s 私钥示例.

NOTE: 存在一些私钥导入函数尚未采用 [RFC5958] 中定义的 ASN.1 结构 OneAsymmetricKey. 这意味着它们不会接受包含 publicKey 字段的私钥结构. 因此, 需要在能够对密钥对执行一致性检查和最大范围导入密钥的能力之间做权衡.