改变历史的密码泄露事件 - 从雅虎 30 亿账户泄露中学到的教训

本文约需 12 分钟阅读

过去 20 年间,数十亿个密码在大规模数据泄露事件中被曝光。这些事件彻底改变了企业处理用户数据的方式,也改变了我们对密码安全的认知。本文回顾五起具有里程碑意义的泄露事件,剖析每起事件背后的技术失误,并提炼出你今天就能付诸实践的教训。

结论 - 密码泄露事件教会我们什么

五起事件的共同点只有一个:"密码存储方式太薄弱"。明文存储、无盐哈希、不当的加密模式 - 这些在当时的技术水平下都是可以避免的错误。对用户来说教训很简单:停止重复使用密码,为每个服务设置唯一的强密码,并启用两步验证。仅这两步就能大幅减轻泄露事件的损害。

Yahoo (2013-2014 年) - 30 亿账户泄露与收购价缩水 35 亿美元

史上最大的密码泄露事件发生在 Yahoo。2013 年的攻击影响了全部 30 亿个账户,2014 年的另一次攻击又泄露了 5 亿个。令人震惊的是,2013 年的泄露直到 2016 年才被公开 - 整整 3 年未被发现。Yahoo 使用 bcrypt 对密码进行哈希处理,但部分账户仍保留着旧的 MD5 哈希。这起事件最著名的幕后故事是对 Verizon 收购的影响:原本 48 亿美元的收购价在泄露曝光后被削减了 3.5 亿美元,降至 44.8 亿美元。密码管理的疏忽,字面意义上造成了数百亿日元的损失。

LinkedIn (2012 年) - 无盐 SHA-1 的冲击

2012 年,650 万个 LinkedIn 密码哈希出现在一个俄罗斯黑客论坛上。真正令人震惊的是存储方式:LinkedIn 使用无的 SHA-1 哈希存储密码。没有盐值,相同的密码会产生相同的哈希,用彩虹表就能轻松破解。2016 年事态进一步恶化,完整数据集 - 1.17 亿条凭据 - 以约 2,200 美元的比特币价格出现在暗网市场。泄露 4 年后,被盗数据仍在被变现。这起事件成为"为什么加盐哈希 (最好是 bcrypt 或 Argon2) 不可妥协"的教科书案例。关于泄露凭据如何流通,请参阅密码如何流入暗网

Adobe (2013 年) - 像填字游戏一样被破解的加密

Adobe 泄露事件不仅因 1.53 亿条记录的规模引人注目,其技术失误更是令人叹为观止。Adobe 没有对密码进行哈希处理,而是使用 3DES 的 ECB (电子密码本) 模式进行加密。ECB 模式的致命缺陷在于相同的明文总是产生相同的密文 - 也就是说所有使用 "123456" 的用户的密文完全相同。安全研究人员将密文出现频率与密码提示 (竟然以明文存储!) 结合起来,像解填字游戏一样逐步破解密码。网络漫画 XKCD 对此进行了著名的讽刺,引起了广泛关注。

Collection #1 与 RockYou - 泄露数据的汇总与明文存储的冲击

2019 年 1 月,安全研究员 Troy Hunt 发现了 Collection #1 - 一个从数千次独立泄露中汇编的庞大数据集,包含 7.73 亿个电子邮件地址和 2,100 万个唯一密码。这不是一次单独的黑客攻击,而是一次汇编,凸显了密码重复使用如何将一次泄露变成打开多个账户的万能钥匙。如果你在小论坛和银行使用了相同的密码,Collection #1 就把这些关联起来了。再往前追溯,2009 年的 RockYou 泄露事件暴露了 3,200 万个以完全明文存储的密码 - 没有哈希,没有加密,什么都没有。讽刺的是,这个数据集成为了安全研究的黄金标准。"rockyou.txt" 词表被捆绑在 Kali Linux 等渗透测试工具中,在全球范围内用于测试密码强度。一家公司的安全失败成了整个行业的基准。

五起事件的技术教训

将这些事件排列起来,密码存储的最佳实践便浮现出来。首先,绝对不能以明文存储密码 (RockYou 的教训)。其次,哈希时必须添加盐值 (LinkedIn 的教训)。第三,使用加密时要避免 ECB 模式,选择 CBC 或 GCM 等安全模式 (Adobe 的教训)。当前的最佳实践是使用 bcrypt、scrypt、Argon2 等"慢速"哈希函数。它们通过有意增加计算成本,使暴力破解变得不切实际。

要更深入地了解密码安全基础知识,信息安全相关书籍 (Amazon)也可以作为参考。

如何确认自己的邮箱是否已泄露

"觉得自己没事"?Have I Been Pwned (HIBP) 是前面提到的 Troy Hunt 运营的免费服务,只需输入邮箱地址就能确认是否包含在过去的泄露事件中。截至 2024 年,已收录超过 140 亿个泄露账户,很多人会惊讶地发现自己的地址赫然在列。如果确认泄露,请立即更改该服务的密码,并更改所有使用相同密码的其他服务。泄露后的具体应对步骤请参阅数据泄露应对指南

现在就能做的三件事

  1. 在 Have I Been Pwned 上检查你的邮箱。如果出现在任何泄露中,立即更改该密码并停止在其他地方重复使用。关于重复使用为何如此危险,请参阅凭据填充攻击的防御方法
  2. 使用 Passtsuku.com 为每个账户生成唯一的强密码。目标是 16 个字符以上的高熵值密码。最佳实践请参阅安全密码创建指南
  3. 为所有重要账户启用两步验证。即使密码泄露,第二因素也能阻止未授权访问

常见问题

历史上最大的密码泄露事件是什么?
2013 年的 Yahoo 泄露事件影响了全部 30 亿个账户。该事件直到 2016 年才被公开,导致 Verizon 的收购报价减少了 3.5 亿美元。
有办法确认自己的密码是否已泄露吗?
在 Have I Been Pwned (haveibeenpwned.com) 输入邮箱地址,即可免费确认是否包含在过去的泄露事件中。如果发现泄露,请更改该服务以及所有使用相同密码的服务的密码。
密码的"盐"是什么?为什么重要?
盐是在密码哈希化之前添加的随机字符串。没有盐,相同的密码会产生相同的哈希值,容易被彩虹表攻击批量破解。LinkedIn 泄露事件是无盐哈希危险性的典型案例。

相关术语