用户验证 - 敏感操作的额外安全层
为什么需要用户验证
即使 KeePassDX 数据库已经打开,里面的数据是明文(解密后)在内存里的。如果你的设备被他人短暂拿到:
- 数据库已解锁状态下,任何能操作手机的人都能直接看密码、复制凭证
- Magikeyboard 和自动填充会直接把密码填出去,不需要再次验证
用户验证(User Verification)就是为了解决这个问题——每次执行敏感操作时,都需要再确认一次你是你。
用户验证 vs 设备解锁
这两个概念容易混淆:
| 方面 | 设备解锁 | 用户验证(UV) |
|---|---|---|
| 目的 | 解锁数据库本身 | 解锁后每次敏感操作再验证 |
| 技术实现 | Android Keystore 加密主密码 | 不加密,纯行为验证 |
| 触发时机 | 打开数据库时 | 每次敏感操作时 |
| 强制程度 | 可以完全跳过(只输主密码) | 4.3.0+ 默认启用 |
简单类比:设备解锁 = 打开家门;用户验证 = 每次开保险柜时再让我验证一下你是房主。
哪些操作触发 UV
从 KeePassDX 4.3.0 开始,以下操作需要 UV:
- 查看保护字段(密码、OTP、自定义保护字段)
- 复制保护字段到剪贴板
- 编辑已有的 Passkey 条目
- 数据库设置修改(加密算法、主密码等)
- Passkey WebAuthn 登录仪式(强制要求)
UV 验证方式
用户验证可以通过以下任一方式完成(优先级从高到低):
1. 主密码前缀
默认推荐方式。输入主密码的前 4 个字符即可完成验证。
- 优点:快速(只需 4 键)、不需要锁屏、不需要生物识别传感器
- 缺点:知道你主密码前缀的人也能通过(但主密码前缀通常不对外泄露)
2. 设备凭证
如果设备已设置锁屏:
- 自动用锁屏凭证(PIN/图案/密码)验证
- 可以设置为仅用主密码前缀——禁用设备凭证参与 UV
3. 生物识别
部分设备上 UV 可以触发生物识别验证(指纹/面容),体验更流畅。
UV 模式开关
数据库打开时,可以选择是否启用 UV 模式:
- UV 模式启用(默认):所有敏感操作都要验证
- UV 模式禁用:敏感操作直接执行(不推荐)
禁用 UV 的场景:
- 你只是整理数据库结构(重命名分组、移动条目),不需要频繁看密码
- 你对设备的物理安全非常有信心(只有自己能拿到)
局限性
UV 只是行为验证,不是加密机制。它的设计定位是:
- 防止误操作:比如你在 KeePassDX 里浏览条目时不小心碰了一下密码显示按钮
- 防止短暂入侵:设备被他人拿到时,无法快速复制走敏感数据
- 符合 WebAuthn 规范:Passkey 的登录仪式强制要求 UV
但它无法防御:
- 数据库已完全解密在内存中,攻击者有充足时间在屏幕上逐行看
- 屏幕被远程录制
- 恶意 App 通过无障碍服务直接读取屏幕内容
所以核心安全仍然依赖数据库加密本身和设备锁屏——UV 只是锦上添花的第二层。