首页 文章

如何在Firebase中加密用户数据

提问于
浏览
20

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

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

  • 用户使用凭据登录(由firebase本身处理)

  • 用户使用某些唯一密钥加密某些数据,这些密钥只能从凭证或仅为用户提供的某些数据生成,而不能由我生成 . (此密钥需要在会话之间或用户更改密码后保持不变 . )

  • 数据被保存到数据库中(我无法读取它,因为它是用用户凭据加密的)

  • 用户登录其他设备(可以立即生成解密密钥,并可以解密数据 . )

1 回答

  • 16

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

    • 用户A登录后,在手机上生成随机的公钥 . 例如:使用Ecc Curve25519

    • 来自A的私钥安全地存储在他的手机上

    • 来自A的公钥存储在firebase中,任何与A聊天的人都可以访问 .

    • 如果X向A发送消息,他从Firebase中从A获取公钥,在本地加密A消息,并将加密消息存储在A的收件箱中的firebase上

    • A从firebase下载加密的消息,并使用存储在手机上的私钥对其进行解密

    (反之亦然A至X)

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

    • 要求A定义一个强密码来加密其本地存储的私钥 . (或创建随机密码并使用QR码进行密钥交换)

    • 使用步骤1中的密码在本地加密私钥(例如:使用AES256)并将其上传到firebase . (可选用他的私钥签名)

    • 从A中下载第二台设备的加密私钥

    • 从A请求第二个设备上的密码并安全地存储私钥(可选用A中的公钥检查签名)

    • 如果不需要备份,请从firebase删除加密的私钥

相关问题