一 什么是Keccak
Keccak是一种被选定为SHA-3标准的单向散列函数算法。
Keccak可以生成任意长度的散列值,但为了配合SHA-2的散列值长度,SHA-3标准中规定了SHA3-224、SHA3-256、SHA3-384、SHA3-512这4种版本。在输入数据的长度上限方面,SHA-1为2的64次方-1比特,SHA-2为2的128次方-1比特,而SHA-3则没有长度限制。
此为,FIPS 202还规定了两个可输出任意长度散列值的函数,分别为SHAKE128和SHAKE256。据说SHAKE这个名字取自Secure Hash Algorithm与Keccak这几个单词。
顺便一提,Keccak的设计者之一Billes Van Assche在Github上发布了一款名为KeccakTools的软件。地址如下:https://github.com/KeccakTeam/KeccakTools
二 海绵结构
Keccak采用了与SHA-1、SHA-2完全不同的海绵结构,如下图:
Keccak的海绵结构中,输入的数据在进行填充之后,要经过吸收阶段和挤出阶段,最终生成输出的散列值。
“海绵结构”这个名字听上去有点奇怪,可以想象以下将一块海绵泡在水里吸水,然后再将里面的水挤出来的情形。同样地,Keccak的海绵结构是先将输入的消息吸收到内部状态,然后再根据内部状态挤出相应的散列值。
1