跳到主要内容

密码泄露检测怎么用,弱密码检测背后的撞库攻击与换密码思路

用 k-匿名方式查密码是否进过已知泄露库,密码不出浏览器。讲清弱密码为什么危险,撞库攻击怎么运作,以及检测到泄露后该立刻换成什么样的强密码。

发布于 作者 李雷
#密码安全 #密码泄露检测 #弱密码 #撞库攻击 #k匿名

密码泄露检测怎么用,弱密码检测背后的撞库攻击与换密码思路

很多人对密码安全的理解停在「我这个密码够复杂」。但复杂不复杂只是其中一半,另一半是:这串密码有没有早就躺在某个被公开传播的泄露库里。后者你光看密码本身是看不出来的,必须拿它去比对已知泄露语料。这正是 密码泄露检测 在做的事。

它到底在检测什么

工具检测的是:你输入的这串密码,在已经被收录的所有泄露事件里一共出现过多少次。它走的是 HaveIBeenPwned 的 k-匿名查询协议,和 1Password、Firefox Monitor 用的是同一套。

过程很值得说清楚,因为它直接关系到隐私。点击「检测」时,浏览器先用 Web Crypto API 在本地把密码算成 SHA-1 哈希,然后只取这个 40 位哈希的前 5 个十六进制字符发出去,服务器返回大约 400 到 800 条以这 5 个字符开头的泄露哈希尾段,最后用剩下的 35 个字符在你浏览器里本地比对。也就是说,完整密码、完整哈希、最终命中比对全部留在本地,服务器只看到 5 个字符,根本认不出你在查哪一条。

为什么常用密码这么危险

危险不在于密码「太短」这种直觉,而在于它早就被人收集进了破解字典。看几个真实出现在泄露榜首的:123456passwordqwerty111111abc123iloveyou。其中 123456 在 HIBP 语料里的出现次数是七位数级别。

举个具体例子。你把 Summer2024! 这种看起来「有大小写有数字有符号」的密码贴进去检测,出现次数常常是几万。它满足了所有「复杂度规则」,却依然是高危密码,因为它符合一个人人都在用的模式:季节加年份加感叹号。攻击者的破解规则集第一批跑的就是这类组合。复杂度规则骗得过注册表单的红绿灯,骗不过真实的字典。

撞库攻击是怎么运作的

理解了上面这点,就能理解撞库(credential stuffing)为什么有效。

攻击者手里有一大批从各次脱库事件拼出来的「邮箱加密码」组合,论份儿打包买卖。他们写个脚本,把这批组合自动喷向各个网站的登录接口。只要你在 A 站和 B 站用了同一个密码,而 A 站被脱库了,那么 B 站的登录对攻击者来说就是现成的。整个过程不需要「破解」你的密码,因为密码本来就在他们手上,他们只是在试你有没有复用。

这就是为什么「出现次数 ≥ 1」就该立刻换。哪怕只出现过一次,也意味着这串密码已经进了某个攻击者的字典,复用它的每一个账号都暴露在撞库射程内。

我自己踩过的坑

说点第一人称的。我以前有个「主力密码」,自认为很安全:一个不常见的英文词加生日加一个符号,十来位,大小写都有。直到有次我顺手把它贴进密码泄露检测,出现次数显示 12。当时有点懵,这串我以为只有自己知道的密码,怎么会在泄露库里出现 12 次。后来想明白了,大概是某个我早就忘了注册过的小网站被脱库,而那串密码我在好几个地方复用过。从那以后我把所有账号的密码都换成了管理器生成的每站独立随机串,主力密码这个概念本身就是错的。

检测到泄露之后该怎么换

如果检测结果是「已泄露」,按这个顺序处理:

  1. 所有用过这个密码的地方都改掉。先改邮箱,因为邮箱是其他账号重置密码的总闸。
  2. 别只在后面加个「1」或「!」。把 monkey1 改成 monkey2 是没用的,攻击者的破解规则集专门跑这种尾号变形和符号追加,所谓「新」密码其实早被覆盖。
  3. 换成真正的随机串。用 密码生成器 生成 20 位以上的随机密码,每个站一串,全部交给密码管理器保管,自己只记一个主口令。
  4. 开 2FA。受影响的账号加上两步验证,优先用 TOTP App,能不用短信就别用短信。

有一点要专门提醒:次数为 0 不等于密码强。Xq7 的次数也是 0,但三个字符瞬间就能暴力破解。泄露状态和强度是两回事,前者看有没有进泄露库,后者看长度和字符集。想在发请求前先本地筛掉明显的烂密码,可以先跑一遍纯本地的弱密码检测,通过了再用泄露检测覆盖更广的语料库。

把它变成习惯

密码泄露检测最好的用法不是出事了才查,而是每次准备复用旧密码前先验一下。花十五秒查一次,就可能躲掉一次撞库被接管。但更根本的办法还是釜底抽薪:每个站用独立随机密码,从源头上让「这个密码泄露了会连累哪些账号」这个问题失去意义。这样就算某个站被脱库,暴露的也只是那一个站的随机串,你另外两百个登录毫发无损。


Made by Toolora · Updated 2026-06-13