我正在研究 RFC 5652,以便确切了解如何编码/解码 PKCS#7 ASN.1 数据。
我不明白当存在“signedAttrs”字段时如何创建签名:
消息摘要计算过程的结果取决于 signedAttrs 字段是否存在。当该字段不存在时,结果只是如上所述的内容的消息摘要。但是,当该字段存在时,结果是包含在 signedAttrs 字段中的 SignedAttrs 值的完整 DER 编码的消息摘要。由于 SignedAttrs 值(如果存在)必须包含 content-type 和 message-digest 属性,因此这些值会间接包含在结果中。
通过阅读上面的文字,我感到困惑: SignedAttrs 字段包含消息摘要和内容类型值,但消息摘要可以在计算后出现,并且必须计算摘要:
eContent OCTET STRING + SignedAttrs 字段的完整 DER 编码(包含消息摘要字段)。
在下面的示例中,有一个 PKCS#7 已签名数据结构,其中正在对信封数据内容字段值 + 已签名属性进行签名。messageDigest 值究竟来自哪里?