本文为对结城浩所著 《图解密码技术》一书中论述的SHA-3在2012年确定的标准算法Keccak用更简洁的方式描述下,力求让无专业数学的朋友们也能了解算法过程。
(图一)Keccak过程:将需要Hash运算的消息补全并分为r个bit的最小整数倍个输入分组;用全0的r个bit与输入分组进行XOR异或操作,再补充c个干扰bit一起输入函数f( )中进行运算;运算结果继续与后续分组进行同样处理。在输入分组处理完后形成输出分组,根据需要的Hash散列结果长度再通过函数f( )获得多个输出分组。
(图三)至(图七)为函数f( )算法。算法基本思想是用小正方体组成的长方体去装载b个bit,每个小正方体里装载一位bit。函数要对所装载的这些bit循环处理24轮,每轮5个步骤。
图(三)第一步骤:在(X,Y)切面,对每个bit,用与该点位置不同的两列各自5个bit异或相加后,再与改bit异或运算。
图(四)第二步骤:各(Y,Z)切面中所有bit,沿Z轴进行平行移动。
图(五)第三步骤:在(X,Y)切面,对所有bit进行移位互换。
图(六)第四步骤:对与X轴平行的每一行,将每一bit与另外两个bit计算结果再进行异或操作,得到新的行。
(图七)第五步骤:亦即每轮最后,用一串常数对与Z轴平行的每道的所有bit进行异或操作。