压缩函数的4轮处理过程结构一样,每一轮由20步迭代组成(如图6-7)但所用的基本逻辑函数不同,分别表示为f1、f2、f3、f4。每轮的输入为当前处理的消息块mj和缓冲区的当前值A、B、C、D、E,输出仍放在缓冲区以替代A、B、C、D、E的原有值,第4轮的输出(即第80步迭代的输出)再与第1轮的输入按模232相加,相加的结果即为压缩函数HSHA的输出。
在SHA-1压缩函数80步迭代中,每一步迭代运算过程如图6-8所示,每一步迭代运算的形式为
(A,B,C,D,E)←((E+ft(B,C,D)+(A<<5)+Wt+Kt),A,(B<<30),C,D)
分开表述为
A=E+ft(B,C,D)+(A<<5)+Wt+Kt
B=A
C=B<<30
D=C
E=D
其中
A、B、C、D、E为缓冲区的5个字;
t是迭代的步数(0≤t≤79);
ft(B,C,D)是第t步迭代使用的基本逻辑函数;
<<S为循环左移S位;
Wt是由当前512bit的消息块导出的一个32bit的字;
Kt是加法常量;
+是模232加法。(www.xing528.com)
逻辑函数ft(B,C,D)的输入为3个32bit的字B、C、D,输出是一个32bit的字,其中的运算为逐比特逻辑运算。逻辑函数的定义如下:
在逻辑函数中出现的符号定义如下:
X∧Y:X和Y进行逻辑与运算。
X∨Y:X和Y进行逻辑或运算。
X⊕Y:X和Y进行逻辑异或运算。
:X的逻辑补运算。
图6-8 SHA-1压缩函数中的一步迭代运算
在SHA-1压缩函数的每轮处理过程中有一个加法常量Kt,其中0≤t≤79表示迭代的步数。80个常量中实际上只有4个不同取值,它们是
Wt(32bit)由当前的输入消息块mj(512bit)导出。W0,W1,…,W15这前16个值直接取输入消息块的16个相应的字,剩下的值W16,W17,…,W79取法如图6-9所示。SHA-1将输入消息块的16个字扩展成80个字以供压缩函数使用,使得寻找具有相同压缩值的不同的消息块极为困难。
图6-9 SHA-1压缩函数中的一步迭代运算
设mj=M0‖M1‖…‖M15,其中每一个消息子块Mi都是长度为32bit的字。用以下方法将消息块从16个32bit的字变成80个32bit的字。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。