安全推送通知:从理论到实践

嘿哈布尔!

今天我将谈论我和我的同事几个月来一直在做的事情:移动即时通讯工具的推送通知。 正如我已经说过的,在我们的应用程序中,主要重点是安全性。 因此,我们发现推送通知是否有“弱点”,如果有,我们如何消除它们,以便将这个有用的选项添加到我们的服务中。

我正在出版我们的翻译 来自 Medium 的文章 我自己做了一些小补充。 它包含“调查”的结果以及有关如何解决问题的故事。

我们检查材料

在经典模型中,推送通知使消息使者容易受到 MITM(中间人)攻击。 例如,对于 Google、Microsoft 和旧版本的 iMessage,应用程序会将加密密钥发送到 Apple 服务器 - 在服务器上,对用户进行身份验证,并对消息标头(或其内容)进行解密。

安全推送通知:从理论到实践

因此,有机会通过访问推送通知服务器来读取信件。 这意味着任何通信加密都是无用的:推送通知仍然有被第三方读取的可能性。 文章的作者更详细地讨论了这种可能性。 “正确加密” 在 Xaker.ru 上,致力于加密消息的方法。

如果您认为 Apple 和 Google 服务器 100% 安全,不会泄露用户加密密钥,请考虑一下他们的员工可以访问这些服务器的事实。 员工也是人。
尽管推送通知存在诸多漏洞,但许多“安全”即时通讯工具(包括 Signal 和 Telegram)都使用它们。 否则,用户将不得不通过不断登录应用程序来“手动”监控新消息。 这非常不方便,而且相互竞争的信使会获得优势。

偏执和常识


在我们的项目中,我们几个月前就密切关注过这个问题。 我们需要添加推送通知选项以保持竞争力。 但同时,不要打开安全漏洞,因为任何数据泄露都会破坏对项目的信心。

然而,我们已经拥有一个重要的优势:我们的信使是去中心化的(数据存储在区块链上),员工无权访问帐户。 只有用户拥有加密密钥,对话者的公钥可在区块链上获取,以防止 MITM 攻击。

在推送通知的第一个版本中,我们决定尽可能安全,根本不传输消息文本。 推送服务没有从节点接收到消息的文本,而只是收到了有关其已收到的事实的信号。 因此,用户看到“新消息已到达”通知。 只能在 Messenger 中阅读。

安全推送通知:从理论到实践
工作原理:视频.

之后,我们了解到苹果最新版本的通知具有新的安全功能。 他们 已发布 UNNotificationServiceExtension,允许开发人员通过 APNS 发送完全加密的通知数据。 然后,最终用户设备上的应用程序执行解密(或下载其他数据)并显示通知。 我们将其作为第二版推送通知的基础。

我们现在已经开发了 iOS 推送通知的第二个版本,它允许您显示消息文本而不存在安全风险。 在新概念中,逻辑如下:

  • 推送服务发送带有交易号的推送通知(加密消息可能非常大,并且通知的大小非常有限)
  • 当设备收到通知时,它会启动我们的NotificationServiceExtension - 一个微应用程序,通过ID从节点请求事务,使用保存的密码对其进行解密,并向系统发送新的通知。 密码存储在安全存储器中。
  • 系统显示带有解密消息或翻译的通知。
  • 密钥不会去任何地方,就像纯文本消息一样。 推送服务无法解密消息。

安全推送通知:从理论到实践

我们接受了该版本,并在 iOS 应用程序的最新更新中实现了它。
对技术方面感兴趣的可以查看源代码: github.com/Adamant-im/adamant-notificationService.

来源: habr.com

添加评论