Skip to main content

Module session

Module session 

Source
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§

SessionKeys
会话密钥缓存。
UnlockedCredential
一个已解锁的凭据条目。

Enums§

CredentialKind
凭据来源。

Constants§

DEFAULT_IDLE_TIMEOUT
默认空闲锁定时长:15 分钟(规范 §11.2)。

Functions§

kek_from_recovery_wordsDeprecated
从恢复码助记词还原 KEK。