首页 > 解决方案 > 密码长度与 DOS 攻击

问题描述

正如我所指的密码哈希是如何工作的,有一个 owasp 博客说“如果用户可以提供很长的密码,那么就有一个潜在的拒绝服务漏洞,例如 2013 年在 Django 中发布的漏洞。”
我无法理解密码长度和 DOS 攻击之间的联系。据我所知,密码长度主要依赖于密码破解,因为长密码很难破解。\

  1. 但是,如果散列时间增加,由于 DOS 攻击是有效的,密码长度与密码散列时间有何关系?\
  2. 计算成本/散列时间是否取决于密码长度?

标签: hashpasswordscracking

解决方案


如果散列时间增加,由于 DOS 攻击是有效的,密码长度如何与密码散列时间有联系?

散列时间随着要散列的字节数线性增加。一些散列函数在内部处理数据块。如果由于要散列更多数据而需要新块,则将每个块添加到散列所需的时间是恒定的。一个块不是一个或两个字符,它的大小取决于特定的哈希函数(比较)。如果使用 SHA-256(块大小为 512 位),那么最多 55 字节的密码和 56 字节的密码(这些值是由于填充)将存在可测量的时间差。

如今,密码不是一次而是多次散列,以便在带有散列的数据库“丢失”时使暴力破解更加困难。不同的哈希方案对长密码的行为不同。PBKDF2 很流行,但每次迭代都使用完整密码。这意味着更长的密码会严重增加计算时间。scrypt 也很流行,但仅在一次迭代中使用完整密码。剩余的迭代是基于大小固定的散列完成的。与 PBKDF2 相比,在 DoS 的情况下,scrypt 在服务器上更轻。我没有看过其他流行的选择。

虽然计算时间很长,但也应评估其他资源。当攻击者向服务器发送无限量的字节时,服务器必须将其存储在内存中并进行处理。有一个共识是,在任何类型的散列开始之前,这应该是有界的。1000 字节似乎是一个不错的上限。没有用户需要这么多字节,你可以走得更低

计算成本/散列时间是否取决于密码长度?

是的,但这取决于散列使用了多少。


推荐阅读