如何在 Firebase(客户端)中加密文件存储?
How to encrypt file storage in Firebase (client-side)?
我正在构建一个 Electron 应用程序并实现云存储支持。用户可以将我的应用程序中的文件上传到他们的帐户。作为管理员,我不想通过 Firebase 管理控制台读取文件。我还想避免使用用户密码,因为人们可能会忘记它。只需登录他们的帐户就足以访问他们的文件。
在我的原型中,我将用户文件存储在 data/${user.uid}/
中。但是现在我卡住了,不知道应该使用哪个密码来加密文件。
围绕这个主题有一些问题涉及 DigitalOcean
,这对于我正在做的事情来说看起来太过分了。有没有其他我可以用作密码的东西,它是用户对象的一部分,不会在其他任何地方公开?
我在 Firebase 的文件存储中遇到了客户端加密的多个选项。加密本身很简单,可以使用对称密钥(一种既可以加密数据又可以解密加密数据的密钥)对现有库执行。正如通常的问题一样,我们现在需要找到一个安全的地方来存储这个全能的密钥。
选项 1:在用户设备上存储密钥
优点:这将密钥存储在用户的设备上,因此密钥永远不会在应用程序服务器中。
缺点:无法从其他设备访问密钥以及数据。根据用例和情况,这不是一个糟糕的解决方案。
选项 2:Google Key Management Service for Encryption
优点:使用存储在 Google 密钥管理服务中的另一个数据密钥对密钥进行加密。用户的密钥对数据进行加密,然后密钥通过KMS密钥加密并存储在数据库中。正如 Andy 在他的 blog 中正确指出的那样,KMS 密钥属于 Firebase 数据库的不同 Google 帐户,因此任何用户都无权读取数据和解密数据。黑客需要破坏这两个帐户才能访问未加密的数据。
缺点:用户必须管理两个帐户。
选项 3:Stash the Key in User’s Google Account
优点:当用户登录时,我们会从用户的 Google 帐户中获取 OAuth 凭据以请求用户的个人加密密钥,或者如果找不到则创建一个。这样,密钥始终完全掌握在用户手中,但他们永远不必直接处理它。 Google Drive 提供了一个 API 用于创建特殊的应用程序数据文件夹(在 OAuth 期间需要用户同意)。此文件夹的内容对用户不可见,只能通过应用程序的凭据访问。
缺点:用户必须小心不要意外删除自己的加密密钥。
选项 4:Asymmetric Key Pair
优点:用户首先获得收件人的 public 密钥。然后他为自己生成一个对称密钥,用它来对文件进行编码。然后,他为每个收件人创建此对称密钥的副本,并使用各自的 public 密钥对其进行加密。最后,他将对称密钥的加密副本与加密文件一起传输到服务器并存储它们 there.If 另一个用户想要下载文件,他以加密形式连同对称密钥副本一起获得那是为他加密的。他可以使用他的私钥解密后者,现在他有了可以用来解码文件的对称密钥。
选项 5:
优点:在您注册用户时为他们创建私钥和 public 密钥。使用用户 2 的 public 密钥加密用户 1 设备上的数据。将加密数据存储在您的数据库中。当用户 2 读取加密数据时,his/her 私钥将能够解密它。
我正在构建一个 Electron 应用程序并实现云存储支持。用户可以将我的应用程序中的文件上传到他们的帐户。作为管理员,我不想通过 Firebase 管理控制台读取文件。我还想避免使用用户密码,因为人们可能会忘记它。只需登录他们的帐户就足以访问他们的文件。
在我的原型中,我将用户文件存储在 data/${user.uid}/
中。但是现在我卡住了,不知道应该使用哪个密码来加密文件。
围绕这个主题有一些问题涉及 DigitalOcean
,这对于我正在做的事情来说看起来太过分了。有没有其他我可以用作密码的东西,它是用户对象的一部分,不会在其他任何地方公开?
我在 Firebase 的文件存储中遇到了客户端加密的多个选项。加密本身很简单,可以使用对称密钥(一种既可以加密数据又可以解密加密数据的密钥)对现有库执行。正如通常的问题一样,我们现在需要找到一个安全的地方来存储这个全能的密钥。
选项 1:在用户设备上存储密钥
优点:这将密钥存储在用户的设备上,因此密钥永远不会在应用程序服务器中。 缺点:无法从其他设备访问密钥以及数据。根据用例和情况,这不是一个糟糕的解决方案。
选项 2:Google Key Management Service for Encryption
优点:使用存储在 Google 密钥管理服务中的另一个数据密钥对密钥进行加密。用户的密钥对数据进行加密,然后密钥通过KMS密钥加密并存储在数据库中。正如 Andy 在他的 blog 中正确指出的那样,KMS 密钥属于 Firebase 数据库的不同 Google 帐户,因此任何用户都无权读取数据和解密数据。黑客需要破坏这两个帐户才能访问未加密的数据。 缺点:用户必须管理两个帐户。
选项 3:Stash the Key in User’s Google Account
优点:当用户登录时,我们会从用户的 Google 帐户中获取 OAuth 凭据以请求用户的个人加密密钥,或者如果找不到则创建一个。这样,密钥始终完全掌握在用户手中,但他们永远不必直接处理它。 Google Drive 提供了一个 API 用于创建特殊的应用程序数据文件夹(在 OAuth 期间需要用户同意)。此文件夹的内容对用户不可见,只能通过应用程序的凭据访问。 缺点:用户必须小心不要意外删除自己的加密密钥。
选项 4:Asymmetric Key Pair
优点:用户首先获得收件人的 public 密钥。然后他为自己生成一个对称密钥,用它来对文件进行编码。然后,他为每个收件人创建此对称密钥的副本,并使用各自的 public 密钥对其进行加密。最后,他将对称密钥的加密副本与加密文件一起传输到服务器并存储它们 there.If 另一个用户想要下载文件,他以加密形式连同对称密钥副本一起获得那是为他加密的。他可以使用他的私钥解密后者,现在他有了可以用来解码文件的对称密钥。
选项 5:
优点:在您注册用户时为他们创建私钥和 public 密钥。使用用户 2 的 public 密钥加密用户 1 设备上的数据。将加密数据存储在您的数据库中。当用户 2 读取加密数据时,his/her 私钥将能够解密它。