ChargeHash——一种新的32位最小哈希算法

本文介绍了ChargeHash,一种新的32位最小哈希算法,它支持双线程单字节处理,提供了高速度和良好的兼容性,同时具备一定的安全性。文章还对比了其他非密码学和密码学哈希算法,如CRC32、FNV1a等。
摘要由CSDN通过智能技术生成

1. 引言

哈希函数有多种,可分为:

  • 1)面向数据的哈希算法
    • 数据独立哈希算法
    • 数据依赖哈希算法
  • 2)面向安全的哈希算法
    • 密码学安全哈希算法:意味着无法从数学上根据哈希结果,获得原始数据。且无法预测哈希结果中任意bit的改变。
    • 密码学不安全哈希算法
      在这里插入图片描述

哈希算法也用于hash tables,仅需要确保避免哈希碰撞即可。为此,需要一种快速的面向数据的哈希算法,当前流最流行的面向数据的哈希算法有:

  • xxHash64
  • City64
  • Mumur
    在这里插入图片描述

William Stafford Parsons 于最近提出ChargeHash哈希算法,为:

  • 一种新的32位最小哈希算法,具备双线程单字节处理。
  • 对32位系统和64位系统都可移植
  • 不使用模、乘法或除法算术运算:关键点在于这,使得可一次性处理。
  • 输入字节按字节处理,并在2个具有64位状态的CPU线程之间分割:可运行为2个主线程,使得其在具有2个CPU的系统上运行会更快。
  • 满足所有设备的合规性、可移植性和安全性要求
  • 被设计为CRC32、FNV1a、Jenkin的更高指令、更快速替代方案。
    • 速度比CRC32快1.5倍
    • 是FNV1a速度的0.8倍
    • 与Jenkin速度相当
  • 每个32位摘要均受64位安全性保护,可在不产生太多开销的情况下,缓解preimage攻击:将其状态以64 bit state value表示,可运行在32位或64位系统(x86和x64)。
  • 通过了所有SMHasherextended SMHasher的“excessive torture”测试,可能是通过所有测试的最小哈希算法。当使用32位种子初始化状态或辅助变量时,大多数测试都会通过。

开源代码实现见:

程序:

uint32_t chargehash(const unsigned long input_count, const unsigned char *input) {
  uint32_t state = 0;
  uint32_t auxiliary = 0;
  unsigned long i = 0;

  while (i != input_count) {
    state += (state << 11) | (input[i] + 1111);
    state ^= state >> 5;
    auxiliary += ((auxiliary << 8) | input[i]) + 1;
    i++;
  }

  state += (((state << 9) | (state >> 23)) + state) << (17 - (state & 3));
  auxiliary += (auxiliary << 11) | 1111;
  state += auxiliary >> 6;
  state ^= state >> 5;
  state ^= (((state << 21) | (state >> 11)) - state) >> (13 - (state & 7));
  state += state << 15;
  state += (state >> 7) + (auxiliary >> 2) + auxiliary;
  return state;
}

输出结果:

=== ChargeHash ===
Message: The quick brown fox jumps over the lazy dog
Output: 6ea6c870

由此可知,输出为4字节,32bit。

2. 其它非密码学哈希算法

其它非密码学哈希算法有:

  • Perfect hash:为优化hash value的非密码学哈希
  • Universal hash:与universal hash概念相关
  • FNV:为最快的哈希算法之一
  • Murmur:为最快的哈希算法之一
  • Siphash:为一种快速哈希算法
  • Spooky:为一种快速哈希算法
  • xxHash:为最快的哈希算法之一
  • Meow:为最快的哈希算法之一
  • o1Hash:为最快的哈希算法之一
  • CRC-32:为最快的哈希算法之一
  • wyhash:为最快的哈希算法之一
  • CityHash:为最快的哈希算法之一,且无安全性问题
  • FarmHash:为最快的哈希算法之一,且无安全性问题
  • Non-crypto:包含了一组快速non-cryptography哈希算法:Farm, City, xxHash, MUM, Spooky 2, Murmur and Metro。
  • Pearson:为最快的哈希算法之一,针对8位处理器设计。
  • t1ha:为最快的哈希算法之一,针对64位处理器设计。
  • Spooky:为最快的哈希算法之一,具有32位、64位和128位版本。
  • xxHash:为最快的哈希算法之一,对短数据输入具有很好的性能。
  • 等等。

参考资料

[1] William Stafford Parsons 2024年4月16日博客 ChargeHash is a New Tiny 32-Bit Hashing Algorithm With Dual-Threaded Single-Byte Processing
[2] Prof Bill Buchanan OBE FRSE 2024年4月22日博客 ChargeHash
[3] Prof Bill Buchanan OBE FRSE 2021年8月11日博客 For Hashing, The Fastest of the Fastest? … Meet t1ha

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值