Android Keystore 安全机制:密钥为什么取不出来
Keystore 是什么
Android Keystore 是系统级密钥库:密钥生成与使用都在安全环境(多数设备有 TEE/独立安全芯片)内完成,密钥本身永远不出这道门。应用只能"请它帮忙算",拿不到密钥本体。
FreeOTP 怎么用它
依官方备份文档(BACKUP.md):
- 2.0 起,令牌密钥迁入 Keystore,按设计使其不可提取。
- 用户设置主密码,同样存于 Keystore,用于加密令牌数据。
- 恢复操作永远要求主密码。
设计意图:防什么
| 威胁 | 无 Keystore 的旧模型 | 2.x Keystore 模型 |
|---|---|---|
| 恶意应用读存储 | 密钥文件可被偷 | 密钥取不出来 |
| 设备备份被解 | 备份含裸密钥 | 备份是主密码加密的密文 |
| Root 后提取 | 密钥可导 | 提取不出密钥本体 |
代价:便利性让位——没有"导出密钥文件"这种逃生门。想要这个能力的用户流向 FreeOTP+ / Aegis 等分支(见 FreeOTP 与 FreeOTP+)。
单向迁移的含义
从 1.x 升级到 2.x:老数据迁入 Keystore,回不去。官方提醒升级时强制设置主密码——所以升级前要确认:
- 老设备上的令牌已经安排好(备份或可重绑)。
- 主密码会立刻记入密码管理器。
对日常使用的实际影响
- 出码流程无感知(Keystore 在后台工作)。
- 备份策略被固化:只能走"主密码 + 加密备份"一条路,见 主密码机制。
- 设备必须健康:安全环境损坏(极罕见)意味着密钥不可用——这也是"重要网站留恢复代码"的又一层理由。
相关页面
- 主密码实操:主密码与 Keystore
- 备份体系:无云同步的设计取舍
- 手机丢失的连带影响:手机丢了怎么办