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

去年谷歌从 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的定制类型包装map键,并实现一个替代的哈希函数。

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