我想在 JAVA 中开发一个基于 SMIME 的应用程序。这些是我需要对 SMIME en/de-crypttion 进行更多说明的某些领域。
我了解在单个收件人的情况下如何进行消息加密和解密。

如果只有一个收件人

  • 用于加密消息内容的随机生成的 session key 。
  • 然后这个随机 session key 将使用接收者的公钥加密,然后发送 SMIME 消息。
  • 加密的消息将使用接收者的私钥解密并检索
    用于在接收方加密消息的 session key 。

  • 如果有多个收件人,则
  • 用于加密消息内容的随机生成的 session key 。
  • 如果消息被发送给多个接收者,对称 key 由每个接收者的公钥单独加密。封装的消息和所有加密的对称 key 使用 PKCS#7 格式打包在一起。
  • 然后这个随机 session key 将使用每个接收者的公钥加密,然后发送 SMIME 消息。

  • 如果多个接收者加密 session key 带有相同的消息,
  • 接收端的解密是如何完成的?
  • 接收方是否迭代所有加密的 session key 并尝试解密 session key ?
  • 如果有50个接收者,那么接收者是否需要解密所有接收者的密文以获得 session key ?

  • 谁能帮我找到任何有用的资源或为我的问题提供答案?

    最佳答案



    对称 session key 也可选地对发送方进行非对称加密。



    每个收件人都有一个块,其中包含加密 key 、所用证书的序列号等。



    不是这种情况。上面的步骤就够了。生成的对称 session key 需要对每个接收者(和发送者)进行非对称加密,而不是更多。

    它在 CMS RFC5652S/MIME RFC5751 中定义。 S/MIME 消息由 MIME 正文和 CMS 内容类型组成。对于每个收件人(和发件人),必须有一个 CMS RecipientInfo Type 。在这种类型中是加密 key 属于哪个接收者的信息。

    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
    

    由于这封邮件是为我自己加密的,因此该块被包含两次,作为发送者和接收者。



    接收方只需在 issuer 列表中搜索适当的 serial numberrecipientInfos 即可找到正确的加密 key 。

    关于email - 多个收件人的 SMIME 解密,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18953707/

    10-12 05:50