为什么网站不实施密码错误导致 3 秒延迟的系统?

信息安全 蛮力 保护 比特币
2021-08-27 13:03:50

我现在很喜欢比特币,密码威胁让我有点害怕……

对我来说不是很多,因为我使用 LastPass 并生成 20 个字符的新密码,它包括符号、大小写字母以及数字。但是,我知道我们正在接近一个可以尝试每秒 1000 亿个密码作为蛮力的时代,我正在考虑使用 Teddy567 或 qwertyqwerty 密码的人数,我认为为了让互联网更安全,我们应该来想办法阻止蛮力攻击。

所以,你能帮我理解为什么网站不能实现 3 秒延迟或地狱,甚至任何错过密码的 1 秒延迟。在我看来,这将完全结束所有蛮力攻击。它甚至不会被人类注意到

3个回答

一般来说,raz 提出的锁定帐户是一件非常糟糕的事情——它会导致帮助台负载、惹恼客户,并且实际上不需要防止暴力攻击。

越来越多的系统使用临时暂停,通常是一些延迟来阻止暴力破解,例如 5 或 30 分钟,或者通过使用不断升级的规模,例如每次失败的登录尝试将超时时间加倍。

暴力破解通常用于离线攻击的上下文中,攻击者已经知道密码哈希,并且可以利用其系统 (GPU) 的全部功能来查找匹配的密码。

您正在谈论在线攻击,增加延迟确实会使暴力破解变得不切实际,尽管实施起来并不像听起来那么容易。然后,攻击者可以例如阻止用户成功登录。暴力破解在线系统无论如何都不允许进行足够的尝试。

在线暴力攻击

事实上,没有实施某种形式的在线暴力攻击保护的网站正在泄露用户的密码。许多站点没有任何形式的保护,而许多其他站点则有。

简单阻塞有问题:

  • 如果我们在 x 次尝试失败后阻止用户的 IP,则 10'000 强僵尸网络将尝试 x* 10'000 个密码。在 100'000 次尝试时,许多较弱的密码已经被破解。
  • 如果我们在 x 次尝试失败后阻止用户的帐户,则任何攻击者都可以阻止任何用户的帐户。

这意味着防御需要更加复杂,或者我们可以简单地忽略防御并在最终崩溃时试图责怪用户,这不合道德。更复杂的方案结合了对可疑活动的检测和有条件的更强登录要求。

为了检测可疑活动,我们会根据过去的成功登录来跟踪积极迹象,例如用户的 ISP 和用户之前登录的设备的某些标识符。我们还可以使用负面迹象,例如来自“受污染”的 ISP 或国家/地区的 IP,或者登录尝试的快速增加。

在更强的登录要求方面,我们可以使用短超时、验证码、多因素身份验证,甚至黑名单。

离线暴力攻击

一旦我们心怀不满的系统管理员在黑市上出售了我们的密码数据库的副本,上述所有措施都无济于事,因为攻击者可以自己对密码进行哈希处理,看看它是否与数据库匹配。破解散列可能很便宜也很容易,或者仍然很容易但非常昂贵,这取决于我们如何对密码进行散列 请参阅:如何安全地散列密码?

盐:为了让攻击者更难破解整个数据库,我们使用盐,这使得每个散列略微唯一。每个用户都有不同的盐,它存储在散列旁边。这意味着攻击者不能只计算一个密码的哈希值并将其与每个用户的哈希值进行比较,而是攻击者必须为他尝试针对每个用户的每个密码计算一个新的哈希值。使用盐不会增加获取单个用户密码的成本。

昂贵的哈希:没有攻击者可以每秒暴力破解 1000 亿个密码,除非哈希方案是由白痴设置的(这是合理的)。一些攻击者可以每秒计算 1000 亿个基本哈希值,如 sha256,但解决方案只是不使用基本哈希值对密码进行哈希处理。一个简单的解决方案是,我们的哈希实际上hash =sha256(password, salt)不是 ,而是hash =sha256(sha256(sha256(.......(password, salt)...)password, salt)password, salt),我们在其中使用了大约 100'000 次 sha256 迭代,使任何攻击的成本高出 100'000 倍。实际上,这种防御过于简单,无法用专用硬件破解,因此在实践中,我们使用特殊的密钥派生函数,bcryptscrypt以任何攻击者计算成本高昂的方式混合多个基本哈希,而不管硬件如何。