-
-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Why use siphasher? #3
Comments
We need collision resistance because we assume that hash collisions never happen. I don't know about aHash, but FnvHash and FxHash are not designed for such use cases. The decision to use SipHash follows rustc's incremental compiler: rust-lang/rust#107925 |
It seem as ahash would not be suitable then, they use a u64 hash, but their hash quality seem to be better then FnvHash |
SipHash128 is not a collision-resistant hash function. If you read the original SipHash whitepaper they even say that it is "obvious" that it is not.
See rust-lang/rust#10389 for extensive discussion. From your source code: Lines 22 to 27 in 1275982
Even when used with a CSPRNG-provided random key, the original use case for SipHash was hash functions, which do a full equality check done after the hash equality check, to verify there are no collisions. |
The idea here isn't that an attacker can't find a collision, but rather than we don't run into a collision accidentally. Reading this comment rust-lang/rust#10389 (comment), it appears that 128-bit SipHash gives us that. |
I admit that the docs don't make that fully clear. |
Hello,
I was just wondering why specificaly this library use siphash as the default hashing algorithm?
As we hash u128 I think
ahash
would be a good alternative as it seem to be upwards of 20x faster for those sizesThe text was updated successfully, but these errors were encountered: