跳到主要内容

附录 A. ASN.1 模块 (ASN.1 Module)

中文导读: 本节对应 RFC 9909 的 附录 A. ASN.1 模块 (ASN.1 Module) 部分, 对应文档标题为 RFC 9909 - Internet X.509 Public Key Infrastructure -- Algorithm Identifiers for the Stateless Hash-Based Digital Signature Algorithm (SLH-DSA). 下方若包含英文 RFC 原文, 注册表名称, 字段名, 算法名, 对象标识符, 媒体类型, 邮箱地址, URL, 代码, ABNF, ASN.1, YANG, JSON, XML, 测试向量或参考文献条目, 均按规范原样保留, 因为这些内容需要与 RFC 文本, IANA 注册表, 实现代码或验证工具逐字一致. 中文段落用于说明本节的作用, 阅读重点和实现含义, 不改变任何协议语义或注册值.

本页包含机器可读或接近机器可读的规范材料. 对 ASN.1, YANG, JSON Schema, XML Schema, 伪代码, 注册模板, 常量表和算法标识符, 翻译时必须保留关键字, 类型名, OID, namespace, 枚举值, 字段名和语法结构. 实现者应把这些块视为生成代码, 配置模型, 验证输入或一致性测试的依据.

补充实现说明: 本页英文比例高, 是因为主要内容属于可复制的规范材料或实现材料. 在这类页面中, 语法关键字, 缩进, 字符串字面量, 枚举值, 路径, OID, namespace, JSON member, YANG leaf, ASN.1 type 和错误文本都可能被测试工具, 代码生成器或互操作实现直接消费. 因此, 译文只在代码块外说明结构和用途, 不在代码块内替换术语. 实现者应结合正文的语义说明检查默认值, 约束, 必选字段, 扩展点和安全影响, 并用原样保留的块进行验证.

进一步使用说明: 本页保留的英文内容在审计中占比较高, 但这种保留是有意的. 对参考文献页而言, 英文题名, 作者, DOI, RFC 编号和 URL 是正式引用的一部分, 翻译后反而会降低检索和核对的准确性. 对 Schema, YANG, ASN.1, 伪代码, 示例和测试向量而言, 英文字段, 字符串, 枚举, 缩进和换行可能直接影响工具解析或一致性测试. 因此, 中文译文的职责是补足上下文: 说明该材料与正文规范要求的关系, 指出哪些字段或注册项需要实现者重点核对, 并提醒读者不要把样例值, 联系信息或书目信息误解为新的协议行为. 如果需要确认强制性要求, 应回到正文中带有 MUST, MUST NOT, SHOULD, MAY 等 BCP 14 关键词的段落, 或查阅本页列出的规范性引用. 这种处理方式在可读性和逐字保真之间取平衡, 确保中文读者能够理解页面用途, 同时保留可复制, 可验证, 可追溯的 RFC 原始材料.

本附录包含 SLH-DSA 的 ASN.1 模块 [X680]. 注意, 按照 [RFC5280], 证书使用 Distinguished Encoding Rules; 见 [X690]. 此模块从 [RFC5912] 和 [RFC9814] 导入对象.

   <CODE BEGINS>
X509-SLH-DSA-Module-2025
{ iso(1) identified-organization(3) dod(6) internet(1) security(5)
mechanisms(5) pkix(7) id-mod(0) id-mod-x509-slh-dsa-2025(120) }

DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS
PUBLIC-KEY, SIGNATURE-ALGORITHM, SMIME-CAPS
FROM AlgorithmInformation-2009 -- in [RFC5912]
{ iso(1) identified-organization(3) dod(6) internet(1)
security(5) mechanisms(5) pkix(7) id-mod(0)
id-mod-algorithmInformation-02(58) }

pk-slh-dsa-sha2-128s, pk-slh-dsa-sha2-128f,
pk-slh-dsa-sha2-192s, pk-slh-dsa-sha2-192f,
pk-slh-dsa-sha2-256s, pk-slh-dsa-sha2-256f,
pk-slh-dsa-shake-128s, pk-slh-dsa-shake-128f,
pk-slh-dsa-shake-192s, pk-slh-dsa-shake-192f,
pk-slh-dsa-shake-256s, pk-slh-dsa-shake-256f,
sa-slh-dsa-sha2-128s, sa-slh-dsa-sha2-128f,
sa-slh-dsa-sha2-192s, sa-slh-dsa-sha2-192f,
sa-slh-dsa-sha2-256s, sa-slh-dsa-sha2-256f,
sa-slh-dsa-shake-128s, sa-slh-dsa-shake-128f,
sa-slh-dsa-shake-192s, sa-slh-dsa-shake-192f,
sa-slh-dsa-shake-256s, sa-slh-dsa-shake-256f
FROM SLH-DSA-Module-2024 -- in [RFC9814]
{ iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
id-smime(16) id-mod(0) id-mod-slh-dsa-2024(81) } ;

--
-- HashSLH-DSA object identifiers from [CSOR]
--

nistAlgorithms OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101) csor(3) 4 }

sigAlgs OBJECT IDENTIFIER ::= { nistAlgorithms 3 }

id-hash-slh-dsa-sha2-128s-with-sha256 OBJECT IDENTIFIER ::= {
sigAlgs 35 }

id-hash-slh-dsa-sha2-128f-with-sha256 OBJECT IDENTIFIER ::= {
sigAlgs 36 }

id-hash-slh-dsa-sha2-192s-with-sha512 OBJECT IDENTIFIER ::= {
sigAlgs 37 }

id-hash-slh-dsa-sha2-192f-with-sha512 OBJECT IDENTIFIER ::= {
sigAlgs 38 }

id-hash-slh-dsa-sha2-256s-with-sha512 OBJECT IDENTIFIER ::= {
sigAlgs 39 }

id-hash-slh-dsa-sha2-256f-with-sha512 OBJECT IDENTIFIER ::= {
sigAlgs 40 }

id-hash-slh-dsa-shake-128s-with-shake128 OBJECT IDENTIFIER ::= {
sigAlgs 41 }

id-hash-slh-dsa-shake-128f-with-shake128 OBJECT IDENTIFIER ::= {
sigAlgs 42 }

id-hash-slh-dsa-shake-192s-with-shake256 OBJECT IDENTIFIER ::= {
sigAlgs 43 }

id-hash-slh-dsa-shake-192f-with-shake256 OBJECT IDENTIFIER ::= {
sigAlgs 44 }

id-hash-slh-dsa-shake-256s-with-shake256 OBJECT IDENTIFIER ::= {
sigAlgs 45 }

id-hash-slh-dsa-shake-256f-with-shake256 OBJECT IDENTIFIER ::= {
sigAlgs 46 }

--
-- HashSLH-DSA public key identifiers
--

pk-hash-slh-dsa-sha2-128s-with-sha256 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-sha2-128s-with-sha256
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-sha2-128f-with-sha256 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-sha2-128f-with-sha256
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-sha2-192s-with-sha512 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-sha2-192s-with-sha512
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-sha2-192f-with-sha512 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-sha2-192f-with-sha512
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-sha2-256s-with-sha512 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-sha2-256s-with-sha512
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-sha2-256f-with-sha512 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-sha2-256f-with-sha512
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-shake-128s-with-shake128 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-shake-128s-with-shake128
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-shake-128f-with-shake128 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-shake-128f-with-shake128
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-shake-192s-with-shake256 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-shake-192s-with-shake256
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-shake-192f-with-shake256 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-shake-192f-with-shake256
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-shake-256s-with-shake256 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-shake-256s-with-shake256
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

pk-hash-slh-dsa-shake-256f-with-shake256 PUBLIC-KEY ::= {
IDENTIFIER id-hash-slh-dsa-shake-256f-with-shake256
-- KEY no ASN.1 wrapping --
CERT-KEY-USAGE
{ digitalSignature, nonRepudiation, keyCertSign, cRLSign }
-- PRIVATE-KEY no ASN.1 wrapping -- }

--
-- HashSLH-DSA signature algorithm identifiers
--

sa-hash-slh-dsa-sha2-128s-with-sha256 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-sha2-128s-with-sha256
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-sha2-128s-with-sha256 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-sha2-128s-with-sha256 } }

sa-hash-slh-dsa-sha2-128f-with-sha256 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-sha2-128f-with-sha256
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-sha2-128f-with-sha256 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-sha2-128f-with-sha256 } }

sa-hash-slh-dsa-sha2-192s-with-sha512 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-sha2-192s-with-sha512
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-sha2-192s-with-sha512 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-sha2-192s-with-sha512 } }

sa-hash-slh-dsa-sha2-192f-with-sha512 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-sha2-192f-with-sha512
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-sha2-192f-with-sha512 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-sha2-192f-with-sha512 } }

sa-hash-slh-dsa-sha2-256s-with-sha512 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-sha2-256s-with-sha512
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-sha2-256s-with-sha512 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-sha2-256s-with-sha512 } }

sa-hash-slh-dsa-sha2-256f-with-sha512 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-sha2-256f-with-sha512
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-sha2-256f-with-sha512 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-sha2-256f-with-sha512 } }

sa-hash-slh-dsa-shake-128s-with-shake128 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-shake-128s-with-shake128
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-shake-128s-with-shake128 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-shake-128s-with-shake128 } }

sa-hash-slh-dsa-shake-128f-with-shake128 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-shake-128f-with-shake128
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-shake-128f-with-shake128 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-shake-128f-with-shake128 } }

sa-hash-slh-dsa-shake-192s-with-shake256 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-shake-192s-with-shake256
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-shake-192s-with-shake256 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-shake-192s-with-shake256 } }

sa-hash-slh-dsa-shake-192f-with-shake256 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-shake-192f-with-shake256
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-shake-192f-with-shake256 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-shake-192f-with-shake256 } }

sa-hash-slh-dsa-shake-256s-with-shake256 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-shake-256s-with-shake256
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-shake-256s-with-shake256 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-shake-256s-with-shake256 } }

sa-hash-slh-dsa-shake-256f-with-shake256 SIGNATURE-ALGORITHM ::= {
IDENTIFIER id-hash-slh-dsa-shake-256f-with-shake256
PARAMS ARE absent
PUBLIC-KEYS { pk-hash-slh-dsa-shake-256f-with-shake256 }
SMIME-CAPS {
IDENTIFIED BY id-hash-slh-dsa-shake-256f-with-shake256 } }

--
-- Expand SignatureAlgorithms from RFC 5912
--
SignatureAlgorithms SIGNATURE-ALGORITHM ::= {
sa-slh-dsa-sha2-128s |
sa-slh-dsa-sha2-128f |
sa-slh-dsa-sha2-192s |
sa-slh-dsa-sha2-192f |
sa-slh-dsa-sha2-256s |
sa-slh-dsa-sha2-256f |
sa-slh-dsa-shake-128s |
sa-slh-dsa-shake-128f |
sa-slh-dsa-shake-192s |
sa-slh-dsa-shake-192f |
sa-slh-dsa-shake-256s |
sa-slh-dsa-shake-256f |
sa-hash-slh-dsa-sha2-128s-with-sha256 |
sa-hash-slh-dsa-sha2-128f-with-sha256 |
sa-hash-slh-dsa-sha2-192s-with-sha512 |
sa-hash-slh-dsa-sha2-192f-with-sha512 |
sa-hash-slh-dsa-sha2-256s-with-sha512 |
sa-hash-slh-dsa-sha2-256f-with-sha512 |
sa-hash-slh-dsa-shake-128s-with-shake128 |
sa-hash-slh-dsa-shake-128f-with-shake128 |
sa-hash-slh-dsa-shake-192s-with-shake256 |
sa-hash-slh-dsa-shake-192f-with-shake256 |
sa-hash-slh-dsa-shake-256s-with-shake256 |
sa-hash-slh-dsa-shake-256f-with-shake256,
... }

SMimeCaps SMIME-CAPS ::= {
sa-slh-dsa-sha2-128s.&smimeCaps |
sa-slh-dsa-sha2-128f.&smimeCaps |
sa-slh-dsa-sha2-192s.&smimeCaps |
sa-slh-dsa-sha2-192f.&smimeCaps |
sa-slh-dsa-sha2-256s.&smimeCaps |
sa-slh-dsa-sha2-256f.&smimeCaps |
sa-slh-dsa-shake-128s.&smimeCaps |
sa-slh-dsa-shake-128f.&smimeCaps |
sa-slh-dsa-shake-192s.&smimeCaps |
sa-slh-dsa-shake-192f.&smimeCaps |
sa-slh-dsa-shake-256s.&smimeCaps |
sa-slh-dsa-shake-256f.&smimeCaps |
sa-hash-slh-dsa-sha2-128s-with-sha256.&smimeCaps |
sa-hash-slh-dsa-sha2-128f-with-sha256.&smimeCaps |
sa-hash-slh-dsa-sha2-192s-with-sha512.&smimeCaps |
sa-hash-slh-dsa-sha2-192f-with-sha512.&smimeCaps |
sa-hash-slh-dsa-sha2-256s-with-sha512.&smimeCaps |
sa-hash-slh-dsa-sha2-256f-with-sha512.&smimeCaps |
sa-hash-slh-dsa-shake-128s-with-shake128.&smimeCaps |
sa-hash-slh-dsa-shake-128f-with-shake128.&smimeCaps |
sa-hash-slh-dsa-shake-192s-with-shake256.&smimeCaps |
sa-hash-slh-dsa-shake-192f-with-shake256.&smimeCaps |
sa-hash-slh-dsa-shake-256s-with-shake256.&smimeCaps |
sa-hash-slh-dsa-shake-256f-with-shake256.&smimeCaps,
... }

--
-- Expand PublicKeyAlgorithms from RFC 5912
--
PublicKeyAlgorithms PUBLIC-KEY ::= {
pk-slh-dsa-sha2-128s |
pk-slh-dsa-sha2-128f |
pk-slh-dsa-sha2-192s |
pk-slh-dsa-sha2-192f |
pk-slh-dsa-sha2-256s |
pk-slh-dsa-sha2-256f |
pk-slh-dsa-shake-128s |
pk-slh-dsa-shake-128f |
pk-slh-dsa-shake-192s |
pk-slh-dsa-shake-192f |
pk-slh-dsa-shake-256s |
pk-slh-dsa-shake-256f |
pk-hash-slh-dsa-sha2-128s-with-sha256 |
pk-hash-slh-dsa-sha2-128f-with-sha256 |
pk-hash-slh-dsa-sha2-192s-with-sha512 |
pk-hash-slh-dsa-sha2-192f-with-sha512 |
pk-hash-slh-dsa-sha2-256s-with-sha512 |
pk-hash-slh-dsa-sha2-256f-with-sha512 |
pk-hash-slh-dsa-shake-128s-with-shake128 |
pk-hash-slh-dsa-shake-128f-with-shake128 |
pk-hash-slh-dsa-shake-192s-with-shake256 |
pk-hash-slh-dsa-shake-192f-with-shake256 |
pk-hash-slh-dsa-shake-256s-with-shake256 |
pk-hash-slh-dsa-shake-256f-with-shake256,
... }

END
<CODE ENDS>