我正在编写一个 flutter 应用程序,用户基本上可以在其中创建注释。我编写了代码来为用户创建私钥,稍后用于加密他们的数据。加密数据存储在 Firebase Firestore 中。当检索他们的数据时,将使用他们的密钥对其进行解密。
我看过使用颤振安全存储 https://pub.dev/packages/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.
正如大卫在Virgil 在 GDG 的安全演讲 https://www.youtube.com/watch?v=KuKvwjs6ENE,通过利用用户的密码派生密钥(David 将其称为脑钥匙)然后用于加密用户的私钥。因此,当用户注册时,会为他们创建一个私钥,然后使用脑钥匙。该加密的密码密钥存储在云端。
因此,当用户从新设备登录时,他们输入密码并从密码中获取大脑密钥,然后使用该大脑密钥解密他们的密码。私钥并因此保存到用户的设备中。现在,您可能想知道如果用户更改密码会发生什么。为了更改密码,需要旧密码,然后使用该旧密码创建新密码脑钥匙并以加密格式存储私钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)