我正在读一本关于 HashMap
的 Rust 书 hashing functions ,我看不懂这两句话。
By default, HashMap uses a cryptographically secure hashing function that can provide resistance to Denial of Service (DoS) attacks. This is not the fastest hashing algorithm available, but the trade-off for better security that comes with the drop in performance is worth it.
我知道什么是加密安全散列函数,但我不明白其背后的基本原理。根据我的理解,HashMap
的一个好的哈希函数应该只有三个属性:
- 确定性(同一对象具有相同的哈希值)
- 要非常快,
- 在散列值中具有均匀分布的位(意味着它将减少冲突)
在 99%(甚至可能是 99.99%)的时间内,哈希表的其他属性在加密安全哈希函数中并不真正相关。
所以我的问题是:什么是“抵抗 DoS 攻击和更好的安全性” "甚至在 HashMap 的上下文中是什么意思?
最佳答案
让我们从头开始:您如何对 HashMap 进行 DoS?
多年来,针对各种基于Hash Flooding的软件堆栈的攻击已经多次发生。 .如果您知道站点由哪个框架提供支持,因此使用了哪个散列函数,并且该散列函数在密码学上不安全,那么您可以离线预先计算一大组字符串散列为相同的数字。
然后,您只需将这个集合注入(inject)网站,对于每个(简单的)请求,它都会做大量的工作,因为插入 N 个元素需要 O(N2) 次操作。
Rust 的构想是事后诸葛亮,因此注意避免这种攻击默认,理由是真正需要 HashMap
性能的用户会简单地切换哈希函数。
关于hashmap - 为什么 HashMap 需要加密安全的哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52184366/