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

"Breaking 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并实现一个替代哈希函数。

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