Flutter - 跨多个设备的端到端加密的密钥存储

2024-01-11

我正在编写一个 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(使用前将#替换为@)

Flutter - 跨多个设备的端到端加密的密钥存储 的相关文章

随机推荐

  • 技术实现细节如何编写User Stories? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试以更有组织的方式工作并开始采用用户故事 我认为我对如何将用户故事用于技术内容存在误解 假设我正在编写一个应用程序 它可以提供我的网站在
  • 如何使用 Open JDK 11+ 作为自定义运行时执行 AWS lambda?

    AWS 允许创建拉姆达函数 with Java 8 OpenJDK 8 作为运行时 我需要使用创建一个简单的函数Open JDK 11 像这样的东西 package example import com amazonaws services
  • jquery 中选定单选按钮的数量

    假设我有一组单选按钮 如下所示
  • 构造一个整数数组来实现特定的序列

    构造以 A 结尾的最短整数序列 使用以下规则 序列的第一个元素是 1 每个连续的元素 elements 是任意两个前面元素的总和 添加单个元素 元素本身也是允许的 每个元素都大于 所有前面的元素 也就是说 序列是递增的 例如 对于 A 42
  • Oracle 云实例连接问题

    我对云缺乏经验 我已在 Oracle Cloud 中创建了一个计算实例 但是当我尝试使用公共 i p ssh 连接到它时 它显示 无法连接到主机端口 22 操作超时 我已经为实例创建了一个公共 i p 并提供了公钥 所有其他选项均设置为默认
  • 引用 NET Standard 1.6 项目时,ASP.NET Web API 2 无法返回流

    这是我见过的奇怪问题之一 以下是重现的步骤 1 gt 使用 Target Framework 4 6 2 在 VS 2017 中创建新的 Web API 项目 Create new ASP NET Web Application gt Se
  • Android 上的虚拟蓝牙设备?

    昨晚 我不断地被说外语的错误号码所困扰 我开始寻找一个应用程序来在电话连接中播放音频文件 带有多种语言的 黄号码 并发现了很多注释 说明由于硬件的工作方式 以及相反的情况 记录电话交谈 这是不可能的 不可能 总是让我想知道如何做某事 所以我
  • 在 Xamarin Forms 中实现自定义 Webview

    我是新来的Xamarin Forms我已经实现了一个自定义网页视图渲染器Droid项目 问题是在实现渲染器时iOS项目 就像Webview在不加载 CSS 和 Javascript 的情况下进行初始化 因为它只显示HTML页面没有任何功能
  • 使用 AWK 删除字段前的空格

    几乎完全重复通过 AWK 保持原始格式 POST 传递 https stackoverflow com questions 408469 keeping original format post passing through awk由同一
  • 类文件格式的最终​​变量

    Does class文件格式提供支持final关键字与变量一起使用吗 或者它只是从代码中推断出变量的有效最终性 然后 JIT 编译器基于它执行优化 Here https docs oracle com javase specs jvms s
  • 使用 powershell 正确格式化 JSON

    我有一个 JSON 格式的以下文件 Before ConvertTo JSON Yura Cashier branch release Retail v4 0 configuration RetailDemo Debug datetime
  • 如何在相机中添加边框?

    我需要在反应本机相机视图的取景器中间添加一个方框 存储库中也没有有关它的信息 那里的问题也没有得到解答 您正在使用哪个模块 react native camera or react native camera kit 如果您使用react
  • java正则表达式模式未封闭的字符类

    我需要一些帮助 我越来越 Caused by java util regex PatternSyntaxException Unclosed character class near index 24 a zA Z 0 9 at java
  • Scala:为什么隐式找不到隐式 ExecutionContext?

    我有一个特点 trait Crawler implicit def system ActorSystem implicit def executionContext ExecutionContext implicit def materia
  • 如何安装较新的 swift-tools-版本?

    我第一次尝试创建一个新的 Swift 包 根据这个苹果文档 https developer apple com documentation swift packages bundling resources with a swift pac
  • 应用程序在列表视图适配器第二次播放音频时崩溃

    我的课程由包含曲目列表的列表视图组成 每个列表项由 播放 和 暂停 按钮组成 它应该在单击 播放 时播放曲目 在单击 暂停 时停止曲目 我没有使用不同的按钮 我正在使用一个按钮仅在单击黑白播放和暂停时更改其文本并相应地起作用 我面临以下问题
  • 在 VSCode 中调试 FastAPI 应用程序

    我正在尝试调试使用 FastAPI uvicorn 的应用程序 web api 我也在使用诗歌并在 vscode 中设置 projev 虚拟环境 i read this https fastapi tiangolo com tutorial
  • 如何在CSS中从上到下堆叠div

    我有一个这样的列表 div class item 1 div div class item 2 div div class item 3 div div class item 4 div div class item 5 div 使用 cs
  • HttpClient 返回特殊字符但没有可读内容

    我正在尝试使用 async await 和 HttpClient 下载网页 但只得到一个充满特殊字符的字符串 代码就像 static async void DownloadPageAsync string url HttpClient cl
  • Flutter - 跨多个设备的端到端加密的密钥存储

    我正在编写一个 flutter 应用程序 用户基本上可以在其中创建注释 我编写了代码来为用户创建私钥 稍后用于加密他们的数据 加密数据存储在 Firebase Firestore 中 当检索他们的数据时 将使用他们的密钥对其进行解密 我看过