杂凑函数的概念、性质、基本结构;常用杂凑函数的基本知识;杂凑函数应用的基本方式。
杂凑函数
Hash函数H输入可变长度的数据块M,输出固定长度的Hash值H(M)。
密码学Hash函数应用:消息认证码 ;数字签名;伪随机函数…
性质及结构
若杂凑函数h为单向函数,则h为单向杂凑函数。
无碰撞性:对单向杂凑函数h,在任意给定h(M)的情况下,找M’,使得h(M’)=h(M),在计算上不可行,则h为弱单向杂凑函数;对单向杂凑函数h,寻找任意M1, M2,M1 != M2,使得h(M1)=h(M2)在计算上不可行,则h为强单向杂凑函数。根据生日悖论,在N个元素的集合中,给定M找与M匹配的M’比从N中取任意一对元素(M,M’)匹配概率小得多。
分组迭代单向杂凑函数的结构:对于变长消息,通常先分组为固定长度的段,如m bit,将mb映射为nb,通过迭代函数E (E通常由轮函数多轮迭代实现,因此轮函数设计是分组迭代单向杂凑函数设计核心) 以最后的输出值作为整个输入的杂凑值。m>n,有数据压缩,MD5、SHA等,是不可逆映射;m=n,无数据压缩,通常分组加密使用这种映射,是单向陷门函数;m<n,有数据扩展,消息认证码通常是这种。
应用的基本方式
常用杂凑函数
MD5
输入分组大小:512bit。输入分组需要补充10000…至448bit,最后64bit填写消息长。分组:Y0,Y1…Y[L-1]。
每个分组要经过4轮运算,其中每轮运算输出128bit;每轮运算又可分为16轮迭代,共4*16 = 64次
输入分组划分:512bit输入分组,划分为16个字,每个字32bit。每次16轮迭代运算分别使用这16个字。
运算大致过程如下:
-
A、B、C、D四个32bit缓存器,初始矢量以十六进制大端序存储。
-
16*4次迭代,每次更新一个32bit字。其中每轮运算使用一个逻辑函数f,即16次迭代共用一个逻辑函数函数。每次迭代都使用一个新的SINE函数构成的T值T[i]。i=1,2…64
-
最终杂凑值(Yq表示第q个分组):
SHA-3
与MD-5类似。输入分组大小512bit,最后一组补充100…0直至448bit,最后64bit填写消息长度。
共进行4轮运算,每轮运算包含20次迭代(4*20)。共使用4个逻辑函数f,其中第四轮与第二轮相同。输入分组512bit,16个32bit字拓展为80个32bit字。使用的常数共4个,每次运算使用一个常数(即每个常数被使用20次)。输出160 bit(5个32bit缓存器)。
SM3
消息分组512bit,输出杂凑值256bit。共有ABCDEFGH,8个32字寄存器。经过填充、迭代压缩(压缩至256bit);消息扩展(16字扩展为132字);压缩函数,最终输出256bit杂凑值。
与SHA256相比,SM3算法的压缩函数每一步使用2个消息字,每一步扩展能力更强。