Расшифровка SMIME для нескольких получателей

Я предполагаю разработать приложение на основе SMIME в JAVA. Это определенные области, где мне нужно больше разъяснений по поводу дешифрования SMIME. Я понял, как работает шифрование и дешифрование сообщений в случае одного получателя.

Если есть только один получатель

  • Случайно сгенерированный сеансовый ключ, используемый для шифрования содержимого сообщения.
  • Затем этот случайный ключ сеанса будет зашифрован с использованием открытого ключа получателя, а затем отправит сообщение SMIME.
  • Зашифрованное сообщение будет расшифровано с использованием личного ключа получателя и получит сеансовый ключ, используемый для шифрования сообщения на стороне получателя.

Если есть несколько получателей, то

  • Случайно сгенерированный сеансовый ключ, используемый для шифрования содержимого сообщения.
  • Если сообщение отправляется нескольким получателям, симметричный ключ шифруется отдельно открытым ключом каждого получателя. Конвертированное сообщение и все зашифрованные симметричные ключи упакованы вместе в формате PKCS#7.
  • Затем этот случайный ключ сеанса будет зашифрован с использованием открытого ключа каждого получателя, а затем отправит сообщение SMIME.

Если несколько получателей зашифрованного сеансового ключа приходят с одним и тем же сообщением,

  • Как происходит дешифрование на стороне приемника?
  • Получатель выполняет итерацию всех зашифрованных сессионных ключей и пытается расшифровать сессионный ключ?
  • Если получателей 50, то должен ли получатель расшифровывать весь зашифрованный текст получателя для ключа сеанса?

Может ли кто-нибудь помочь мне найти полезный ресурс или дать ответ на мой вопрос?

1 ответ

Если сообщение отправляется нескольким получателям, симметричный ключ шифруется отдельно открытым ключом каждого получателя.

Симметричный сеансовый ключ также может быть асимметрично зашифрован для отправителя.

все зашифрованные симметричные ключи упакованы вместе

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

Затем этот случайный ключ сеанса будет зашифрован с использованием открытого ключа каждого получателя, а затем отправит сообщение SMIME.

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

Это определено в CMS RFC5652 и S/MIME RFC5751. Сообщение S/MIME состоит из тел MIME и типов контента CMS. Для каждого получателя (и отправителя) должна быть CMS RecipientInfo Type, В этом типе указывается информация, какой ключ шифрования принадлежит какому получателю.

openssl cms -inform smime -in Test_enc.mbox -cmsout -print
CMS_ContentInfo: 
  contentType: pkcs7-envelopedData (1.2.840.113549.1.7.3)
  d.envelopedData: 
    version: <ABSENT>
    originatorInfo: <ABSENT>
    recipientInfos:
      d.ktri: 
        version: <ABSENT>
        d.issuerAndSerialNumber: 
          issuer: C=.., ST=.., L=.., O=.., OU=.., CN=..
          serialNumber: 16756039346226544442
        keyEncryptionAlgorithm:
          algorithm: rsaEncryption (1.2.840.113549.1.1.1)
          parameter: NULL
        encryptedKey:
          0000 - 07 b9 dc b8 97 ed ea b0-8f 9c 30 fa 0c f6 a0   ..........0....
          ...
          01fe - f0 62                                          .b

      d.ktri: 
        version: <ABSENT>
        d.issuerAndSerialNumber: 
          issuer: C=.., ST=.., L=.., O=.., OU=.., CN=..
          serialNumber: 16756039346226544442
        keyEncryptionAlgorithm:
          algorithm: rsaEncryption (1.2.840.113549.1.1.1)
          parameter: NULL
        encryptedKey:
          0000 - 07 b9 dc b8 97 ed ea b0-8f 9c 30 fa 0c f6 a0   ..........0....
          ...
          01fe - f0 62                                          .b

Поскольку это письмо было зашифровано для меня, блок включен дважды, как отправитель и получатель.

  • Как происходит дешифрование на стороне приемника?
  • Получатель выполняет итерацию всех зашифрованных сессионных ключей и пытается расшифровать сессионный ключ?
  • Если получателей 50, то должен ли получатель расшифровывать весь зашифрованный текст получателя для ключа сеанса?

Получатель должен только искать соответствующий issuer а также serial number в recipientInfos список, чтобы найти правильный зашифрованный ключ.

Другие вопросы по тегам