Encryption

OPENSSL CMS:封裝數據的公鑰,證書的公鑰;他們是一樣的嗎?

  • January 4, 2022

我閱讀了 rfc5652,並通過 openssl 製作了封裝數據:

openssl cms -encrypt -in plain -aes256 -recip certificate.pem -outform DER -out enveloped-data.ber

然後,我檢查公鑰。首先,這是證書的公鑰。

在此處輸入圖像描述

而且,它是封裝數據的公鑰。

在此處輸入圖像描述

所以,我知道封裝的數據包含收件人的公鑰(證書的公鑰)。這樣對嗎?

那麼,為什麼上面兩個鍵不同呢?

不,CMS 封裝數據不包含收件人的公鑰。(封裝數據和加密數據是不同的,儘管 OpenSSL 混淆使用-encryptand-decrypt用於前者和-EncryptedData_encrypt後者-EncryptedData_decrypt!)沒有必要;消息被發送給接收者,並且接收者知道他們自己的密鑰。

具有 ECC 密鑰的接收者的封裝數據使用 ES-ECDH 或 1-pass ECMQV,OpenSSL 選擇前者;參見RFC5753 3.1。如那裡所述,這意味著 RecipientInfo 使用KeyAgreeRecipientInfo選項(帶有標籤 1)。正如 OpenSSL 所實現的,這包括:

  • version3
  • originator(標記 0 顯式)選擇originatorKey(標記 1 隱式序列)包含 AlgorithmIdentifier 和 BITSTRING,如 RFC5753 所說,“發送代理的臨時 EC 公鑰”。請注意,這是發件人的密鑰而不是收件人的密鑰,並且是短暫的,因此即使對於發件人,它也不在任何證書中。
  • ukm(標籤 1 顯式)可選且未使用
  • keyEncryptionAlgorithmdhSinglePass 的算法標識符和對稱密鑰包裝
  • recipientEncryptedKeys一個 SEQUENCE 的 SEQUENCE,每個都包含IssuerAndSerialNumber(一個 DistinguishedName 和 INTEGER)和encryptedKey(一個 BITSTRING,它是由 DH 秘密包裝的數據密鑰)。這標識了收件人密鑰,但不包含它。

您似乎已經省略或隱藏了圖像中的至少部分recipientEncryptedKeys數據,但很難確定。這是我創建的消息的準確顯示(包括 KARI):

   0:d=0  hl=4 l= 280 cons: SEQUENCE
   4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-envelopedData
  15:d=1  hl=4 l= 265 cons:  cont [ 0 ]
  19:d=2  hl=4 l= 261 cons:   SEQUENCE
  23:d=3  hl=2 l=   1 prim:    INTEGER           :02
  26:d=3  hl=3 l= 202 cons:    SET
  29:d=4  hl=3 l= 199 cons:     cont [ 1 ]
  32:d=5  hl=2 l=   1 prim:      INTEGER           :03
  35:d=5  hl=2 l=  65 cons:      cont [ 0 ]
  37:d=6  hl=2 l=  63 cons:       cont [ 1 ]
  39:d=7  hl=2 l=   9 cons:        SEQUENCE
  41:d=8  hl=2 l=   7 prim:         OBJECT            :id-ecPublicKey
  50:d=7  hl=2 l=  50 prim:        BIT STRING
 102:d=5  hl=2 l=  28 cons:      SEQUENCE
 104:d=6  hl=2 l=   9 prim:       OBJECT            :dhSinglePass-stdDH-sha1kdf-scheme
 115:d=6  hl=2 l=  15 cons:       SEQUENCE
 117:d=7  hl=2 l=  11 prim:        OBJECT            :id-smime-alg-CMS3DESwrap
 130:d=7  hl=2 l=   0 prim:        NULL
 132:d=5  hl=2 l=  97 cons:      SEQUENCE
 134:d=6  hl=2 l=  95 cons:       SEQUENCE
 136:d=7  hl=2 l=  51 cons:        SEQUENCE
 138:d=8  hl=2 l=  45 cons:         SEQUENCE
 140:d=9  hl=2 l=  43 cons:          SET
 142:d=10 hl=2 l=  41 cons:           SEQUENCE
 144:d=11 hl=2 l=   3 prim:            OBJECT            :commonName
 149:d=11 hl=2 l=  34 prim:            PRINTABLESTRING   :(REDACTED)
 185:d=8  hl=2 l=   2 prim:         INTEGER           :(REDACTED)
 189:d=7  hl=2 l=  40 prim:        OCTET STRING      [HEX DUMP]:847B0D796D954C05AF37E1AEFE11C7F6762FB8CE2A891AD22B5646E79E95B556EDEC5A240ACCC621
 231:d=3  hl=2 l=  51 cons:    SEQUENCE
 233:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
 244:d=4  hl=2 l=  20 cons:     SEQUENCE
 246:d=5  hl=2 l=   8 prim:      OBJECT            :des-ede3-cbc
 256:d=5  hl=2 l=   8 prim:      OCTET STRING      [HEX DUMP]:9780611D4883D5B1
 266:d=4  hl=2 l=  16 prim:     cont [ 0 ]

引用自:https://crypto.stackexchange.com/questions/97945