8.2 KiB
8.2 KiB
05. RPKI Signed Object(CMS SignedData 外壳)
5.1 对象定位
ROA、Manifest 等都属于 “RPKI Signed Object”,其外壳是 CMS SignedData,并受 RFC 6488 的 profile 约束;RFC 9589 进一步更新了 signedAttrs 的要求。RFC 6488 §2-§4;RFC 9589 §4。
本文件描述通用外壳模型(eContentType/eContent 由具体对象文档给出)。
5.2 原始载体与编码
- 载体:CMS
ContentInfo,其中contentType为 SignedData。RFC 6488 §2;RFC 6488 §3(1a)。 - 编码:DER。RFC 6488 §2;RFC 6488 §3(1l)。
5.2.1 CMS 外壳:ContentInfo(ASN.1;RFC 5652 §3)
ContentInfo ::= SEQUENCE {
contentType ContentType,
content [0] EXPLICIT ANY DEFINED BY contentType }
ContentType ::= OBJECT IDENTIFIER
5.2.2 CMS 外壳:SignedData(ASN.1;RFC 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 外壳:EncapsulatedContentInfo(ASN.1;RFC 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 §2;RFC 6488 §3(1l)),且 eContent(payload)由对象规范定义并通常为 DER(如 ROA:RFC 9582 §4;Manifest:RFC 9286 §4.2)。
5.2.4 CMS 外壳:SignerInfo 与 Attribute(ASN.1;RFC 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.1;RFC 6488 §3;更新:RFC 9589 §4)
说明:上面是 CMS 的通用 ASN.1;RPKI 进一步约束取值与允许出现的字段(例如 SignedData.version 必须为 3、crls 必须省略、signedAttrs 的内容限制等)。RFC 6488 §2-§3;RFC 9589 §4。
5.2.6 signedAttrs 中允许的属性与 attrType OID(RFC 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-type:attrType OID1.2.840.113549.1.9.3。RFC 6488 §2.1.6.4.1。message-digest:attrType OID1.2.840.113549.1.9.4。RFC 6488 §2.1.6.4.2。signing-time:attrType OID1.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 §2;RFC 6488 §3(1l) |
content_info_content_type |
Oid |
ContentInfo.contentType | MUST 为 SignedData:1.2.840.113549.1.7.2 |
RFC 6488 §3(1a) |
signed_data |
SignedDataProfiled |
SignedData 语义字段 | 见下 | RFC 6488 §2.1;RFC 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-sha256(2.16.840.1.101.3.4.2.1) |
RFC 6488 §2.1.2;RFC 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.1;RFC 6488 §2.1(SignerInfos 约束段落) |
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.1(ROA/MFT 文档定义);在 CMS 中以 OCTET STRING 承载 | RFC 6488 §2.1.3;RFC 9286 §4.2;RFC 9582 §4 |
5.3.4 SignerInfoProfiled
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|---|---|---|---|---|
version |
int |
SignerInfo.version | MUST 为 3 | RFC 6488 §3(1e) |
sid_ski |
bytes |
sid(SubjectKeyIdentifier) | 必须与 EE 证书的 SKI 匹配 | RFC 6488 §3(1c) |
digest_algorithm |
Oid |
SignerInfo.digestAlgorithm | 必须为 id-sha256(2.16.840.1.101.3.4.2.1) |
RFC 6488 §3(1j);RFC 7935 §2(引用 RFC 5754) |
signature_algorithm |
Oid |
SignerInfo.signatureAlgorithm | 生成时 MUST 为 rsaEncryption(1.2.840.113549.1.1.1);验证时实现必须接受 rsaEncryption 或 sha256WithRSAEncryption(1.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.3;MUST present;attrValues 等于 eContentType |
RFC 9589 §4;RFC 6488 §3(1h) |
message_digest |
bytes |
signedAttrs.message-digest | attrType=1.2.840.113549.1.9.4;MUST present |
RFC 9589 §4(更新 RFC 6488 §3(1f)) |
signing_time |
UtcTime |
signedAttrs.signing-time | attrType=1.2.840.113549.1.9.5;MUST present(时间值正确性不用于安全假设) |
RFC 9589 §4;RFC 9589 §5 |
other_attrs |
None |
其它 signed attributes | MUST NOT be included(binary-signing-time 也不允许) | RFC 9589 §4 |
5.4 字段级约束清单(实现对照)
- ContentInfo.contentType 必须为 SignedData(OID
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)。