
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等算法。
