k-匿名性如何保护你的密码
仅会把你密码 SHA-1 哈希的前 5 个字符发送到 API。API 返回该前缀约 800 个可能的匹配,其余在本地检查。完整密码永远不会离开你的浏览器。
功能说明
重复使用一个已经泄露过的密码,是账户被盗最常见的方式之一。本工具把密码拿到 Pwned Passwords 里查询 - 这是由 Have I Been Pwned (HIBP) 维护的语料库,收录了已知数据泄露中数亿条真实密码 - 并告诉你它在泄露中出现过多少次。
查询借助 k-匿名性(k-anonymity)完成:密码在你的浏览器里做 SHA-1 哈希,只有哈希的前 5 个字符被发送给 API。API 返回所有共享该前缀的泄露哈希后缀(约 800 个候选),你的浏览器在本地比对剩下的 35 个字符。API 永远拿不到足以还原你密码的信息 - 即使是恶意的运营方也无法得知。
使用方法
- 在输入框中输入或粘贴密码。用眼睛开关显示或隐藏它。
- 点击 Check password(查询密码)或按回车。计算哈希并拉取区间需要片刻。
- 阅读判定结果:绿色方框表示该密码未在任何已知泄露中发现;红色方框会显示它出现过的泄露次数。
- 展开 How k-anonymity protects your password(k-匿名性如何保护你的密码),查看发送的哈希前缀和在本地比对的候选哈希数量。
如果查询无法连上 API,工具会明确说明 - 网络不可达绝不会被报告成“未发现泄露”。
示例
查询密码 password:
SHA-1 5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8
Sent to API 5BAA6 (the only 5 characters that leave your browser)
Checked ~800 candidate suffixes returned for that prefix, matched locally
Result This password appeared in 3.7M+ data breaches ✗ (the live count is shown)
查询一个长随机密码:
Input Zx9#qL-vTtR2mW4n
Flow hash locally → send the 5-char prefix → match the suffix against ~800 candidates
Result This password has not been found in any known breaches ✓
补充说明
- 你的密码永远不会离开浏览器。 SHA-1 哈希通过 Web Crypto API 在本地计算,40 个十六进制字符中只有 5 个被传输。该前缀标识的是一个约 800 个哈希的桶,不是你的密码。
- “未发现”不等于“强”。 这项检查只说明该密码未出现在已知泄露语料中。
Tr0ub4dor&3式的猜谜密码可能缺席却依然脆弱 - 请把本工具与密码强度分析器和生成的密码搭配使用。 - 在这里 SHA-1 没有问题。 哈希只用作查找键,不用于认证。对 SHA-1 的原像攻击帮不到一个只能收到 5 个十六进制字符的攻击者。
- 相关工具: 密码强度分析器、密码生成器、口令短语生成器。