撞库攻击

很多人在不同网站用同一个密码。这带来的风险不是"密码太简单",而是横向扩散。

攻击者常用一种叫撞库(Credential Stuffing)的手法:

  1. 某个网站发生数据泄露,用户名和(未加盐或弱哈希的)密码被公开;
  2. 攻击者拿这些凭据去批量尝试登录其他网站(邮箱、社交、电商、支付);
  3. 因为用户用了相同密码,一部分账号直接被攻破。

这意味着:你的账号安全,部分取决于你使用的其他网站的安全水平。哪怕你自己的习惯很好,只要某个小网站泄露了数据,你的主邮箱也可能被波及。

为什么复杂密码不够

"P@ssw0rd1" 这类符合复杂度要求的密码,问题在于:

  • 人类难以为几十个网站记住几十个真正随机、彼此无关的密码;
  • 于是人们会重复使用,或者用有规律的变体(站点名 + 固定后缀)——而规律一旦被识破,所有账号一起沦陷。

密码管理器的工作方式

核心思路:用一个主密码加密一个密码库,库里存放所有网站的高强度随机密码。

  • 你只需要记住主密码;
  • 每个网站使用独立生成的长随机密码(通常 16–20 位,含大小写、数字、符号);
  • 密码库通过强加密算法(如 AES-256)保护,并经过大量 KDF 迭代(如 Argon2、PBKDF2)来抵御暴力破解。

关键设计:服务端不存储主密码。正规的密码管理器采用零知识架构——加密和解密都在本地完成,服务商无法获取你的明文数据。这意味着如果主密码丢失,数据无法找回(这是安全的代价)。

安全性的权衡

密码管理器把风险从"几十个弱密码"集中到"一个主密码 + 一个应用"。

这当然引入了新的风险面:

  • 主密码一旦泄露,所有密码暴露;
  • 密码管理器软件本身若有漏洞,可能被攻击。

但权衡下来,主流观点认为:集中保护一个强主密码,远优于分散管理几十个弱密码。前提是使用经过安全审计的成熟产品,并为主密码启用双因素认证。

双因素认证(2FA)

即便密码泄露,2FA 也能挡住大部分攻击。常见形式:

TOTP(基于时间的一次性密码):如 Google Authenticator、各类验证器 App。每 30 秒生成一个新的一次性码。原理是服务端与客户端共享一个密钥,用时间和密钥生成哈希。

硬件密钥(如 FIDO2/WebAuthn):安全性最高。基于公钥密码学,私钥永不出硬件,且能防钓鱼——密钥会验证网站域名,伪造网站无法骗取认证。

短信验证码:方便但安全性最弱,存在 SIM 卡劫持、短信拦截等风险。在条件允许时应优先选择前两者。

几条实用建议

  • 为邮箱、支付、社交等核心账号启用 2FA;
  • 不同网站使用不同密码;
  • 定期检查账号是否出现在已知的泄露数据库中(如 haveibeenpwned 一类服务);
  • 主密码要足够长且唯一(可以考虑用口令短语而非短密码)。

说明:本文为网络安全实践的公开知识整理。