0

我正在编写一个颤振应用程序,用户基本上可以在其中创建笔记。我编写了代码来为用户创建一个私钥,该私钥后来用于加密他们的数据。加密数据存储在 Firebase Firestore 中。当他们的数据被检索到时,使用他们的密钥对其进行解密。

我已经研究过使用Flutter Secure Storage,效果很好,除了密钥仅在该设备上可用。如果用户在新设备上登录,他们将无法解密他们的笔记。

我的问题是:

我如何/在哪里存储用户的密钥以解密他们的数据,以便只有他们可以访问它,而不管他们使用什么设备登录?围绕这种解决方案的最佳实践是什么?

final AesGcm algorithm = AesGcm.with256bits();
final SecretKey secretKey = await algorithm.newSecretKey();

// TODO: Write secretKey to storage that only the user can access with their account.

4

1 回答 1

0

正如 David 在GDG 的 Virgil Security 演讲中所解释的那样,这个问题可以通过利用用户的密码来派生一个密钥(David 将其称为大脑密钥)来解决,该密钥然后用于加密用户的私钥。因此,当用户注册时,会为他们创建一个私钥,然后使用大脑密钥对其进行加密。此加密的密码密钥存储在云中。

因此,当用户从新设备登录时,他们输入密码并从密码中获取大脑密钥,然后将其用于解密他们的私钥并因此保存到用户的设备中。现在,您可能想知道如果用户更改密码会发生什么。为了更改密码,需要旧密码,然后使用旧密码创建新的大脑密钥并以加密格式存储私钥。

于 2022-02-24T21:28:07.730 回答