首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个接收者的SMIME解密

多个接收者的SMIME解密
EN

Stack Overflow用户
提问于 2013-09-23 07:20:07
回答 1查看 3K关注 0票数 5

我应该用JAVA开发一个基于SMIME的应用程序。在这些领域,我需要对SMIME en/ clarification做更多的澄清。我理解在单个接收者的情况下如何进行消息加密和解密。

如果只有一个收件人,则为

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

如果有多个收件人,那么

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

如果多个接收者加密的会话密钥带有相同的消息,

  • 如何在接收端解密?
  • 接收方是否迭代所有加密的会话密钥并尝试对会话密钥进行解密?
  • 如果有50个收件人,那么接收方是否需要解密所有收件人的加密文本以获取会话密钥?

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

EN

回答 1

Stack Overflow用户

发布于 2016-02-05 10:55:34

如果要向多个收件人发送邮件,则对称密钥将由每个收件人的公钥单独加密。

对称会话密钥也可选择不对称地为发送方加密。

所有加密的对称密钥都打包在一起。

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

然后使用每个接收者的公钥加密这个随机会话密钥,然后发送SMIME消息。

事实并非如此。以上步骤就足够了。生成的对称会话密钥需要对每个收件人(和发送方)进行非对称加密,而不是更多。

它是用CMS RFC5652S/MIME RFC5751定义的。S/MIME消息由MIME主体和CMS内容类型组成。对于每个收件人(和发送方),必须有一个CMS RecipientInfo Type。在这种类型中是加密密钥所属的信息。

代码语言:javascript
复制
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 numberrecipientInfos,就可以找到正确的加密密钥。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18953707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档