哈希函数在此给出SM3和Blake的对比
哈希算法 (Hash Algorithm) 是将任意长度的数据映射为固定长度数据的算法,也称为消息摘要。一般情况下,哈希算法有两个特点, 一是原始数据的细微变化(比如一个位翻转)会导致结果产生巨大差距;二是运算过程不可逆,理论上无法从结果还原输入数据。因此,哈希算法主要用于数据完整性校验和加密/签名。
哈希算法的安全性就在于碰撞难易度,即已知结果,构建出具有相同结果的输入数据的难易度。
常见的哈希算法有 MD5, SHA-1, SHA-2, SHA-3。其中 MD5 已经可以在 \(2^{21}\) 复杂度(在主流智能手机上只需30秒)内完成碰撞,谷歌也于17年早些时候在 \(2^{64}\) 复杂度(约 110 GPU年的计算量)内完成了第一次 SHA-1 碰撞。至此,MD5 和 SHA-1 已经在安全领域被废弃。
SM3
SM3是中国发布的国标杂凑密码算法,主要用于数字签名及验证、消息认证码生成及验证、随机数生成等。
SM3采用Merkle-Damgard结构,消息分组长度为512bit,输出摘要长度256bit。
方案对长度为\(l(l < 264)\) 比特的消息\(m\),SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度 为256比特。
填充 迭代压缩
SM3压缩函数整体结构和SHA-256相似,但增加了一些新技术:增加16步全异或操作,消息双子介入,增加快速雪崩效应的P置换等,能有效的避免高概率的局部碰撞,有效抵抗碰撞行的差分分析、弱碰撞性的线性分析和比特追踪法等密码分析。
SM3 密码杂凑算法合理使用字加运算, 构成进位加 4 级流水, 在不显著增加硬件开销的情况下 ,采 用 P 置 换 , 加 速 了 算 法 的 雪 崩 效 应 , 提 高 了运算效率 同时 SM3 密码杂凑算法采用了适合32bit的微处理器和8bit智能卡实现的基本运算,具有跨平台的高效性和广泛的适用性。
性能SM3整体性能和SHA-256同等条件下相似,下面和SHA-256和SHA-512对比:
(1)当消息长度为16字节,SM3执行速度是最高的。
(2)当消息长度大于等于64字节,SM3执行速度和SHA-256相当,高于其他的。
(3)X64环境下,当消息长度等于64字节,SM3执行速度和SHA-256相当,低于SHA3-256,高于SHA-512和Whirlpool。
(4)X64环境下,当消息长度大于64字节,SM3执行速度和SHA-256相当,低于SHA-512和SHA3-256,高于Whirlpool。
(1)SM3的ASIC实现面积优于其他四种算法,是性能优越的Merkle-Damgard结构的杂凑算法。
(1)SM3的FPGA实现面积由于其他四种,在Xilinx Virtex-5上的实现和性能于SHA-256相当。
标准文档:【2】
标准源码:SM3源码
当前除了 SHA-2,SHA-3 之外,还有另外一个哈希算法系列可供选择,那就是 BLAKE,BLAKE2 系列比常见的 MD5,SHA-1,SHA-2,SHA-3 更快,同时提供不低于 SHA-3 的安全性。BLAKE2 系列从著名的 ChaCha 算法衍生而来,有两个主要版本 BLAKE2b(BLAKE2)和 BLAKE2s。
BLAKE2b 为 64 位 CPU(包括 ARM Neon)优化,可以生成最长64字节的摘要;BLAKE2s 为 8-32 位 CPU 设计,可以生成最长 32 字节的摘要。
二者的衍生版 BLAKE2bp 和 BLAKE2sp 可以进行多核并行计算,在保持相同安全性的前提下,进一步提升计算速度。此外,BLAKE2 系列有一个特殊的变种,BLAKE2x,可以生成最多 4GiB 的“摘要”,可以用于 KDF(密钥派生)和 DRBG(固定随机数序列)。
BLAKE2 算法基于 BLAKE 算法,2012年被提出,也就是说在 Blake2 之前 Blake 系列算法已经产生。BLAKE 算法于2008年提出,它包含两个版本,一种基于32位消息用于产生最长256位的哈希结果,一种基于64位消息用于产生最长512位的哈希结果,BLAKE算法核心操作是不断地将8个散列中间结果和16个输入消息进行组合,从而产生下一轮组合的8个中间结果。按照最终截断的哈希长度,BLAKE-256和BLAKE-224使用32位字分别产生256位和224位的哈希结果(也称消息摘要),而BLAKE-512和BLAKE-384使用64位字并产生512位和384位哈希结果。
性能下图显示BLAKE2在Skylake Intel CPU上的性能如何优于MD5、SHA-1、SHA-2和SHA-3(速度适用于使用单核进行哈希运算;使用多核,BLAKE2可以更快):
比MD5、SHA-1、SHA-2、SHA-3和BLAKE2快得多。
更安全,不像MD5和SHA-1。和SHA-2不同,它可以防止长度延长。
可在任意数量的线程和SIMD通道上高度并行,因为它的内部是一棵Merkle树。
能够验证流媒体和增量更新,这也是因为它是一个Merkle树。
和普通的哈希函数一样,有A PRF, MAC, KDF, 和XOF
没有变体算法,在x86-64和更小的体系结构上都很快。
下面是在16 KiB的输入下,和其他算法相比的测试性能:
- 官网:Balke2
- Blake3(github):the official Rust and C implementations of the BLAKE3 cryptographic hash function
- Blake(github):SHA-3 finalist (reference code)
- Blake2(github):BLAKE2 official implementations
- Blake2论文:【3】:提出了Balke2算法,并分析其性能和安全性
- RFC 7693:The BLAKE2 Cryptographic Hash and Message Authentication Code (MAC):提出变体BLAKE2b和BLAKE2s
- BLAKE2X:提出变体BLAKE2X
- Blake3论文:提出Blake3算法
SM3总体和SHA-256相当,而Blake3总体比SHA-256更优。
参考1、SM3 密 码 杂 凑 算 法-王小云
2、SM3密码杂凑算法-国标
3、BLAKE2: simpler, smaller, fast as MD5
4、An Efficient and Low-Power Design of the SM3 Hash Algorithm for IoT
5、不仅仅只是简单的哈希函数的Blake 和 Blake2