首页/开发者文档/密钥托管规范

密钥托管规范

所有内置工具的加密标准:随机数据密钥 + 安全中心包装,改密码秒级完成

密钥托管规范(Managed Key Standard)

生效于 v1.1.0。以后任何新工具的加密一律采用托管方案,禁止“派生密钥直用数据加密”。

为什么用托管方案

两种方案的对比:

派生方案(已废弃) 托管方案(标准)
数据密钥 HKDF(主密钥, 工具id) 随机 32B
改安全密码 必须重加密全部数据文件 只重包装 1 个 wrapped key,秒级完成
数据加密强度 取决于密码熵 独立随机 256-bit

安全性上两者最终都归结于安全密码强度,托管方案不弱于派生方案,但改密码成本从“重加密所有数据”降为“重包装一个密钥”——对大文件、多文件场景是决定性差异。

架构

安全密码 ──Argon2id──▶ 主密钥 MK(仅内存)
                          │ HKDF 派生

                  工具包装密钥(toolId 派生)
                          │ AES-256-GCM

        <tool>_wrapped_key(随机数据密钥的密文,落盘 SharedPreferences)
                          │ AES-256-GCM

              数据文件/索引(随机密钥加密的密文)

新工具接入步骤

  1. 密钥注入:解锁安全中心后
    • unwrapManagedKey(toolId) 命中 → 切换随机密钥,保留旧派生密钥作 _legacyKey(迁移窗口双密钥读取)
    • 未托管 → 用派生密钥解密全部存量数据 → 随机密钥重加密 → wrapped key 最后写(完成标记,崩溃可重试,单文件失败跳过)
  2. 双密钥读取:解密先试主密钥,失败 fallback legacy(崩溃残留自愈);clearKey() 两者都零化
  3. 改密注册VaultMigrationService.migrateTool 加 case——已托管 → 重包装 wrapped key;未托管 → 旧路径重加密数据
  4. 备份<tool>_wrapped_key 加入备份白名单(同设备/同密码恢复可解);数据 box/目录加入备份类别
  5. 测试:迁移幂等(写存量 → 迁移 → 可读 → 再迁不破坏)、加密闭环、大文件分块、密文不泄露文件名

已落地工具

密码管理器、人物卡片、加密相机(含视频分块重加密 + 迁移进度 UI)、加密笔记、加密通讯录、AI 对话、文件保险箱——全部托管。

不需要托管的场景

  • Hive box 级加密(Keystore 随机密钥,改密码无影响)
  • 插件 encrypted_storage 与插件 webview 派生密钥(改密靠 retainedOldKey 下发 + 插件侧重包装,JS 侧无法解 wrapped key)

通用约定

  • 密钥只在内存,锁定/退出/切后台即零化
  • 解锁流程统一:unlock → getToolKey → ensureManaged → load
  • 备份恢复后密钥不匹配 → 锁屏必须给“放弃旧数据,重新开始”出路,禁止静默进入空状态
MATRIX MODE: ON — 再输入一次或按 ESC 退出