如何制作类似于 Signal 的真正安全的消息应用程序?
已发表: 2021-10-05在线交流的隐私和安全是当今的热门话题,这是有原因的。 由于我们知道如何创建加密应用程序,因此我们想在本文中分享我们的经验并提供提示。 我们将讨论行业现状、加密方法和可能的风险。 如需估价,请滚动至文章末尾。
发生了什么?
2021 年初,全球最受欢迎的即时通讯应用 WhatsApp 推出了新的服务条款。 他们引起了轩然大波,部分原因是混乱。 之后,特斯拉 CEO 埃隆马斯克是 Facebook(WhatsApp 归 Facebook 所有)的知名批评者,他建议他的 4250 万推特粉丝改用之前不太知名的信使 Signal。
使用信号
— 埃隆·马斯克 (@elonmusk) 2021 年 1 月 7 日
在这条推文之后, Signal——顺便说一句, WhatsApp本身使用的加密系统——用户激增。 这种激增是如此之大,以至于服务器难以应对。 Signal 的开发人员设法处理了这种情况,但它表明对安全消息传递系统的需求正在上升。 现在,每个人都想知道如何创建像 Signal 这样的应用程序。 这让我们看到了这篇文章。
拥有安全的即时通讯工具意味着什么?
当今大多数即时消息应用程序都使用端到端加密。 它是什么? 下面以聊天应用程序架构图为例:
简而言之,一个典型的信使具有三个主要相互关联的部分:
发件人的设备
服务器
收件人的设备
消息由发送方通过服务器发送给接收方。 如果没有加密,此消息将作为纯文本传输,因此任何人都可以在传输过程中的任何时候读取它。 通过加密,消息从纯文本转换为密文(使用密钥加密)以进行传输,然后在接收方的设备上使用配对密钥转换回(解密) 。
端到端加密意味着加密密钥存储在两端,即存储在用户的设备上,而不是存储在服务器上。 这使得除了发送方和接收方之外的任何人都无法阅读消息。 甚至拥有服务器的服务提供商也无法访问它们。 为了破解这些消息,黑客需要访问用户的设备,因为入侵服务提供商的服务器几乎没有用。
端到端加密的弱点是它容易受到所谓的中间人(MITM) 攻击。 熟练的 MITM 黑客可以破解存储在服务器上的公钥,并配置系统以将黑客识别为合法的接收者,从而允许黑客窃听对话,甚至代替预期的接收者参与其中。
为了对抗 MITM 攻击,Signal 开发人员使用双棘轮算法进一步升级了他们协议的端到端加密。 除了用户安装应用程序时创建的公钥和私钥之外,此算法还会创建会话密钥。 为每条发送的消息创建会话密钥,并在会话完成时(即收到消息时)自毁,如果黑客设法获得一个会话的密钥,则无法解密所有消息。
WhatsApp 对其所有消息使用端到端加密。 实际上,它使用的是 Signal 自己的加密协议。 那么它现在有什么问题呢?
端到端加密的不同方法
WhatsApp 确实无法窥探您的消息内容,也无法监听您的应用内通话。 但是,WhatsApp 使用的 Signal 加密协议版本仅加密消息的内容。 这意味着 WhatsApp 以及 Facebook 以及他们决定与之共享信息的任何人都可以看到您在与谁交谈,何时何地。 此元数据可以揭示有关对话中所有参与者的非常私人的信息。
与此同时,Signal 应用程序也使用了一种更新的协议来对元数据进行编码,任何人——甚至包括应用程序的所有者——都无法在不直接访问用户设备的情况下对其进行解码。
此外,根据 Signal 的隐私政策,几乎没有元数据永久存储在他们的服务器上——只有在收到消息所需的时间。 然后删除除用户上次登录日期以外的所有内容。
唯一这样做的其他信使应用程序是 Telegram。 但是,在 Telegram 中,端到端加密仅适用于秘密模式,默认情况下不适用于所有聊天。 Telegram 上的一般消息没有很好地加密。 至少 Telegram 拒绝与任何人分享此类信息,无论是政府还是广告商。
今天,消息应用程序安全是一个巨大的话题——信使无法或不愿意与政府分享用户信息经常会受到限制和禁令。 例如,Telegram 在其创建者的故乡俄罗斯已被禁止; 阿拉伯联合酋长国已禁止所有非国有 VoIP 服务。 作为回应,世界各地的人们都需要更安全的通信方式,并且安全移动消息应用程序市场正在增长。
那么如何制作一个安全的信使呢?
大多数人至少使用一个信使,可能是几个,信使应用程序的基本功能集几乎不会让您感到惊讶。 因此,我们将在本节中进行简要介绍。 以下是安全聊天解决方案的功能表:
特征 | 描述 |
---|---|
入职 | 简要介绍您的应用程序; 越短越好,但要使其易于理解。 |
注册登录 | 信使帐户通常与电话号码相关联。 |
用户资料 | 个人资料存储用户的个人信息和重要功能(如联系人、设置和常见问题解答)的链接。 |
设置 | 允许用户为方便起见调整信使。 |
通知 | 在信使应用程序中,必须有一个可靠的即时通知系统。 |
文字聊天 | 需要现代消息传递应用程序来支持一对一聊天和群聊。 |
文件传输 | 用户需要能够交换文本消息以及共享图像和文档。 |
语音聊天/通话 | VoIP 功能在今天与发短信一样重要。 即使互联网速度较慢,高质量的声音也需要稳定的连接。 |
自毁消息 | 即使使用 Signal 协议,如果有人拿到用户的手机,他们可以看到所有以前的消息,除非用户删除它们。 您可以为用户添加一个选项来设置计时器以销毁消息和/或媒体文件。 |
同步 | 大多数人拥有不止一台安装了通信应用程序的设备。 为了让用户能够在他们认为合适的设备之间顺利切换,您需要提供同步功能。 |
两步验证 | 为了在设备被盗时更好地保护用户数据,请通过指纹、密码、PIN 码或验证码或链接提供两步验证。 |
如果您想构建一个与众不同的点对点消息传递应用程序,请考虑以下功能:
贴纸和 GIF。 如今,其他所有 Messenger 都将流行的 GIF 服务 Giphy 集成到其界面中,以补充表情符号。 当 Telegram 开始免费提供贴纸时,贴纸开始流行(例如,与 Viber 不同,后者只有一些贴纸是免费的)。
秘密/私人聊天。 无论您是否对用户的元数据进行加密,在当今暴风雨般的现实中,消失或可锁定聊天可能会成为您应用的卖点。 例如,Telegram 提供的秘密聊天会在您在设备上退出 Telegram 时自动消失。 这些聊天内容不会存储在 Telegram 的云服务器上,因此即使您在多台设备上登录也无法备份或同步。
视频聊天。 2020 年,由于大流行而被迫远程工作的人数众多,视频会议工具的受欢迎程度大幅上升。 许多人对现有的流行通讯工具缺乏视频通话——一对一和群组通话——感到遗憾。 它绝不是必须具备的功能,但它肯定会受到用户的欢迎。
如何保护消息传递应用程序
后端是信使发生奇迹的地方。 后端专家负责您的聊天应用程序的安全性和可靠性,因为他们知道如何加密消息。
有多种方法可以实现端到端加密并使通信应用程序安全。 通常,加密的消息存储在信使的服务器上——云服务器更安全,因此推荐用于此目的——并且解密密钥只能从用户的设备中获得,以避免在服务器被黑客入侵时发生数据泄露。
也可以完全放弃将消息存储在您的服务器上并将它们存储在用户的设备上。 但这意味着您的用户将无法恢复他们的消息历史记录,以防他们登录的设备丢失或删除应用程序。 在设备之间同步消息也是不可能的。
要制作像 Signal 这样的安全消息传递应用程序,您实际上可以使用 Signal 本身的加密消息传递 API 。 Signal 的开源加密协议在构建 Messenger 的开发人员中最受欢迎,因为它不断接受同行审查和审计。 在撰写本文时,以下信使使用 Signal 的协议来加密其消息的内容:
- 微信
- Facebook Messenger(仅限秘密聊天)
- Skype(仅限私人对话)
- Android 版 Google 信息 (SMS)
Telegram 使用自己的 256 位对称 AES 加密算法,称为 MTProto 进行秘密聊天。 但是,该算法是闭源的,因此 Telegram 受到了广泛批评。
制作安全消息应用程序的成本
制作任何应用程序的成本在很大程度上取决于开发所需的时间。 就功能的数量而言,信使似乎并不太复杂; 但是,对于加密良好的消息传递应用程序而言,仅后端可能需要大约 520 小时才能构建。
信使后端的常用编程语言选项是Elixir 或 Erlang — Ruby on Rails 不是文本消息、媒体和音频/视频通话形式的大量数据的好选择。 WhatsApp 使用 Erlang,而 Elixir 使用的是 Discord。
在Mind Studios ,我们开发了一个带有基于 Elixir 的后端的信使应用程序。 但是,Elixir 本身是基于 Erlang 并混入了一些 Ruby,因此经验丰富的 Elixir 开发人员也可以使用 Erlang 编写代码。
以下是我们对开发安全消息传递应用程序所需时间的看法:
业务分析和创建规范 — 96 小时以上
UI/UX 设计 — 168+ 小时
iOS 客户端移动应用程序 — 具有最重要功能的 MVP 需要450 多个小时
后端开发 — 520 多个小时
iOS 应用测试 — 约240 小时
Android 开发所需的时间略少于 iOS 开发,但由于设备种类繁多,测试所需的时间更长。
根据这个粗略的时间估算,构建一个真正安全的聊天应用程序的成本将从 51,590 美元起,并且会增加额外的功能。
结论
安全信使特别重要,对它们的需求今天很高,明天会更高。 但竞争也是如此。 并非每家公司都可以制作加密的消息传递应用程序。 要开发像 Signal 这样的安全即时消息应用程序,您需要在这个领域有经验的开发人员。
在设计方面,您还需要跟上行业领导者的步伐。 Signal 应用程序很简单,并不以其直观性而闻名,但它赢得了关心隐私而不是花里胡哨的用户。 另一方面,WhatsApp 和 Telegram 看起来很花哨,除了安全之外还非常直观(虽然它们的安全性可能与 Signal 不在同一级别,但仍然令人印象深刻)。 因此,要在这个细分市场中大放异彩,您的自定义应用程序需要既安全又用户友好。 平衡这些要求不是小事。 但是有了合适的团队,这是可能的。