密钥托管规范
统一加密标准:随机数据密钥 + 双层包装(设备 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 在读取时自动重写为 插件独立密钥版本