什么是哈希洪水攻击(Hash-Flooding Attack)?

本文深入解析哈希洪水攻击,探讨其原理如何利用数据结构弱点,以及如何通过改进哈希算法和使用密钥哈希来防御。还提及了Java和Google等的解决方案。

如果一名程序员想要接触信息安全的话,哈希洪水攻击我是一定会重点圈出来的。一方面是因为它的原理非常简单,只要掌握一点数据结构方面的基本知识就能理解;另一方面是因为,它是我入坑以来对我启发最大的技术之一,从中不仅可以学到一项具体的攻击技术,还可以看到“软件开发从业人员”和“信息安全从业人员”之间决定性的分野。

比较遗憾的是,国内互联网上真正搞懂这项攻击的人不多。虽然有几篇不错的文章讲清了它的攻击原理,但他们给出的防御手段也不过是“限制参数个数”、“禁止不明用户提交数据”之类的东西,无法从根本上解决哈希洪水攻击。所以我才决定这几天抽时间写篇长文回答,讲讲哈希洪水攻击的攻与防。

顺便一提,我没记错的话,阿里还曾经拿这个问题做过面试题,这个选题可以说是很有品味了。


0x01 哈希洪水攻击的成因

哈希洪水攻击(Hash-Flooding Attack)是一种拒绝服务攻击(Denial of Service),一旦后端接口存在合适的攻击面,攻击者就能轻松让整台服务器陷入瘫痪。

那么,所谓的“合适的攻击面”到底指什么呢?我们先来复习一下本科水平的数据结构知识吧。

在各种常用的数据结构里,有些数据结构的“平均运行时间”和“最差运行时间”会差很远,比如哈希表(Hash Table)。假设我们想要连续插入 个元素到哈希表中:

  • 如果这些元素的键(Key)极少出现相同哈希值,这项任务就只需 的时间。
  • 如果这些键频繁出现相同的哈希值(频繁发生碰撞),这项任务就需要 的时间。

这应该是每个学过数据结构的学生都知道的常识,不过大部分人看过之后就很快忘掉了。

2003年,Scott A. Crosby 和 Dan S. Wallach 两位研究人员发表了一篇论文:

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被大佬糊弄的只会点灯的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值