在2007年,NIST开始向全球公开征集SHA-3标准,最终Keccak算法当选SHA-3标准。但在海选中也同样存在着少优秀的哈希函数,Blake就是其中之一。今天我们就一起来了解一下Blake算法。

Blake算法简介

Blake算法是基于ChaCha流密码和采用标准HAIFA迭代模式的SHA-3候选算法之一,虽然最终没能当选,但它依旧是非常优秀的。它比常见的 MD5、SHA-1、SHA-2算法更快,同时可以提供不低于SHA-3的安全性。因此,它可以在不耗费更多资源的情况下提供更好的安全性,是一个强调快速、安全与简单的哈希算法。

Blake算法

Blake算法流程

Blake的主要计算流程有两个,分别是预处理过程和轮循环计算,和SHA不同的是,Blake不需要对变量进行初始化,在轮循环计算过程,需要把计数器值、盐值、常量和输入消息加入轮循环计算中,按照压缩计算法进行计算,每一轮生成的状态变量用于下一轮循环计算。

预处理过程

前三步和SHA2的算法一样,只有变量初始化

  1. 信息填充;
  2. 分割消息块;
  3. 变量初始化。

Blake算法

通过公式计算出16个V,其中,计数器T的选取原则是当最后一个消息块不包含输入消息的比特数时,则计数器为0;前面计数器的值为相应消息块中包含原始消息块中比特数的累加。另外,盐值S和常量C均为自定义,一般选取固定的。

循环压缩计算

16个变量V,作为14轮循环压缩的输入,每一轮的循环压缩表示为:

Blake算法

第r轮的第i个G功能函数的计算规则如下:

Blake算法

其中“+”表示模加运算,“>>>”表示有循环移位,σ是输入的16个消息字或者常量的第几个消息字,可以根据表格进行置换:

Blake算法

置换规则中r最大是10,后四轮的规则是当前循环数 mod 10 所得,如:第13轮的置换规则是σ13 mod 10=σ3。

最后经过14轮循环压缩得到16个变量,V0—V15,运算之后得到最终哈希值:

Blake算法

其中:0≤i≤7 , j= i mod 4,h_i^r表示第r轮哈希值的第i个字。

Blake算法的优缺点

Blake算法拥有安全、快速的优势,并且算法比较简单,但它没有当选SHA-3标准的原因是NIST认为Keccak更具有抗ASIC的能力,并且Blake的计算流程和结构与SHA-2过于类似。

免责声明:素材源于网络,如有侵权,请联系删稿。