Hash函数的构造方法主要含以下三种。
1.基于公钥密码的构造方法
设明文M=m1m2…mn,将公钥密码体制作为基础,用公钥PK及初始变量IV,借助CBC加密消息分组m1,m2,…,mn,得到密文分组c1,c2,…,cn。
即使有合理的假设,可说明此类Hash函数是安全的,但因其计算效率太低,所以此类Hah函数并无实用价值。
2.基于分组密码的构造方法
设明文M=m1,m2,…,mn,用分组密码体制的CBC模式,输入初始变量IV与对称密钥k,加密消息分组m1,m2,…,mn,得到密文分组c1,c2,…,cn。把输出的最后的密文分组cn当做Hash函数的输出值H(M)。
通常,也可以使用CFB(密文反馈模式)或KBC(密钥链接模式)加密产生消息摘要。如果使用KBC模式时,可以把明文分组m1加密得到的密文分组c1作为密钥去对m2加密,用得到的结果c2作为密钥,再对m3加密,这样下去,直到最后得到mn,的密文cn,则cn就是所求得的消息摘要。
基于分组密码的CBC、CFB与KBC工作模式的Hash函数中,密钥k是不可以公开的。若密钥k公开,就会促使攻击者构造消息碰撞特别轻易。
3.直接构造Hash函数
直接构造Hash函数不是基于所有假设与密码体制,它是借助直接构建复杂的非线性关系达到单向性要求来设计单向Hash函数。典型的这类Hash函数有MD4、MD5、SHA-1、SHA-256等算法。