Questioning the Criteria for Evaluating Non-Cryptographic Hash Functions
cacm.acm.org
cacm.acm.org
The author of the linked article seems to be missing a _bafflingly_ _large_ amount of context from the last decade of people writing and testing hash functions.
Hell, Murmur2 is deprecated - they should've done their test with Murmur3. And none of the other hashes invented since then have been mentioned.
Was this article actually written years and years ago and just republished with a new date?
It does look like an article written more than 10 years ago.
As a self-plug for a related topic, I think going forward we should also take into account HashDoS for non-cryptographic hash functions. All of the hashes mentioned in the article are vulnerable to this, see https://orlp.net/blog/breaking-hash-functions/ for some techniques.
Even non-cryptographic functions can benefit from the same kinds of threat modeling and carefully attention to selection criteria common in crypto. The risk for failing is that you end up with something as catastrophically flawed as boost's hash_combine [0].
[0] https://www.boost.org/doc/libs/1_70_0/doc/html/hash/referenc...
[]: https://github.com/boostorg/container_hash/commit/40ec854466...
I wasn't aware boost had changed it, but the solution I settled on was essentially identical to what boost came to here. There's some further issues with that system in that the mixing functions aren't ideal for all bitlengths T. The way they're using it here is safe, but it annoyed me enough to devise a class of mixing functions with provably max length periods for all sizes T (at the cost of some mixing quality). Haven't published that crate yet because I'm not sure who else would want it.
This probably made the analysis easier, but if you don't use these archaic hash tables it is unclear how valuable these results are. Maybe I should go measure :/