【发布时间】:2011-04-07 23:58:52
【问题描述】:
我有一个 X.509 证书,其中包含一组带有以下隐式 [0] 标记的数据:
A0 81 C6 (value)...
我有一个标准文档的摘录:
IMPLICIT [0] 标签不用于 DER 编码,而不是 EXPLICIT 使用了 SET OF 标签。也就是说,DER EXPLICIT SET OF 标签的编码, 而不是隐式 [0] 标记, 必须与长度一起包含 和值的内容字节。
我已经进行了很多搜索,但我无法确切了解该标准的要求。我正在寻找一些澄清。
编辑: 这是我遵循的标准:https://www.rfc-editor.org/rfc/rfc3852
我正在尝试验证 X.509 签名,我需要计算消息摘要来执行此操作。此证书包括 SignerInfo 类型中的可选 SignedAttributes。我已经对签名内容进行了哈希处理,并验证了 SignedAttributes 中的消息摘要是否正确。该标准规定,如果存在 SignedAttributes,则应对其进行散列和加密以创建证书的签名。该标准还规定,应按照原始问题中的讨论更改 SignedAttributes 的标签。
这是 SignerInfo 的 Asn.1 语法:
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
【问题讨论】:
-
是否在特定的扩展中?
-
SignerInfo 的 SignedAttributes 字段。这是我遵循的标准 - tools.ietf.org/html/rfc3852#section-5.4 所以我正在尝试验证此 X.509 证书上的签名,我需要获取从证书签名的数据。此证书包括可选的 SignedAttributes 字段,并且根据标准,整个字段(标签、长度和值)经过散列和加密以创建签名。但是当我尝试用这个值验证签名时,它失败了。我想我需要以某种方式更改标签。
标签: encryption encoding tags cryptography x509