如何在Firebase中加密用户数据

时间:2016-07-11 10:08:07

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

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

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

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

1 个答案:

答案 0 :(得分:18)

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

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

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

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