Hash函数按照其安全性可分为(弱)无碰撞的Hash函数和强无碰撞的Hash函数。通常说的无碰撞指的是强无碰撞。
Hash函数
HASH概念:
长消息生成固定长度的短字符串。
设 H 表示一个散列函数, Γ (大写伽马)是输入长度的上界, γ (小写伽马)是比Γ小得多的固定的输出长度
- 强无碰撞:很难找到两个消息x和y具有相同的散列,即H(x) = H(y)
- 无碰撞:给定一个消息 x,满足|x| ≤ Γ, 找到另一个不同的消息y (|y| ≤ Γ)与x具有相同的散列值,即H(x) = H(y),是困难的
注:不满足强无碰撞性,并不意味着不满足无碰撞性。也就是说,强无碰撞性最容易被攻破。。
比如,MD5 (γ =128bit)已被证明不能满足强无碰撞性,
MD5(M1)=MD5(M2),即给定消息M1,能够计算获取M2,使得M2产生的散列值与M1产生的散列值相同。
但还未被证明不满足无碰撞性。
当前主流散列函数SHA-512(γ =512bit)、WHIRLPOOL(γ =512bit).它们的共性特定是输入2个值输出一个值,输出的值是最后一轮运算的hash值。
2.SHA512
输入512bitIV和切分成1024bit明文块的明文,输出512bit。
其中,SHA-512算法如下:
设 X = X1X2…Xk, Y = Y1Y2