安全

证明您的浏览器并非保管库。

Chrome 和 Firefox 会保存您的密码,然后将它们交给任何以您的身份运行的程序。这不是漏洞,而是设计使然。以下是证明:一次用通俗的文字,一次用代码。

通俗文字版

您浏览器的“密码管理器”仅受一把锁保护:您的电脑登录状态。一旦您登录笔记本电脑,浏览器就能立即读取所有保存的密码,因此在您的帐户下运行的任何其他程序也能做到。

一次糟糕的下载。一个可疑的浏览器游戏。您克隆的项目中一个被投毒的包。在它运行的那一刻——在您已登录的状态下,就像您平时一样——它会在打开一个文件的时间内读取浏览器保存的每一个密码。没有主密码需要破解,因为根本无需破解:浏览器被设计为自动为您解锁,而恶意软件只需以“您”的身份礼貌地请求即可。

这并非理论假设。这是普通人丢失帐户的最常见方式。这种恶意软件甚至有一个枯燥的行业名称——“信息窃取程序”——因为它太常见了。您的密码、保存的信用卡、会话 Cookie:在您察觉之前就被复制并消失了。

解决方法说起来很简单:您的密码应该用电脑其他部分没有的东西来锁定,而且它们根本不应该存放在这台机器上。

附带确凿证据的版本

不要只听我们的一面之词。Chromium 和 Firefox 是开源的,读取路径有文档记录、标准化且简短。以下是密码的确切位置以及它们是如何被提取的。

Chrome(以及所有 Chromium 浏览器)

Chrome 将登录信息存储在 SQLite 数据库中——Login Data,表 logins,列 password_value——并使用 AES-256-GCM 加密。AES 密钥存放在 Local State 中,由操作系统“保护”:Windows 上的 DPAPI,macOS 上的登录钥匙串,Linux 上的 gnome-keyring/kwallet(或纯文本)。

您可以自己阅读——代码是开源的。在 Chromium 中搜索标记封装密钥的常量:os_crypt 中的 kDPAPIKeyPrefix。该密钥经过 DPAPI 封装、标记并存储,然后通过一次调用解包,而这道防线对毫无保护作用:

const char kDPAPIKeyPrefix[] = "DPAPI";

CryptUnprotectData(&intermediate, /*ppszDataDescr=*/nullptr,
                   /*pOptionalEntropy=*/nullptr, nullptr, nullptr, 0, &output);

没有第二道机密,没有密码,没有提示。CryptUnprotectData 会将密钥交还给您的会话中运行的任何进程——这正是 DPAPI 文档中描述的威胁模型:如果它以您的身份运行,它就是您。攻击者的全部工作只需三行代码:从 Local State 读取密钥,解包它,然后对 Login Data 中的每一行进行 AES-GCM 解密。信息窃取恶意软件多年来一直正是这样做的。

“设备端加密”同样无法拯救您

Google 的解决方案是一个 6 位数 PIN 码,用于加密您同步的保管库。2026 年 5 月,Phishu 的研究人员展示了这种保护有多么薄弱。一个逼真的伪造 Google 登录页面——中间人钓鱼攻击——会捕获会话和该 PIN 码,而这个 PIN 码就是同步帐户中每个密码和通行密钥的主密钥。借助它,攻击者可以将自己的设备加入您的 Google“安全域”,整个保管库会直接同步给他们——一步即可完全接管。

设计缺陷:Google 允许设备仅凭 6 位数 PIN 码即可加入,无需您已有设备的批准。

Firefox

Firefox 将登录信息保存在 logins.json 中,将密钥保存在 key4.db 中,由 NSS 的“Secret Decoder Ring”解密——这也是开源的:security/nss/lib/pk11wrap/pk11sdr.c。如果您设置了主密码,该密钥就会用它来密封。

默认情况下,您并没有设置——因此该密钥是用空字符串密封的,并且存储的“password-check”值确认空密码可以解密它。从您的配置文件中复制两个文件(key4.db + logins.json),让 NSS 或开源的 firepwd.py 指向它们,它们就会被解密。一把钥匙贴在门上的锁算不上锁。

The common thread

每个浏览器的密码存储都有相同的结构:机密存在于您工作的地方,由您已登录的会话解锁。您电脑的其他部分可以撤销的加密,并不能保护您免受真正清空帐户的威胁——即以您的身份运行的代码。

为什么 Clavitor 无法以这种方式被读取

Clavitor 不会将您的保管库保存在本地机器上。没有 Login Data,没有 key4.dbLocal State 中也没有密钥——磁盘上没有任何东西可供以您的身份运行的进程抓取。

解密密钥并非用您的操作系统登录状态密封。它源自硬件触碰——Touch ID、Face ID 或 YubiKey——在浏览器中计算,用于单次请求,然后丢弃。凭据仅在您请求时通过作用域 API 获取,且从不缓存。以您的身份运行的恶意软件只会扑个空。

这就是“在您的设备上加密”与“根本不在您的设备上”之间的区别。

不要再将您的密码托付给浏览器。

Clavitor 扩展程序的填充方式与您的浏览器一样,并将保管库保存在您的笔记本电脑无法读取的地方。