Flutter - 用于跨多个设备进行端到端加密的密钥存储
Flutter - Key storage for end-to-end encryption across multiple devices
我正在编写一个 flutter 应用程序,用户基本上可以在其中创建笔记。我已经编写代码为用户创建私钥,稍后用于加密他们的数据。加密数据存储在 Firebase Firestore 中。当检索到他们的数据时,将使用他们的密钥对其进行解密。
我研究过使用 Flutter Secure Storage,效果很好,只是密钥只能在该设备上使用。如果用户在新设备上登录,他们将无法解密他们的笔记。
我的问题是:
How/where 我可以存储用户的密钥来解密他们的数据,以便只有他们可以访问它,而不管他们使用什么设备登录吗?这种解决方案的最佳实践是什么?
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.
正如 David 在 Virgil Security talk at GDG 中所解释的那样,这个问题是通过利用用户密码派生密钥(David 称之为 大脑密钥 )来解决的然后用于加密用户的私钥。因此,当用户注册时,会为他们创建一个私钥,然后使用 大脑密钥 对其进行加密。此加密密码密钥存储在云端。
因此,当用户从新设备登录时,他们输入密码并从密码中获取大脑密钥,然后用于解密他们的 私钥 和因此保存到用户的设备。现在,您可能想知道如果用户更改密码会发生什么。为了更改一个人的密码,需要使用旧密码创建新的大脑密钥并以加密格式存储私钥。
我正在编写一个 flutter 应用程序,用户基本上可以在其中创建笔记。我已经编写代码为用户创建私钥,稍后用于加密他们的数据。加密数据存储在 Firebase Firestore 中。当检索到他们的数据时,将使用他们的密钥对其进行解密。
我研究过使用 Flutter Secure Storage,效果很好,只是密钥只能在该设备上使用。如果用户在新设备上登录,他们将无法解密他们的笔记。
我的问题是:
How/where 我可以存储用户的密钥来解密他们的数据,以便只有他们可以访问它,而不管他们使用什么设备登录吗?这种解决方案的最佳实践是什么?
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.
正如 David 在 Virgil Security talk at GDG 中所解释的那样,这个问题是通过利用用户密码派生密钥(David 称之为 大脑密钥 )来解决的然后用于加密用户的私钥。因此,当用户注册时,会为他们创建一个私钥,然后使用 大脑密钥 对其进行加密。此加密密码密钥存储在云端。
因此,当用户从新设备登录时,他们输入密码并从密码中获取大脑密钥,然后用于解密他们的 私钥 和因此保存到用户的设备。现在,您可能想知道如果用户更改密码会发生什么。为了更改一个人的密码,需要使用旧密码创建新的大脑密钥并以加密格式存储私钥。