1 简介
哈希算法 (Hash Algorithm) 是将任意长度的数据映射为固定长度数据的算法,也称为消息摘要。
一般情况下,哈希算法有两个特点:
原始数据的细微变化(比如一个位翻转)会导致结果产生巨大差距
运算过程不可逆,理论上无法从结果还原输入数据
因此,哈希算法主要用于数据完整性校验和加密/签名。而哈希算法的安全性就在于碰撞难易度,即已知结果,构建出具有相同结果的输入数据的难易度。
2 BLAKE
BLAKE算法于2008年提出,它包含两个版本,一种基于32位word用于产生最长256位的哈希结果,一种基于64位word用于产生最长512位的哈希结果,BLAKE算法核心操作是不断地将8个散列中间结果和16个输入word进行组合,从而产生下一轮组合的8个中间结果。按照最终截断的哈希长度,BLAKE-256和BLAKE-224使用32位字分别产生256位和224位的哈希结果(也称消息摘要),而BLAKE-512和BLAKE-384使用64位字并产生512位和384位哈希结果。算法核心变量如下:
1 typedef struct
2 {3 uint32_t h[8], s[4], t[2];4 intbuflen, nullt;5 uint8_t buf[64];6 } state256;7
8 typedef state256 state224;9
10 typedef struct
11 {12 uint64_t h[8], s[4], t[2];13 intbuflen, nullt;14 uint8_t buf[128];15 } state512;16
17 typedef state512 state384;18
19 const uint8_t sigma[][16] =
20 {21 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},22 {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3},23 {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4},24 { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8},25 { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12