Encryption
OPENSSL CMS:封裝數據的公鑰,證書的公鑰;他們是一樣的嗎?
我閱讀了 rfc5652,並通過 openssl 製作了封裝數據:
openssl cms -encrypt -in plain -aes256 -recip certificate.pem -outform DER -out enveloped-data.ber
然後,我檢查公鑰。首先,這是證書的公鑰。
而且,它是封裝數據的公鑰。
所以,我知道封裝的數據包含收件人的公鑰(證書的公鑰)。這樣對嗎?
那麼,為什麼上面兩個鍵不同呢?
不,CMS 封裝數據不包含收件人的公鑰。(封裝數據和加密數據是不同的,儘管 OpenSSL 混淆使用
-encrypt
and-decrypt
用於前者和-EncryptedData_encrypt
後者-EncryptedData_decrypt
!)沒有必要;消息被發送給接收者,並且接收者知道他們自己的密鑰。具有 ECC 密鑰的接收者的封裝數據使用 ES-ECDH 或 1-pass ECMQV,OpenSSL 選擇前者;參見RFC5753 3.1。如那裡所述,這意味著 RecipientInfo 使用KeyAgreeRecipientInfo選項(帶有標籤 1)。正如 OpenSSL 所實現的,這包括:
version
3originator
(標記 0 顯式)選擇originatorKey
(標記 1 隱式序列)包含 AlgorithmIdentifier 和 BITSTRING,如 RFC5753 所說,“發送代理的臨時 EC 公鑰”。請注意,這是發件人的密鑰而不是收件人的密鑰,並且是短暫的,因此即使對於發件人,它也不在任何證書中。ukm
(標籤 1 顯式)可選且未使用keyEncryptionAlgorithm
dhSinglePass 的算法標識符和對稱密鑰包裝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 ]