【问题标题】:Is it necessary to encrypt chat messages before storing it into firebase?是否有必要在将聊天消息存储到 Firebase 之前对其进行加密?
【发布时间】:2023-03-24 01:12:01
【问题描述】:

据我所知,Firebase 通过 HTTPS 连接发送数据,因此数据已经被加密。虽然 Firebase 提供了安全规则来保护我的数据结构,但我仍然可以看到数据库中的字符串消息。

我只是好奇在将数据推送到 Firebase 之前加密消息是否是个好主意。 我应该从这个话题转到别的话题吗?

谢谢。

【问题讨论】:

  • 感谢@JeffMinsungKim 提出的问题...您让我搜索相同问题变得更加容易。
  • @Phillip Jacobs 没问题,伙计。我是一个感谢你的好话的人。 :)

标签: firebase encryption firebase-realtime-database firebase-security


【解决方案1】:

您似乎很了解 Firebase 数据库的工作原理:data is encrypted in transit,它是 stored on encrypted disks on the servers。如果您在设备上启用本地持久性,on device data is not encrypted.

但应用的管理员可以在 Firebase 控制台中查看数据。如果您的应用要求管理员无法读取此数据,那么您需要先在客户端对其进行加密,然后再将其发送到 Firebase。不久前,一位开发人员解释了他们的end-to-end encrypted chat on the firebase-talk mailing list

【讨论】:

  • 非常感谢您的深入回答,弗兰克。它帮助我一次理解了很多东西。
  • 很高兴听到杰夫。我期待看到您的端到端加密解决方案(以及该领域未来问题的答案)!
【解决方案2】:

Hey Jeff:您是对的,当您将一些数据写入 Firebase/Firestore 时,数据:

  1. 使用 HTTPS 通过网络进行保护。
  2. 然后,当它登陆 Firebase REST 前端服务器时,HTTPS 终止并且服务器可以访问完整的负载
  3. 然后 REST 服务器将数据路由到后端/数据库,后者也可以访问数据。
  4. 当数据写入磁盘时,它是静态加密的,但静态加密密钥也可供 Google 使用,您的管理员也将看到 Firestore 内容

加密数据客户端(端到端加密)禁止所有这些参与者/角色看到您的数据。

在客户端加密数据相当简单(跨移动平台和浏览器的兼容性很棘手)。另一个棘手的部分是密钥管理,以使一个用户能够访问解密密钥,而其他用户不会在不安全的通道中发送密钥。

你可以实现的方式是:

  1. 在您注册用户时为他们创建私钥和公钥
  2. 使用用户 2 的公钥加密用户 1 设备上的数据
  3. 将加密数据写入 Firestore
  4. 当用户 2 读取加密数据时,她的私钥将能够解密它。

在 GitHub 上查看适用于 iOS 的 Firebase E2EE 聊天示例:https://github.com/VirgilSecurity/demo-firebase-ios 和 Android:https://github.com/VirgilSecurity/demo-firebase-android

HTH, 大卫

【讨论】:

  • 哇...非常好的答案
  • 按照你的步骤我认为问题是你在哪里存储用户注册时的私钥和公钥?在数据库中还是在本地设备上?
  • 我的想法是将每个用户的公钥存储在 Firestore 中,并使用 flutter_secure_storage 或 biometric_storage 将他们的私钥本地存储在他们的设备上。
猜你喜欢
  • 2019-07-09
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
相关资源
最近更新 更多