rpki/specs/05_signed_object_cms.md

8.2 KiB
Raw Blame History

05. RPKI Signed ObjectCMS SignedData 外壳)

5.1 对象定位

ROA、Manifest 等都属于 “RPKI Signed Object”其外壳是 CMS SignedData并受 RFC 6488 的 profile 约束RFC 9589 进一步更新了 signedAttrs 的要求。RFC 6488 §2-§4RFC 9589 §4。

本文件描述通用外壳模型eContentType/eContent 由具体对象文档给出)。

5.2 原始载体与编码

  • 载体CMS ContentInfo,其中 contentType 为 SignedData。RFC 6488 §2RFC 6488 §3(1a)。
  • 编码DER。RFC 6488 §2RFC 6488 §3(1l)。

5.2.1 CMS 外壳ContentInfoASN.1RFC 5652 §3

ContentInfo ::= SEQUENCE {
  contentType ContentType,
  content [0] EXPLICIT ANY DEFINED BY contentType }

ContentType ::= OBJECT IDENTIFIER

5.2.2 CMS 外壳SignedDataASN.1RFC 5652 §5.1

id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
  us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }

SignedData ::= SEQUENCE {
  version CMSVersion,
  digestAlgorithms DigestAlgorithmIdentifiers,
  encapContentInfo EncapsulatedContentInfo,
  certificates [0] IMPLICIT CertificateSet OPTIONAL,
  crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
  signerInfos SignerInfos }

DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier

SignerInfos ::= SET OF SignerInfo

5.2.3 CMS 外壳EncapsulatedContentInfoASN.1RFC 5652 §5.2

EncapsulatedContentInfo ::= SEQUENCE {
  eContentType ContentType,
  eContent [0] EXPLICIT OCTET STRING OPTIONAL }

ContentType ::= OBJECT IDENTIFIER

CMS 允许 eContent 不一定 DER 编码RFC 5652 §5.2);但 RPKI signed object profile 要求整个对象 DER 编码RFC 6488 §2RFC 6488 §3(1l)),且 eContentpayload由对象规范定义并通常为 DER如 ROARFC 9582 §4ManifestRFC 9286 §4.2)。

5.2.4 CMS 外壳SignerInfo 与 AttributeASN.1RFC 5652 §5.3

SignerInfo ::= SEQUENCE {
  version CMSVersion,
  sid SignerIdentifier,
  digestAlgorithm DigestAlgorithmIdentifier,
  signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
  signatureAlgorithm SignatureAlgorithmIdentifier,
  signature SignatureValue,
  unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }

SignerIdentifier ::= CHOICE {
  issuerAndSerialNumber IssuerAndSerialNumber,
  subjectKeyIdentifier [0] SubjectKeyIdentifier }

SignedAttributes ::= SET SIZE (1..MAX) OF Attribute

UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute

Attribute ::= SEQUENCE {
  attrType OBJECT IDENTIFIER,
  attrValues SET OF AttributeValue }

AttributeValue ::= ANY

SignatureValue ::= OCTET STRING

5.2.5 RPKI 对 CMS 外壳字段的 profile 约束RFC 6488 §2.1RFC 6488 §3更新RFC 9589 §4

说明:上面是 CMS 的通用 ASN.1RPKI 进一步约束取值与允许出现的字段(例如 SignedData.version 必须为 3、crls 必须省略、signedAttrs 的内容限制等。RFC 6488 §2-§3RFC 9589 §4。

5.2.6 signedAttrs 中允许的属性与 attrType OIDRFC 6488 §2.1.6.4.1-§2.1.6.4.2更新RFC 9589 §4

RPKI signed object profile 对 SignerInfo.signedAttrs 的 Attribute 集合施加限制(除 ASN.1 结构外,还包含“只允许哪些 attrType”的编码约束

  • content-typeattrType OID 1.2.840.113549.1.9.3。RFC 6488 §2.1.6.4.1。
  • message-digestattrType OID 1.2.840.113549.1.9.4。RFC 6488 §2.1.6.4.2。
  • signing-timeattrType OID 1.2.840.113549.1.9.5。RFC 9589 §4更新 RFC 6488 的相关要求)。

并且:

  • 每种属性在集合中只能出现一次;且 attrValues 虽然语法是 SET OF,但在 RPKI 中必须只含一个值。RFC 6488 §2.1.6.4。

5.3 抽象数据模型(接口)

5.3.1 RpkiSignedObject

字段 类型 语义 约束/解析规则 RFC 引用
raw_der DerBytes CMS DER 原样保留(建议) RFC 6488 §2RFC 6488 §3(1l)
content_info_content_type Oid ContentInfo.contentType MUST 为 SignedData1.2.840.113549.1.7.2 RFC 6488 §3(1a)
signed_data SignedDataProfiled SignedData 语义字段 见下 RFC 6488 §2.1RFC 6488 §3

5.3.2 SignedDataProfiled

字段 类型 语义 约束/解析规则 RFC 引用
version int SignedData.version MUST 为 3 RFC 6488 §3(1b)RFC 6488 §2.1.1
digest_algorithms list[Oid] SignedData.digestAlgorithms MUST contain exactly one digest algorithm且必须为 id-sha2562.16.840.1.101.3.4.2.1 RFC 6488 §2.1.2RFC 7935 §2引用 RFC 5754
encap_content_info EncapsulatedContentInfo EncapsulatedContentInfo 见下eContentType 由具体对象定义 RFC 6488 §2.1.3
certificates list[ResourceEeCertificate] SignedData.certificates MUST present且仅包含 1 个 EE 证书;该 EE 的 SKI 必须匹配 SignerInfo.sid RFC 6488 §3(1c)
crls None SignedData.crls MUST be omitted RFC 6488 §3(1d)
signer_infos list[SignerInfoProfiled] SignedData.signerInfos MUST contain exactly one SignerInfo RFC 6488 §2.1RFC 6488 §2.1SignerInfos 约束段落)

5.3.3 EncapsulatedContentInfo

字段 类型 语义 约束/解析规则 RFC 引用
econtent_type Oid eContentType MUST 与 signedAttrs.content-type 的 attrValues 一致;具体值由对象定义(如 ROA/MFT RFC 6488 §3(1h)RFC 6488 §2.1.3.1
econtent_der DerBytes eContent对象 payload DER 编码的对象特定 ASN.1ROA/MFT 文档定义);在 CMS 中以 OCTET STRING 承载 RFC 6488 §2.1.3RFC 9286 §4.2RFC 9582 §4

5.3.4 SignerInfoProfiled

字段 类型 语义 约束/解析规则 RFC 引用
version int SignerInfo.version MUST 为 3 RFC 6488 §3(1e)
sid_ski bytes sidSubjectKeyIdentifier 必须与 EE 证书的 SKI 匹配 RFC 6488 §3(1c)
digest_algorithm Oid SignerInfo.digestAlgorithm 必须为 id-sha2562.16.840.1.101.3.4.2.1 RFC 6488 §3(1j)RFC 7935 §2引用 RFC 5754
signature_algorithm Oid SignerInfo.signatureAlgorithm 生成时 MUST 为 rsaEncryption1.2.840.113549.1.1.1);验证时实现必须接受 rsaEncryptionsha256WithRSAEncryption1.2.840.113549.1.1.11 RFC 6488 §3(1k)RFC 7935 §2
signed_attrs SignedAttrsProfiled signedAttrs MUST present仅允许特定 3 个属性 RFC 9589 §4更新 RFC 6488 §3(1f)/(1g)
unsigned_attrs None unsignedAttrs MUST be omitted RFC 6488 §3(1i)

5.3.5 SignedAttrsProfiled

字段 类型 语义 约束/解析规则 RFC 引用
content_type Oid signedAttrs.content-type attrType=1.2.840.113549.1.9.3MUST presentattrValues 等于 eContentType RFC 9589 §4RFC 6488 §3(1h)
message_digest bytes signedAttrs.message-digest attrType=1.2.840.113549.1.9.4MUST present RFC 9589 §4更新 RFC 6488 §3(1f)
signing_time UtcTime signedAttrs.signing-time attrType=1.2.840.113549.1.9.5MUST present时间值正确性不用于安全假设 RFC 9589 §4RFC 9589 §5
other_attrs None 其它 signed attributes MUST NOT be includedbinary-signing-time 也不允许) RFC 9589 §4

5.4 字段级约束清单(实现对照)

  • ContentInfo.contentType 必须为 SignedDataOID 1.2.840.113549.1.7.2。RFC 6488 §3(1a)。
  • SignedData.version 必须为 3且 SignerInfos 仅允许 1 个 SignerInfo。RFC 6488 §3(1b)RFC 6488 §2.1。
  • SignedData.certificates 必须存在且仅含 1 个 EE 证书;该证书 SKI 必须匹配 SignerInfo.sid。RFC 6488 §3(1c)。
  • SignedData.crls 必须省略。RFC 6488 §3(1d)。
  • signedAttrs 必须存在,且仅允许 content-type/message-digest/signing-time其它全部禁止。RFC 9589 §4。
  • eContentType 必须与 content-type attribute 一致。RFC 6488 §3(1h)。
  • unsignedAttrs 必须省略。RFC 6488 §3(1i)。
  • digest/signature 算法必须符合算法 profile。RFC 6488 §3(1j)/(1k)RFC 7935 §2。
  • 整个对象必须 DER 编码。RFC 6488 §3(1l)。