【问题标题】:Encrypt chat messages stored in Firebase Database加密存储在 Firebase 数据库中的聊天消息
【发布时间】:2019-07-09 08:55:50
【问题描述】:

我正在制作一个应用程序,其中聊天也是我使用 firebase 实时数据库的一项功能。尽管存储在 firebase 中的所有数据都是通过 SSL 进行的,但我希望即使是管理人员也无法看到这些消息。 我想通过使用公钥和私钥架构来实现端到端加密,但是将私钥存储在设备上并不好,因为在卸载手机时甚至在应用程序时都会创建新的私钥在其他设备中使用,以前的消息也不会被解密。

我也想过,如果新消息可以在生成时用新的私钥加密,并将以前的聊天记录存储在 google drive 或 iCloud 中作为备份,但由于这不完全是一个聊天应用程序,我认为这赢了不可行。

http://www.geero.net/2017/05/how-to-encrypt-a-google-firebase-realtime-database/

我也阅读了这篇文章,但关键还是在管理部门。

我应该如何进行?

【问题讨论】:

  • 在设备上使用 AES 加密和解密消息。
  • 谢谢。但这不会与其他设备同步。而且密钥必须发送给其他用户,如果我使用的是 firebase,我将不得不再次将其存储在数据库中。
  • 我不懂But that won't be in sync with other devices,您可以使用任何特定的密钥进行加密和解密。所以不需要存储在 Firebase 上
  • 您可以使用Android keystore 来保存您的密钥,并且在逆向工程的情况下不会受到攻击
  • 使用一个安全密钥的问题仅在于我作为开发人员以及管理人员将知道该密钥,因此也许将来有人可能会成为坏人。而且,如果我制作用户特定的密钥,那么最终我将不得不将它发送给我正在与之聊天的用户来解密它。现在,如果我必须发送它,我将不得不将它写入数据库。现在还假设我在解密该消息后删除了密钥,那么当用户再次安装应用程序时,我将如何解密整个聊天记录。

标签: android firebase encryption firebase-realtime-database


【解决方案1】:

虽然存储在 firebase 中的所有数据都是通过 SSL 进行的,但我希望即使是管理人员也无法看到这些消息。

已经有一些端到端的安全消息传递协议(例如Signal),您可以看看它们是如何工作的。

当应用在另一台设备上使用时,以前的消息也不会被解密

这就是端到端加密的价格。

您仍然可以以某种方式在多个设备之间分配私钥,例如用用户密码加密私钥,当用户仅在用户设备上进行身份验证时解密密钥(我只是在拍摄想法,如果足够安全,您可以考虑一下)

将以前的聊天记录存储在 google drive 或 iCloud 中作为备份

Viber 和 WhatsUp 正在这样做,问题是用户是否会足够信任您以授予您访问其云存储的权限

【讨论】:

    【解决方案2】:

    我建议您使用 AES 加密您的消息。而且您不应该将密钥存储在设备上。否则,用户可以使用 Diffie-Hellman 密钥交换算法进行密钥协商以生成共享密钥: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

    【讨论】:

    • 那么我应该将密钥存储在哪里?我无法将其存储在服务器上。
    • 您不需要存储密钥。 Alice 和 Bob 生成他们的共享密钥。 Alice 通过密钥加密消息并将其发送给 Bob。 Bob 使用共享密钥解密消息,并且可以读取解密的消息。如果需要,您可以将解密的消息保存在 Bob 的设备上。对于下一条消息 Bob 和 Alice 生成下一个共享密钥
    • 好吧,我明白了,假设我是 Alice,我必须将密钥发送给 Bob。使用 firebase 数据库发送密钥意味着将密钥写入该消息节点的某处,以便 Bob 可以获取该密钥来解密 msg。那么数据库中不是那个键吗?并且还假设我在解密最近的消息并将消息存储在本地数据库中后删除了密钥。那么用户卸载后再次安装应用程序的情况呢?由于密钥不存在,旧的聊天记录不会被解密。
    • 是的。在其他设备上安装应用程序后,您将无法从加密聊天中获取历史记录。但据我所知,这就是秘密聊天的工作方式。例如 Signal App 或 Telegram 不会同步来自“秘密聊天”的消息。此应用仅针对未加密的默认聊天存储历史记录。
    • 谢谢兄弟我明白了,你说得对。我的方法是错误的。
    猜你喜欢
    • 2018-09-30
    • 2013-03-04
    • 2017-11-02
    • 1970-01-01
    • 2017-02-10
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多