登录账户与解锁保险库看起来都是“输入密码”,但它们解决的是两个完全不同的问题。账户认证用于让服务确认当前请求属于哪个用户;保险库主密码用于在本地派生密钥并解开密文。xypass 不把主密码当作服务器登录凭据,也不把账户密码当作保险库密钥。
登录解决身份问题
本地账号密码、OIDC 和 MFA 都属于身份层。认证成功后,服务端可以建立会话、执行权限检查,并返回这个账户有权同步的密文。服务端知道账户、设备、组织和授权关系,但不应因此得到保险库明文。
解锁只发生在客户端
用户输入主密码后,客户端在当前设备上完成密钥派生与解密。派生出的密钥只进入本地内存,主密码不会作为 API 参数发送到同步服务。锁定页面因此可以独立于登录状态存在:会话仍然有效,但本地明文和解密密钥已经被清理。
为什么不能合并
如果一个密码同时用于服务器认证和保险库解密,服务端验证流程就更容易接触到能够还原数据的秘密。拆分之后,即使身份服务被攻破,攻击者获得的仍然主要是会话、账号信息和密文,而不是直接可用的保险库密钥。
这套边界也解释了为什么“重新登录”和“重新解锁”不应该互相替代:前者恢复服务会话,后者恢复本地明文访问。界面可以把流程衔接得顺畅,但不能在安全模型上把它们混成一次验证。

