S/MIME public 电子邮件的密钥加密和签名说明

S/MIME for public key encryption and signing of email explained

我正在尽最大努力了解这是如何工作的。看了很多文章,总是一头雾水

据我有限的理解,发件人和收件人都必须在其客户端安装由证书颁发机构提供的 key/certificate。但是发件人和收件人的邮件客户端如何使用这些证书呢?

这里有一个让我感到困惑的具体例子,来自维基百科 (https://en.wikipedia.org/wiki/S/MIME):

While it is technically possible to send a message encrypted (using the destination party certificate) without having one's own certificate to digitally sign, in practice, [...]

因此,发件人邮件客户端应该能够使用收件人证书加密邮件。在实践中,发件人邮件客户端如何仅从收件人的邮件地址推断出收件人证书是什么?发件人和收件人的邮件客户端是否相互“ping”并以某种方式交换此信息?是从电子邮件地址的域推断出来的吗?或者电子邮件客户端的用户是否希望事先交换这些信息?

你问了几个问题。那可能是因为你很困惑。让我试着解决问题。

用于加密目的

  • 发件人使用收件人的public密钥(来自收件人的public证书)加密电子邮件
  • 收件人然后使用他们自己的私钥 解密电子邮件

用于签名目的

  • 发件人使用他们自己的私钥 签署 电子邮件
  • 收件人然后使用发件人的public密钥(来自发件人的public证书)来验证签名

兑换public证书

  1. Alice 向 Bob 发送了一封签名但未加密的电子邮件
  2. 签名包括 Alice 的 public 证书
  3. Bob 可以从邮件中提取 Alice 的 public 证书
  4. Bob 信任 Alice 的证书,因为它是由受信任的机构签署的 *)
  5. Bob 现在可以验证包括证书在内的签名
  6. Bob 现在可以向 Alice 发送加密的电子邮件

*) 每个操作系统都带有大量预先信任的证书颁发机构

Bob 还通过在回复 Alice 时签署电子邮件来共享他自己的证书。之后,双向都可以加密。

其他

维基百科的引述涉及不同的方面:

如果 Alice 向 Bob 发送加密邮件,Alice 使用 Bob 的 public 密钥加密邮件,因此只有 Bob 可以解密。但这也意味着 Alice 无法解密她自己的电子邮件(它存储在她的 'sent' 文件夹中)!

将未加密的电子邮件存储在 Alice 的 'sent' 文件夹中将是严重的安全漏洞,那么可以做什么呢?可以为 、收件人 Bob 和发件人 Alice 加密电子邮件。

现在如何使用多个加密密钥对一封电子邮件进行加密?

邮件实际上没有用 Bob 的密钥加密,而是

  1. 选择随机密钥来加密电子邮件内容
  2. 随机密钥用 Bob 的密钥加密并添加到消息中
  3. 随机密钥也用 Alice 的密钥加密并添加到消息中

然后解密,使用收件人的私钥对随机密钥进行解密,然后使用解密后的密钥对电子邮件内容进行解密。

在这种情况下,随机密钥称为 'content encryption key' 或 CEK,而个人密钥称为 'key encryption keys' 或 KEK。

还有另一个使用 CEK 的原因 - 这与对称加密比非对称加密更快和更具可扩展性有关 - 但这是另一个故事,应该在另一个问题的答案中讲述。