如何在Firebase中加密用户数据

NoN*_*ded 24 encryption firebase firebase-authentication firebase-realtime-database

我正在使用Firebase的电子邮件/密码登录方法.我想将用户保存到实时数据库中的数据加密,然后再将其发送到数据库.Firebase已经处理了用户密码,但是我能以某种方式使用它来加密无法仅由客户端解密的数据吗?如果我能用客户端sdk实现它会很好.

所以我的流程将是这样的:

  1. 用户使用它的凭据登录(由firebase本身处理)
  2. 用户使用一些唯一密钥加密某些数据,这些密钥只能从凭证或仅为用户提供的某些数据生成,而不能由我生成.(此密钥需要在会话之间或用户更改密码后保持不变.)
  3. 数据被保存到数据库中(我无法读取它,因为它是用用户凭据加密的)
  4. 用户登录其他设备(可以立即生成解密密钥,并可以解密数据).

Hol*_*ger 21

您可以通过以下方式轻松完成:

  1. 用户A登录后,在他的手机上生成随机的公钥.例如:使用Ecc Curve25519
  2. 来自A的私钥安全地存储在他的手机上
  3. 来自A的公钥存储在firebase中,任何与A聊天的人都可以访问.
  4. 如果X向A发送消息,他从Firebase中获取A的公钥,在本地加密A的消息,并将加密的消息存储在A的收件箱中的firebase上.
  5. A从firebase下载加密的消息,并使用存储在手机上的私钥对其进行解密

(反之亦然A至X)

如果A想要移动到另一部手机或想要使用多部手机,您可以这样做:

  1. 要求A定义一个强密码来加密他本地存储的私钥.(或创建随机密码并使用QR码进行密钥交换)
  2. 使用步骤1中的密码在本地加密私钥(例如:使用AES256)并将其上传到firebase.(可选用他的私钥签名)
  3. 从A中下载第二个设备的加密私钥
  4. 从A请求第二个设备上的密码并安全地存储私钥(可选用A中的公钥检查签名)
  5. 如果不需要备份,请从firebase删除加密的私钥

  • 它在答案的第二部分中描述 (2认同)
  • 不可以,公钥只能用于加密,不能用于解密。用于解密的私钥不存储在 firebase 上, (2认同)