为什么我不应该使用 HaveIBeenPwned API 来警告用户有关暴露密码的原因?

信息安全 密码 我被打倒了
2021-09-03 09:57:36

有很多关于HaveIBeenPwned 密码检查器的讨论,它可以安全地告诉用户他们的密码是否出现在他们已知的密码数据转储之一中。

该工具背后有一个公开可用的 API,网站/应用程序/等可以免费使用以允许其用户检查他们的密码,但据我所知,所有列出的应用程序都是专门的电子邮件/密码检查工具。

我从未见过或听说过用户在创建帐户时向网站输入密码,然后它会向他们提供一条错误消息,详细说明他们选择的密码可以在众所周知的数据泄露中找到。

如果我要创建一个网站,将我的用户密码与 HaveIBeenPwned 的工具自动检查作为额外的安全预防措施并要求他们选择网站不知道的密码是不是一个坏主意?

4个回答

NIST 的最新建议(SP 800-63b 第 5.1.1.2 节;请参阅此处此处获取摘要)实际上建议根据已知受损密码列表检查用户密码,因此这样做实际上符合当前的最佳实践。它也比要求密码满足某些“规则”(NIST 现在建议反对)要好得多。HIBP 只是在实践中执行此操作的一种方式(可能也是最简单的方式)。它只需要发送密码哈希的前 5 个字母,因此对用户的实际风险几乎为零。所以是的,如果需要,请随时这样做。

至于为什么一个特定的组织可能不这样做,我敢肯定,每个站点之间的差异很大,但我认为它归结为通常的嫌疑人是一个安全的赌注:

  1. 安全是许多人喜欢忽略的领域,实施这样的系统需要额外的努力。
  2. 新的最佳实践需要时间才能成为机构的常识
  3. 机构需要更多时间才能赶上最佳实践
  4. 每个开发的功能都有成本:开发和维护的工程时间、不理解或不希望遵守规则的用户流失(h/t @Woohoojin)等。组织可能不认为增加的好处是值得的费用。

公平地说,我的系统还没有这样做,所以你可以将我添加到#3 或#4。

项目#4 更值得一提。实现这一点的成本是显而易见的——开发人员需要时间来构建和维护任何功能。收益更难量化。当然,当涉及到安全问题时,许多公司会错误地假设收益为零,因此会忽略安全性(参见第 1 点)。然而,这是一个好处可能很小的功能。与用户帐户泄露相关的业务通常会产生实际成本(更多客户支持,可能回滚交易等),但只要泄露是由于用户自己的错误(在这种情况下,由选择泄露的密码),企业不太可能承担任何直接责任,因此可能会避免任何更大的成本。因此,

因为这样做的成本是不小的:

  • 不了解 HIBP 工作原理的人会认为您没有正确处理密码(示例),您将不得不处理抱怨和错误的批评。
  • 当 HIBP API 更改或服务关闭时,您必须定期更新代码,您必须迁移到新的。
  • HIBP 的任何减速或停机时间都将意味着您自己的网站将减速。特别是如果您想继续检查现有密码以防止新的违规行为。

稍后,可能会期望一个声称认真对待安全的网站提供这样的功能。然后每个人都将实施它,因为上述成本将被看起来像一个安全网站的好处所抵消。

是的,有些公司已经实施了 HIBP 检查。

您没有放置国家/地区标签,这会影响您可以做什么或不可以做什么。不过,您似乎来自英国 - 对于以下几点,英国显然有更轻松的方式。
此外,您似乎想在登录时进行检查 - 这会使我在下面的评论变得不那么有用。

综上所述,以法国或德国为例,您需要格外小心地提出一个跟踪用户活动的解决方案。你可以拥有世界上最好的意图,有些人不会欣赏。

具体来说,如果您正在检查用户专业电子邮件的泄漏情况,那您很好(我假设您在该公司的信息安全部门工作)。您有义务保护您公司的利益,因此如果专业电子邮件(可能还有相关的密码)被滥用,那么您就处于安全状态。

小心将此检查扩展到非专业活动。您可能想建议人们根据 HIBP 检查他们的个人电子邮件,但仅此而已。

YMMV - 这是我在与法律、隐私和劳动法专家进行无数次讨论后达成的共识;每个人对这个问题都有自己的看法,所以我轻描淡写。

如果我输入密码,您在任何情况下都不应将其交给第三方。即使是散列形式。它总是会给攻击者一个机会。

现在,如果您可以获得密码数据库的完整副本,并将其与其余的密码处理代码一起存储,这样就可以在没有任何外部通信的情况下对其进行检查,那将是值得的。