作者:欢不是欢7 | 来源:互联网 | 2022-12-05 16:59
我正在读一本关于HashMap
哈希函数的Rust书,我无法理解这两句话.
默认情况下,HashMap使用加密安全散列函数,可以抵御拒绝服务(DoS)攻击.这不是最快的哈希算法,但是随着性能下降而带来更好的安全性的权衡是值得的.
我知道什么是加密安全哈希函数,但我不理解它背后的基本原理.根据我的理解,一个好的哈希函数HashMap
应该只有三个属性:
确定性的(同一个对象具有相同的哈希值)
非常快
在散列值中具有均匀的位分布(意味着它将减少冲突)
在加密安全散列函数中,其他属性与散列表的99%(甚至99.99%)时间并不相关.
所以我的问题是:"对DoS攻击和更好的安全性的抵抗"甚至意味着在HashMap的背景下?
1> Matthieu M...:
让我们开始向后:你如何做HashMap?
多年来,基于Hash Flooding的各种软件堆栈遭到多次攻击.如果您知道某个站点是由哪个框架提供支持的,因此使用了哪个哈希函数,并且此哈希函数不具有加密安全性,那么您可以预先计算一组大量字符串哈希到相同的数字.
然后,您只需将此集合注入站点,并且对于每个(简单)请求,它执行不成比例的大量工作,因为插入N个元素需要执行O(N 2)操作.
Rust是在后见之明的情况下构思出来的,因此默认情况下注意避免这种攻击,并推断真正需要性能的用户HashMap
只需切换哈希函数即可.