firebase - 如何实现 Firestore 数据加密?
问题描述
实际上,我在 ReactJs 中有一个 SPA + 在 Flutter 中有一个移动应用程序 + 在一个单独的服务器上运行 SailsJs 开发的一个 REST API。当我们使用有效信息(ID/密码)登录时,我使用 API 发回的 Firebase 身份验证生成的安全会话 cookie 管理用户身份验证。
现在,我想在 Firestore 数据库中加密高度敏感的数据(药物、治疗方法、患者),以便在发生入侵时或通过基本管理员访问生产数据库的控制台时,没有人可以清楚地看到数据。
考虑到客户端和 API 服务器之间的连接是通过 HTTPS 进行的,我是否需要在客户端级别加密数据?或者我可以在将接收到的正文存储在 Firestore 之前在 api 级别加密它并在 GET 端点解密加密的数据吗?
我的想法是在用户注册时使用 AES 生成加密密钥,并将其存储在来自欧洲/法国托管公司的另一个数据库中,以避免美国云法案或其他任何风险(来自 Firebase 身份验证的用户 ID <-> 加密钥匙)。这是个好主意吗?我可以选择哪些其他解决方案来安全地存储和使用我的用户的加密密钥?
谢谢你的帮助。
解决方案
考虑到客户端和 API 服务器之间的连接是通过 HTTPS 进行的,我是否需要在客户端级别加密数据?或者我可以在将接收到的正文存储在 Firestore 之前在 api 级别加密它并在 GET 端点解密加密的数据吗?
如果您在自定义 API 中加密/解密数据,该 API 将需要访问加密密钥。虽然机会很小,但这确实意味着可以从这里获取密钥,然后用于破坏数据。
如果您在客户端代码中加密/解密数据,则只有该代码需要访问这些密钥。如果您随后通过某种带外机制交换密钥,这些密钥不会一路存储在您的服务器上,那么任何有权访问这些服务器的人都无法解密数据。
推荐阅读
- java - Spring boot webjars 未生成,返回 Http 406
- git - 没有相同模式时如何在subgit中排除多个分支
- css - 导航项目因未知原因闪烁
- python - 如何在我自己的 Facebook 页面 (graph-api) 上发布而不在 Facebook 开发人员上创建应用程序
- android - RGBAW 中与 ColorMatrix 相关的“W”值的上下文是什么?
- amazon-web-services - terraform aws - 如何将默认路由添加到 vpc 默认路由表?
- javascript - 悬停时显示随机图像
- python - Python 简单代码我无法修复 help1!1
- typescript - 如何在纯 javascript 中访问 typescript 模块?
- kubernetes - 如何使用 Traefik 和 Kubernetes 启用客户端证书身份验证?