FOSS 项目聚焦:Tutanota,首个在 F-Droid 上提供应用程序的加密电子邮件服务

作者:Matthias Pfau

七年前,我们开始构建 Tutanota,这是一款加密电子邮件服务,专注于安全性、隐私和开源。早在斯诺登事件曝光之前,我们就感觉到需要易于使用的加密技术,让每个人都可以在线交流而不会被窥探。

""

图 1. Tutanota 团队的座右铭:“我们通过自动加密为隐私而战。”

作为开发人员,我们知道窥探在网络上传输的电子邮件是多么容易。电子邮件及其联合设置非常棒,这就是为什么它已成为在线交流的主要形式并且仍然如此。然而,从安全的角度来看,联合设置至少可以说很麻烦。

端到端加密电子邮件在台式机上难以处理(密钥生成、密钥共享、密钥的安全存储等等),在移动设备上几乎不可能。对于普通的、不太懂技术的互联网用户来说,有很多陷阱,不幸的是,做错事的可能性相当高。

这就是我们决定构建 Tutanota 的原因:一种安全易用的电子邮件服务,每个人都可以发送机密电子邮件,而不仅仅是技术专家。整个加密过程在用户设备本地运行,并且是完全自动化的。自动加密还使我们能够为 Android 和 iOS 构建完全加密的电子邮件应用程序。

最后,端到端加密电子邮件开始成为标准:从 Tutanota 发送的所有电子邮件中,已有 58% 是端到端加密的,并且该百分比还在不断上升

""

图 2. 现在每个人都可以在台式机和移动设备上轻松进行电子邮件加密。

摆脱谷歌的开源电子邮件服务

作为开源爱好者,我们的应用程序从一开始就是开源的,但将它们放在 F-Droid 上是一个挑战。与所有电子邮件服务一样,我们使用了 Google 的 FCM 进行推送通知。最重要的是,我们的加密电子邮件服务基于 Cordova,F-Droid 服务器无法构建它。

无法在 F-Droid 上发布我们的 Android 应用程序是我们开始重建整个 Tutanota Web 客户端的主要原因之一。我们是隐私和开源爱好者;我们自己也使用 F-Droid。因此,我们认为我们的应用程序必须在那里发布,无论付出多少努力。

在重建我们的电子邮件客户端时,我们确保不再使用 Cordova,并替换 Google 的 FCM 进行推送通知。

替换 Google 的 FCM 的挑战

GCM(或者现在称为 FCM,即 Firebase Cloud Messaging)是 Google 拥有的服务。不幸的是,FCM 包含 Google 的跟踪代码,用于分析目的,这是我们不想使用的。而且,更重要的是:要使用 FCM,您必须将所有通知数据发送给 Google。您还必须使用 Google 的专有库。

由于隐私和安全方面的担忧,我们没有在通知消息中发送任何信息。因此,推送通知仅提及您收到了新消息,但未提及该消息已放置在哪个邮箱中。

我们希望我们的用户能够在每个 ROM 和每个设备上使用 Tutanota,而无需第三方控制。这就是为什么我们决定接受挑战并自行构建推送通知服务。

当我们开始设计我们的推送系统时,我们设定了以下目标

  • 它必须是安全的。
  • 它必须是快速的。
  • 它必须是省电的。

我们研究了其他人(Signal、Wire、Conversations、Riot、Facebook 和 Mastodon)如何解决类似问题,我们考虑了几个选项,包括 WebSockets、MQTT、服务器发送事件和 HTTP/2 服务器推送。

我们最终选择了 SSE(服务器发送事件),因为它看起来是一个简单的解决方案。我的意思是“易于实现,易于调试”。调试这些类型的东西可能非常令人头疼,因此不应低估这个因素。支持该解决方案的另一个论点是相对省电。我们不需要上行消息,持续连接也不是我们的目标。

那么,什么是 SSE?

SSE 是一个 Web API,允许服务器向连接的客户端发送事件。这是一个相对较旧的 API,在我看来,它被低估了。在联合网络 Mastodon 之前,我们从未听说过 SSE,Mastodon 使用 SSE 进行实时时间线更新,并且效果很好。

协议本身非常简单,类似于良好的旧轮询。客户端打开连接,服务器保持打开状态。它与经典轮询的不同之处在于,我们将此连接保持打开状态以进行多个事件。服务器可以发送事件和数据消息,它们只是用新行分隔开。因此,客户端唯一需要做的就是打开一个具有较大超时时间的连接,并在循环中读取流。

SSE 比 WebSocket 更适合我们的需求(它更便宜,收敛速度更快,因为它不是双工的)。我们已经看到多个聊天应用程序尝试使用 WebSocket 进行推送通知,但它似乎并不省电。

我们已经有一些 WebSocket 经验,我们知道防火墙不喜欢保持活动连接。为了解决这个问题,我们对 SSE 使用了与对 WebSocket 相同的解决方法。我们每隔几分钟发送“心跳”空消息。我们使此间隔可从服务器端调整,并对其进行随机化,以免服务器不堪重负。

最后,我们不得不做一些工作——我可以描述我们为最终使其工作而必须克服的大量挑战,但也许在其他时间再说。然而,这完全值得。我们的新应用程序仍处于测试阶段,但由于非阻塞 IO,我们已经能够维护数千个并发连接而没有问题。我们的用户不再被迫使用 Google Play 服务,并且我们已经能够在 F-Droid 上发布我们的应用程序

作为旁注:如果用户可以在手机设置中选择“推送通知提供商”,并且操作系统自行管理所有这些困难的细节,那不是很好吗?这样,每个不想被平台所有者监管的应用程序都不必重新发明系统?它可以在应用程序和应用程序服务器之间进行端到端加密。这在技术上没有任何真正的困难,但只要我们的系统受大玩家控制,我们作为应用程序开发人员就必须自行解决这个问题。

Tutanota 是首个在 F-Droid 上提供的电子邮件服务应用程序

我们在 F-Droid 上发布应用程序真的让我们很兴奋,因为它证明了构建一个安全的电子邮件服务是可能的,该服务完全无 Google,为人们提供了真正的开源替代方案,以替代数据饥渴的市场领导者 Gmail。

这是一个了不起的步骤,因为到目前为止,还没有其他电子邮件服务设法(或关心)在 F-Droid 上发布其应用程序。其原因是,一般来说,电子邮件服务依赖于 Google 的 FCM 进行推送通知,这使得 F-Droid 发布变得不可能。

F-Droid 团队也欢迎我们朝着正确方向迈进

我们很高兴看到 Tutanota 对 F-Droid 和自由软件的热情,他们从头开始重写了他们的应用程序,以便可以将其包含在内。此外,他们采取特殊措施来避免跟踪您,并且安全性看起来很可靠,支持端到端加密和双因素身份验证。

我们对这次发布也非常兴奋。并且,我们感谢众多 F-Droid 志愿者为帮助我们在那里发布我们的应用程序所付出的奉献和辛勤工作。我们也为新的 Android 应用程序最终摆脱了与 Google 服务的任何联系而感到自豪。作为一项安全的电子邮件服务,这对我们非常重要。我们鼓励我们的用户抛弃 Google,因此,提供一个无 Google 的 Android 应用程序对我们来说是最低要求。

""

图 3. 新的 Tutanota 客户端带有深色主题——一个美观而简约的设计,让您可以轻松地将电子邮件消息加密发送到世界上的每个电子邮件地址。

面向所有人的以隐私为中心的电子邮件服务

我们自己已经使用 Tutanota 几年了。新的 Tutanota 客户端和应用程序速度很快,具有美观而简约的设计,支持加密数据搜索,并支持 2FA 和自动同步。自从我们添加了搜索功能以来,专业用途不再缺少主要功能,并且我们注意到新用户的数量不断上升。我们建议每个想要阻止第三方读取其私人电子邮件的人都试一试。

加载 Disqus 评论