概念:Hash函数又称为哈希函数、散列函数,是将任意长度的消息输出为定长消息的函数。主要用于构建数据的“指纹”,以此标记数据,广泛应用于数据完整性、数字签名、消息认证等。形式为:
特性:
- 单向性:已知x,求m在计算上是不可行的。
- 抗碰撞性:对于任意给定的消息m,如果找到另一不同消息m`,使得h(m)=h(m`)在计算上是不可行的。
1. MD5算法
MD5算法由MD2、MD3、MD4发展而来,其消息分组长度为512bit,生成128bit的摘要。2004年,王小云教授找到了MD5碰撞,并有专家据此伪造了标准的X.509证书,实现了真实攻击。
2. SHA-1算法
SHA-1算法的输入是长度小于264bit的任意消息,输出160bit的摘要。同样是王小云教授找到了SHA-1算法的碰撞。
算法步骤:
- 填充报文。
- 初始化缓冲:初始化5个32bit的寄存器,具体值如下:
寄存器 | 值(左边为有效高位、右边为有效低位) |
A | 67 45 23 01 |
B | EF CD AB 89 |
C | 98 BA DC FE |
D | 10 32 54 76 |
E | C3 D2 E1 F0 |
3. 循环生成摘要,每次循环处理512bit的分组。摘要算法核心是具有4轮操作的压缩函数。每轮操作对A、B、C、D、E中的3个做一次非线性函数运算,然后做移位和加运算。
4. 输出结果。