信安类的专业一般接触到的都是cryptographic hash,比如MD5,SHA系列,SM3。
non-cryptographic hash指的是未解决原像问题、第二原像(弱碰撞)和强碰撞的hash函数。追求效率的应用中通常使用的是non-cryptographic hash,因为它们更快。
在Redis,Memcached,Cassandra,HBase,Lucene都使用了Murmurhash(一种non-cryptographic hash)。因此有人说non-cryptographic hash才是主流hash函数。在只需要判断数据是否发生意外变化(如CRC),或是将正常数据在尽可能少的碰撞下分桶时,这么说可能也没错。
第三个参考链接提到了一种攻击,即通过构造碰撞的key,使redis的hashtable退化为链表,从而实现DDoS。
除了murmurhash,后来又出现了更快的xxhash。
参考链接:
https://security.stackexchange.com/questions/11839/what-is-the-difference-between-a-hash-function-and-a-cryptographic-hash-function
https://zhuanlan.zhihu.com/p/198193276
https://paper.seebug.org/180/