hashdos_调查HashDoS问题

本文深入探讨了哈希索引数据结构,尤其是Java中的`java.util.HashMap`和`java.util.Hashtable`如何受到HashDoS攻击的影响。攻击者通过计算大量冲突关键字来降低数据结构性能,导致CRUD操作速度显著下降。建议开发者了解实现细节,谨慎处理输入数据,以提高系统安全性。
摘要由CSDN通过智能技术生成

hashdos

近一个月前,我就如何在不与供应商互动的情况下临时 解决 28C3上出现的 HashDoS问题或其他代码缺陷发表了一些想法。

现在是时候更深入地研究复杂性攻击并查看源了。 我完全假设java.util.HashMapjava.util.Hashtable是受此攻击影响的最常用的Java数据结构,因此本文仅将代码集中在这些类型的后面。

哈希函数和索引数据结构的简要介绍

哈希索引数据结构因其简单的用法和优点而非常受欢迎:

  • 无需打扰索引表即可找到所需数据的正确位置
  • 通过使用关键字而不是索引号访问数据
  • 添加或删除操作的时间几乎恒定

为了获得这些好处,哈希索引数据结构遵循有关如何索引数据的聪明思想。 索引是通过散列与背后数据关联的关键字来计算的。 考虑以下示例,这是一个类似于代码的简单示例:

myHashIndexedDataStructure [hash(keyword)] =特定数据

听起来很完美,但是它有一个主要缺点:在大多数情况下,使用的哈希函数不是加密函数。

根据Wikipedia的说法,函数本身调用哈希函数的唯一强制特征是

“将可变长度的大型数据集(称为键)映射到固定长度的较小数据集”

与称自己为密码哈希函数(再次是来自Wikipedia的定义)相反,它必须满足更多,甚至更强大的要求:

  • 计算任何给定消息的哈希值很容易(但不一定很快)
  • 生成具有给定哈希值的消息是不可行的
  • 在不更改哈希的情况下修改消息是不可行的
  • 找到两个具有相同哈希值的不同消息是不可行的


长话短说,让我们总结一下我们学到的知识以及用这些知识可以得出的结论:

  1. 哈希索引数据结构利用哈希函数
  2. 哈希函数不一定是抗冲突的,只要它们不是加密的
  3. 缺乏抗碰撞性意味着可以轻松计算具有相同哈希值的多个值

如果关键字冲突,则哈希索引数据结构需要某种计划b)–一种后备算法–关于如何处理具有相同关键字哈希值的多个数据集。

实际上,有几种可行的方法:

  • 探测(转移到固定或可计算的间隔)
  • 多重哈希
  • 条目链接ÿ
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值