hash - 密码长度与 DOS 攻击
问题描述
正如我所指的密码哈希是如何工作的,有一个 owasp 博客说“如果用户可以提供很长的密码,那么就有一个潜在的拒绝服务漏洞,例如 2013 年在 Django 中发布的漏洞。”
我无法理解密码长度和 DOS 攻击之间的联系。据我所知,密码长度主要依赖于密码破解,因为长密码很难破解。\
- 但是,如果散列时间增加,由于 DOS 攻击是有效的,密码长度与密码散列时间有何关系?\
- 计算成本/散列时间是否取决于密码长度?
解决方案
如果散列时间增加,由于 DOS 攻击是有效的,密码长度如何与密码散列时间有联系?
散列时间随着要散列的字节数线性增加。一些散列函数在内部处理数据块。如果由于要散列更多数据而需要新块,则将每个块添加到散列所需的时间是恒定的。一个块不是一个或两个字符,它的大小取决于特定的哈希函数(比较)。如果使用 SHA-256(块大小为 512 位),那么最多 55 字节的密码和 56 字节的密码(这些值是由于填充)将存在可测量的时间差。
如今,密码不是一次而是多次散列,以便在带有散列的数据库“丢失”时使暴力破解更加困难。不同的哈希方案对长密码的行为不同。PBKDF2 很流行,但每次迭代都使用完整密码。这意味着更长的密码会严重增加计算时间。scrypt 也很流行,但仅在一次迭代中使用完整密码。剩余的迭代是基于大小固定的散列完成的。与 PBKDF2 相比,在 DoS 的情况下,scrypt 在服务器上更轻。我没有看过其他流行的选择。
虽然计算时间很长,但也应评估其他资源。当攻击者向服务器发送无限量的字节时,服务器必须将其存储在内存中并进行处理。有一个共识是,在任何类型的散列开始之前,这应该是有界的。1000 字节似乎是一个不错的上限。没有用户需要这么多字节,你可以走得更低。
计算成本/散列时间是否取决于密码长度?
是的,但这取决于散列使用了多少。
推荐阅读
- python - 字符串操作 像在 python 中一样重复字母
- node.js - spotify api 获取艺术家
- python - 有没有办法将函数应用于 Python 中另一个函数/方法的每个参数?
- android - Exoplayer - 如何让 exoplayer 只播放当前可见的视频
- r - ShinyApp 工作,但 runApp 没有 R
- mysql - pymysql 读取 \n 个字符。如何停止在 .sql 文件中运行的 \n 字符?
- spring-boot - Spring Boot 应用程序 - JSTL 不起作用
- powershell - 如何比较两个自定义 ps 自定义对象并根据另一个结果更改一个的值?
- .htaccess - .htaccess 文件中的重定向指令在重定向到 https 之前重定向到 http 协议
- expression - 我需要这个字符串的最佳正则表达式,最后用逗号