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

密钥托管规范

统一加密标准:随机数据密钥 + 双层包装(设备 KEK / 密码层),插件同源接入

密钥托管规范

宇宙核所有工具与插件的数据加密遵循同一标准:随机数据密钥 + 双层包装。 本文描述该标准与各参与方的接入方式。

核心模型

  • 每个工具/插件一把独立的随机数据密钥(32 字节,从不与密码发生 derivation 关系)
  • 数据密钥从不明文落盘,存在两种包装:
    • 设备 KEK 版:设备本地 Keystore 中的 KEK 包裹——免密可用(防文件/备份泄露, 不防正在使用手机的人)
    • 密码层版:安全中心主密钥(MK)体系包裹——必须解锁才能解出
  • 同一工具的密钥可在两层之间收编/补写(同一把密钥,只换包装),数据无需重加密
  • 安全中心主密钥本身为随机密钥,由用户密码“信封包裹”(改密码只重包信封,所有 工具密钥不变,数据无需重加密)

解析链(getToolKeyForTool)

状态 密钥来源 结果
未保护(auto 档) 设备 KEK 版托管;无则生成随机密钥并托管 免密可用
受保护 / 密码档 密码层版托管(需已解锁);解锁时自动删除设备版副本(防线收紧) 需解锁
诱饵空间 非隔离工具一律 null fail-closed
锁定态 + 密码层托管存在 返回 null,禁止生成新密钥(防止覆盖托管使存量数据不可解) fail-closed

插件接入(2026-09-08 起)

插件 storage.json 的文件级加密统一走本链路,密钥 toolId 为 plugin:<pluginId>:

  • 数据落盘即加密(AES-256-GCM,YZHENC1: 文件前缀),档位跟随权限页「密码保护」
  • 密码保护关闭:设备档,免密可用;开启:密码档,安全中心锁定即数据锁定
  • 插件侧无需任何加密代码;历史版本插件自行加密的 enc: 数据由插件在解锁后 一次性迁移为明文(此后保密性由宿主文件层承担)
  • 备份闭环:插件数据密钥随 tool_keys 备份携带(动态白名单 plugin:<uuid>), 恢复后自动重包到新设备 KEK

内置工具

加密相册、人物卡片(cc)、密码管理器(pv)等均按本标准托管各自的数据密钥。 工具可声明存储加密等级(跟随全局 / 明文 / 加密 / 可迁移): “可迁移”档的密钥随备份导出(tool_keys.json),换设备后即可解密。

恢复语义

工具状态 恢复后
未保护(设备档) 免密可用(密钥重包到新设备 KEK)
受保护 / 密码档 需解锁安全中心后解出(密码正确即恢复)
诱饵空间 不落盘真实密钥(防胁迫链)

历史兼容

  • HKDF 派生密钥(yzh:tool:<toolId>)为信封迁移前的存量数据兜底路径——解析链在 无托管密钥时自动回退,工具读取后应立即重加密到托管密钥
  • 旧版“全局派生密钥”加密的插件 encrypted_storage.json 在读取时自动重写为 插件独立密钥版本
MATRIX MODE: ON — 再输入一次或按 ESC 退出