Expand description
会话密钥缓存与自动锁定。
§这个模块解决的核心问题
需求 F-12 要求「扫描目录、自动匹配多个浏览密码」。若每个文件都跑一次 Argon2id,代价是灾难性的:
10000 文件 × 5 密码 × 180 ms ≈ 2.5 小时两级密钥体系让慢速 KDF 只在「密码 → KEK」这一步执行一次,此后每个文件 只做 HKDF(13.2 µs,快 13,700×)。前提是 KEK 必须被缓存复用——这正是本模块 的职责。实测:5 密码派生 765 ms,随后扫描 500 文件仅 171 ms。
§缓存键的设计
缓存键是 (vault_salt, 凭据标识)(规范 §11.1)。
为什么必须含 vault_salt:同一个密码在不同 vault(不同 salt)下派生出的
KEK 完全不同。若只用密码做键,切换 vault 后会复用错误的 KEK,导致本该解开的
文件解不开——而且这种 bug 表现为「密码错误」,极难排查。
§内存卫生
SessionKeys 持有的 KEK 在移除或整体析构时清零。缓存只存在于内存,
绝不落盘(规范 §10 内存卫生)。
Structs§
- Session
Keys - 会话密钥缓存。
- Unlocked
Credential - 一个已解锁的凭据条目。
Enums§
- Credential
Kind - 凭据来源。
Constants§
- DEFAULT_
IDLE_ TIMEOUT - 默认空闲锁定时长:15 分钟(规范 §11.2)。
Functions§
- kek_
from_ recovery_ words Deprecated - 从恢复码助记词还原 KEK。