Nu, datele în plic CMS nu conțin cheia publică a destinatarului.
(Datele încapsulate și datele criptate sunt diferite, chiar dacă OpenSSL utilizează în mod confuz -criptare
și -decriptează
pentru prima şi -EncryptedData_encrypt
și -EncryptedData_decrypt
pentru cel din urmă!) Nu e nevoie; mesajul este trimis destinatarului, iar destinatarul își cunoaște propria cheie.
Datele plic pentru un destinatar cu o cheie ECC utilizează fie ES-ECDH, fie ECMQV cu 1 trecere, iar OpenSSL îl alege pe primul; vedea RFC5753 3.1. După cum sa menționat acolo, aceasta înseamnă că RecipientInfo utilizează KeyAgreeRecipientInfo alegere (cu eticheta 1). După cum este implementat de OpenSSL, acesta constă în:
versiune
3
originator
(etichetă 0 explicit) alegere originatorKey
(tag 1 SEQUENCE implicită) care conține AlgorithmIdentifier și BITSTRING care conține, după cum spune RFC5753, „cheia publică efemeră a agentului expeditor”. Rețineți că aceasta este cheia expeditorului, nu a destinatarului și este efemeră, așa că nu este în niciun certificat nici măcar pentru expeditor.
ukm
(eticheta 1 explicită) opțională și neutilizată
keyEncryptionAlgorithm
AlgorithmIdentifier pentru dhSinglePass și o cheie simetrică
recipientEncryptedKeys
o SECVENȚĂ de SECVENȚE care conține fiecare IssuerAndSerialNumber
(un DistinguishedName și INTEGER) și cheie criptată
(un BITSTRING care este cheia de date ambalată de secretul DH). Acest identifică cheia destinatarului, dar nu o conține.
Se pare că ați omis sau suprimat cel puțin o parte din recipientEncryptedKeys
date din imaginea dvs., dar este greu de spus cu siguranță. Iată un exacte afișarea (inclusiv KARI) a unui mesaj pe care l-am creat:
0:d=0 hl=4 l= 280 contra: SECVENȚA
4:d=1 hl=2 l= 9 prim: OBJECT :pkcs7-envelopedData
15:d=1 hl=4 l= 265 contra: cont [ 0 ]
19:d=2 hl=4 l= 261 contra: SECVENȚA
23:d=3 hl=2 l= 1 prim: INTEGER :02
26:d=3 hl=3 l= 202 contra: SET
29:d=4 hl=3 l= 199 contra: cont [ 1 ]
32:d=5 hl=2 l= 1 prim: INTEGER :03
35:d=5 hl=2 l= 65 contra: cont [ 0 ]
37:d=6 hl=2 l= 63 contra: cont [ 1 ]
39:d=7 hl=2 l= 9 contra: SECVENȚA
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 contra: SECVENȚA
104:d=6 hl=2 l= 9 prim: OBJECT :dhSinglePass-stdDH-sha1kdf-scheme
115:d=6 hl=2 l= 15 contra: SECVENȚA
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 contra: SECVENȚA
134:d=6 hl=2 l= 95 contra: SECVENȚA
136:d=7 hl=2 l= 51 contra: SECVENȚA
138:d=8 hl=2 l= 45 contra: SECVENȚA
140:d=9 hl=2 l= 43 contra: SET
142:d=10 hl=2 l= 41 contra: SECVENȚA
144:d=11 hl=2 l= 3 prim: OBJECT :commonName
149:d=11 hl=2 l= 34 prim: PRINTABLESTRING :(REDACTATE)
185:d=8 hl=2 l= 2 prim: INTEGER :(REDACTAT)
189:d=7 hl=2 l= 40 prim: OCTET STRING [HEX DUMP]:847B0D796D954C05AF37E1AEFE11C7F6762FB8CE2A891AD22B5646E79E95B556EDEC5A2140
231:d=3 hl=2 l= 51 contra: SECVENȚA
233:d=4 hl=2 l= 9 prim: OBJECT :pkcs7-data
244:d=4 hl=2 l= 20 contra: SECVENȚA
246:d=5 hl=2 l= 8 prim: OBIECTUL :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 ]