Рейтинг:0

OPENSSL CMS: открытый ключ данных в оболочке, открытый ключ сертификата; Они такие же?

флаг cn

Я прочитал rfc5652 и сделал конвертированные данные через openssl:

openssl cms -encrypt -in plain -aes256 -recip certificate.pem -outform DER -out конвертированные данные.ber

Затем я проверяю открытый ключ. Во-первых, вот открытый ключ сертификата.

введите описание изображения здесь

И это открытый ключ упакованных данных.

введите описание изображения здесь

Итак, я понимаю, что данные в оболочке содержат открытый ключ получателя (открытый ключ сертификата). Это правильно?

Тогда почему два вышеуказанных ключа разные?

Рейтинг:2
флаг cn

Нет, упакованные данные CMS не содержат открытого ключа получателя. (Зашифрованные данные и зашифрованные данные различаются, даже несмотря на то, что OpenSSL путано использует -шифровать и -расшифровать для бывшего и -EncryptedData_encrypt и -EncryptedData_decrypt для последнего!) В этом нет необходимости; сообщение отправляется получателю, и получатель знает свой собственный ключ (ключи).

В конвертированных данных для получателя с ключом ECC используется либо ES-ECDH, либо однопроходный ECMQV, и OpenSSL выбирает первое; видеть RFC5753 3.1. Как указано там, это означает, что RecipientInfo использует KeyAgreeRecipientInfo выбор (с тегом 1). Как реализовано OpenSSL, он состоит из:

  • версия 3

  • составитель (тег 0 явный) выбор оригинаторКлюч (тег 1 неявная ПОСЛЕДОВАТЕЛЬНОСТЬ), содержащий AlgorithmIdentifier и BITSTRING, который содержит, как говорится в RFC5753, «эфемерный открытый ключ EC агента-отправителя». Обратите внимание, что это ключ отправителя, а не получателя, и он эфемерен, поэтому его нет ни в одном сертификате даже для отправителя.

  • укм (тег 1 явный) необязательный и не используется

  • ключШифрованиеАлгоритм AlgorithmIdentifier для dhSinglePass и перенос симметричного ключа

  • получательEncryptedKeys ПОСЛЕДОВАТЕЛЬНОСТЬ последовательностей, каждая из которых содержит эмитент и серийный номер (DistinguishedName и INTEGER) и зашифрованный ключ (BITSTRING, который представляет собой ключ данных, обернутый секретом DH). Этот идентифицирует ключ получателя, но не содержит его.

Вы, кажется, пропустили или скрыли по крайней мере часть получательEncryptedKeys данные на вашем изображении, но трудно сказать наверняка. Вот точный отображение (включая KARI) сообщения, которое я создал:

    0:d=0 hl=4 l= 280 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
    4:d=1 hl=2 l= 9 prim: ОБЪЕКТ :pkcs7-envelopedData
   15:d=1 hl=4 l= 265 минус: продолжение [ 0 ]
   19:d=2 hl=4 l= 261 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
   23:d=3 hl=2 l= 1 простое число: ЦЕЛОЕ ЧИСЛО :02
   26:д=3 гл=3 л= 202 минус: СЕТ
   29:d=4 hl=3 l= 199 минус: продолжение [ 1 ]
   32:d=5 hl=2 l= 1 простое число: ЦЕЛОЕ ЧИСЛО :03
   35:d=5 hl=2 l= 65 минус: продолжение [ 0 ]
   37:d=6 hl=2 l= 63 минус: продолжение [ 1 ]
   39:d=7 hl=2 l= 9 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
   41:d=8 hl=2 l= 7 prim: ОБЪЕКТ :id-ecPublicKey
   50:d=7 hl=2 l= 50 prim: БИТОВАЯ СТРОКА
  102:d=5 hl=2 l= 28 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  104:d=6 hl=2 l= 9 prim: ОБЪЕКТ :dhSinglePass-stdDH-sha1kdf-scheme
  115:d=6 hl=2 l= 15 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  117:d=7 hl=2 l= 11 prim: ОБЪЕКТ :id-smime-alg-CMS3DESwrap
  130:d=7 hl=2 l= 0 первичное значение: NULL
  132:d=5 hl=2 l= 97 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  134:d=6 hl=2 l= 95 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  136:d=7 hl=2 l= 51 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  138:d=8 hl=2 l= 45 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  140:д=9 гл=2 л= 43 минус: СЕТ
  142:d=10 hl=2 l= 41 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  144:d=11 hl=2 l= 3 prim: ОБЪЕКТ :commonName
  149:d=11 hl=2 l= 34 prim: PRINTABLESTRING :(УДАЛЕНО)
  185:d=8 hl=2 l= 2 prim: INTEGER :(УДАЛЕНО)
  189:d=7 hl=2 l= 40 prim: OCTET STRING [HEX DUMP]:847B0D796D954C05AF37E1AEFE11C7F6762FB8CE2A891AD22B5646E79E95B556EDEC5A240ACCC621
  231:d=3 hl=2 l= 51 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  233:d=4 hl=2 l= 9 prim: ОБЪЕКТ :pkcs7-data
  244:d=4 hl=2 l= 20 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ
  246:d=5 hl=2 l= 8 prim: ОБЪЕКТ :des-ede3-cbc
  256:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:9780611D4883D5B1
  266:d=4 hl=2 l= 16 prim: продолжение [ 0 ]
флаг cn
О, когда версия 3, она работает с использованием DH? Затем открытый ключ отправителя используется для расшифровки? Плюс кривая такая же, как у получателя?
dave_thompson_085 avatar
флаг cn
Нет, когда тег RecipientInfo равен 1, алгоритм согласования ключей определяется keyEncryptionAlgorithm, который OpenSSL определяет как (EC)DH; Версия KARI всегда равна 3, как указано в RFC5652 и RFC5753. Да, для DH в режиме E-S получатель использует эфемерный открытый ключ отправителя и свой собственный закрытый ключ для вычисления общего секрета и расшифровки; см. остальную часть раздела 3.1 в RFC5753, на который я вам указал. Да, для ECDH обе стороны используют одну и ту же кривую (или для любого типа DH одну и ту же группу).
флаг cn
Спасибо! :) Я собираюсь прочитать RFC5753 прямо сейчас

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.