密码长度与 DOS 攻击

问题描述

当我指的是密码散列的工作原理时,有一个 owasp 博客说“如果用户可以提供很长的密码,那么存在潜在的拒绝服务漏洞,例如 2013 年在 Django 中发布的那个。”
我无法理解密码长度和 DOS 攻击之间的联系。据我所知,密码长度与密码破解有很大的关系,因为长密码很难破解。 \

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

解决方法

密码长度如何与密码散列时间有关,因为如果增加散列时间,DOS攻击是有效的?

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

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

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

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

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