[英]PKCS#7 CMS - Message digest calculation process
我正在研究 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 值究竟來自哪里?
CMS 算法中有兩種不同的消息摘要:
第一個消息摘要是一個簽名屬性,它只包含被簽名的封裝內容的摘要。
第二個是通過簽名算法進行簽名。 此消息摘要包含由特定算法計算的摘要:
消息摘要算法的輸入是Content 。 在缺少簽名屬性的情況下,當前輸入的摘要(當前輸入 = 內容)將被創建並作為結果消息摘要返回。 否則,如果存在簽名屬性,則計算內容的摘要並將其添加到簽名屬性列表中(作為消息摘要簽名屬性),然后計算所有簽名屬性的摘要。 所以內容間接包含在結果中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.