2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅关于 页面了解此功能的更多信息。

0
Clojure
Clojure 以 Murmur3 自始至终使用
https://github.com/clojure/clojure/commit/dff9600387b962f16fc78e6477e10e34651fd366

DJB、Jean-Philippe Aumasson 和 Martin Boßlet 已经表明,Murmur3 针对哈希冲突攻击缺乏弹性
http://www.ocert.org/advisories/ocert-2012-001.html
https://131002.net/siphash/

DJB、Jean-Philippe Aumasson 和 Martin Boßlet 的“哈希洪水 DoS 重新加载:攻击和防御”演讲
http://media.ccc.de/browse/congress/2012/29c3-5152-en-hashflooding_dos_reloaded_h264.html

"破坏 Murmur:哈希洪水 DoS 重新加载"
http://emboss.github.io/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/

Python、Ruby、JRuby、Haskell、Rust、Perl、Redis 等都已切换到 SipHash
https://en.wikipedia.org/wiki/SipHash

去年 Google 从 Guava 中删除了 CityHash 并用 SipHash 取代
https://code.google.com/p/guava-libraries/issues/detail?id=1232

SipHash Guava 实现
https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/hash/SipHashFunction.java

SipHash Java 参考实现
https://github.com/emboss/siphash-java/blob/master/src/main/java/com/github/emboss/siphash/SipHash.java

3 个答案

0

评论者:alexmiller

谢谢,我们已经讨论了这个问题和一些可能的做法,但我们还没有为这个问题创建工单。

0

评论者:alexmiller

虽然Java 7方法依赖于(尝试)用字符串哈希码正确初始化哈希表,但在Java 8中这已被放弃,Java 8通过改进数据结构,将线性冲突改为红黑树(对数时间)来处理DoS冲突哈希攻击。可能类似的策略在Clojure中也能生效。

现在可以采用的一种解决方案是,将映射键包裹在一个实现了IHashEq并实现了替代哈希函数的自定义类型中。

0
by
参考:[https://clojure.atlassian.net/browse/CLJ-1431](https://clojure.atlassian.net/browse/CLJ-1431)(由alex+import报告)
...