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

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

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

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

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

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

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

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

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


person Javad Shareef    schedule 23.09.2013    source источник


Ответы (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, чтобы найти правильный зашифрованный ключ.

person xoryves    schedule 05.02.2016