邮件的加密

背景

电子邮件是一个非常常用的网络服务,我们的日常生活几乎已经离不开它。虽然我们有很多邮件供应商可以选择,比如 Hotmail、Gmail 等等,甚至可以自己搭建邮件服务,但是每一个供应商本质上是一个邮件服务中心,所有的收信、发信等操作都依赖它来进行,我们的所有数据、邮件内容也都是存在这个供应商的服务器上的。

这时,我们的隐私就有了潜在的暴露风险,我们的每一次私信,表面上是我们和收信人之间的秘密通信,实际上早就在邮件供应商的审视之下了。如果使用国内的邮件服务,我们甚至会因为内容中包含某些关键词而导致发信失败,两个人之间的私下沟通居然要受到第三方的监视和审查,真是可笑至极。

然而,邮件服务发展至今,我们已经很难改变这个模式,切换到另一种沟通模式意味着很大的迁移成本,往往是不切实际的。

好在我们还可以通过邮件客户端来实现端到端加密。

端到端加密

端到端加密(End-to-end encryption, E2EE),就是当 A 发邮件给 B 时,先在 A 处加密,然后通过传统的邮件服务发送给 B,B 拿到邮件后,再按照约定的方式解密,就能看到完整的邮件内容了。

一种常用的加密方式是使用 OpenPGP,有较多的客户端都可以支持。大致原理就是,A 和 B 各自拥有一对秘钥,包括对外公开的公钥和自己持有绝不公开的私钥,发信人可以用自己的私钥和对方的公钥对邮件进行加密,而收件人拿到邮件后也可以使用自己的私钥和对方的公钥进行解密。由于其他人无法得到他们的私钥,无法对邮件进行解密,所以不用担心隐私泄漏。具体原理涉及一些数学知识,有兴趣的读者可以自行了解。

到这里,我们可以简单地认为,端到端加密之后,我们的邮件就可以确保安全了,即使是邮件供应商也只能看到一堆密文,无法得知邮件的真实内容。

如何使用?

在使用客户端之前我们需要确保有自己的私钥和公钥,如果没有的话,可以使用 OpenPGP 创建。

此外我们还需要确保我们已经拿到了收件人的公钥并导入到 OpenPGP,这需要收件人也使用 E2EE 并且创建了自己的秘钥对。

如果成功导入秘钥并开启加密,那么在拥有对方公钥的情况下就可以选择发送加密邮件了。接下来看一下如何在客户端中开启端到端加密。

桌面客户端

Thunderbird 内置了 OpenPGP 加密功能,开箱即用,是桌面邮件客户端的不二选择。

先打开 Account Settings,选择要开启加密的账户下的 End-To-End Encryption,然后点击 Add Key...,导入已有的私钥即可。

发送邮件的时候,我们可以选择 Security 下面的 Require Encryption,即可发送加密邮件。

手机客户端

在手机端我们可以使用 K-9 Mail 配合 OpenKeychain 来使用,K-9 Mail 是一个邮件客户端,OpenKeychain 是一个秘钥管理器。

首先安装 OpenKeychain,并导入自己的私钥。需要注意的是,我们的各个端要使用同一个秘钥才能保证以同一个身份进行加解密。

然后打开 K-9 Mail,同样是在 Account settings 中进入 End-to-end encryption,启用加密,点击 Configure end-to-end key,此时应弹出 OpenKeychain 的窗口显示已导入的秘钥,选择当前邮箱账户对应的秘钥即可。

注:如果 OpenKeychain 的窗口无法弹出,比如在小米手机上,你可能需要给 OpenKeychain 开通弹窗权限。

配置好秘钥之后,K-9 Mail 就可以使用这个秘钥来收发加密邮件了。

限制

加密虽好,但是我们的使用成本上升了,这个方案也有一些不足之处:

  • 依赖特定客户端,不支持网页界面

    加密过程完全在客户端进行,所以我们必须通过支持加密的客户端来收发邮件,比如桌面端的 Thunderbird 和手机端的 K-9 Mail。如果我们登录网页客户端,看到的加密邮件则全是乱码,所以邮件供应商也无法获取我们的邮件内容。

    对于一些使用了自定义协议或者不希望我们使用第三方客户端的服务,我们可能会遇到一些麻烦,比如 GMail。

  • 需要固定密钥

    OpenPGP 的加密方式依赖了私钥,如果我们丢失或者更换了私钥,则将无法解密所有的加密邮件。因此我们需要妥善保管自己的私钥,而且可能需要在多个客户端之间共享。

类似产品

除了直接使用 OpenPGP 的秘钥对加密解密,还有一个叫 p≡p 的产品提供了另外一种思路的加密方案。它实现了自动管理秘钥,通过插件支持在 Thunderbird 中使用,手机端也有专门的客户端,而且会自动检测对方是否也启用了 p≡p,如果双方都支持则在后续邮件中自动开启加密。

这个方案在双方都配置好的情况下使用更加丝滑,几乎不用人工干涉。但是它的秘钥管理是通过邮件同步来实现的,每次启动任何一个客户端,都要创建和删除多封邮件以完成秘钥的同步,这对于很多免费的邮件服务来说是不太能接受的,毕竟一般的邮件供应商为了减少垃圾邮件都会对用户的发件数量和频率进行控制。

电子邮件已经成为了我们日常生活中几乎不可缺少的一个工具,通过端到端加密,我们可以在便利的基础上加上隐私保护,让我们在互联网的海洋里获得更多的自由。


© 2022