协议标准:https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf
SHA3的算法处理类似于SHA1/2,整个处理过程可归纳为:
- 消息填充和消息分组:
在原始消息后填充一个1、最小个数的0和一个1,即:100..001,使填充后的消息是r的整数倍。填充的比特长度至少是2比特,最多是r+1比特。
记填充后的消息为P,n=len(P)/r。即将P分为n段,记为P=P0||P1||...||Pn。
- 迭代过程
SHA3处理过程中涉及的数据存储格式:
SHA3处理过程分吸收和挤压两个阶段。
吸收阶段:
1. 将S初始化为零,记初始状态为S0。
2. 进行24轮f函数运算,Si+1=f(Si ⊕( Pi ||0^c ))。
f函数分成如下5个小步骤:
挤压阶段:
挤压阶段每一个f函数数之后生成r比特的摘要,将生成的摘要进行拼接,直到生成摘要的长度大于需要的摘要长度。
因为SHA3算法r比特大于输出摘要的长度,所以挤压阶段f函数执行轮数为0