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中可能也有类似的方法可以工作。

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

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