哈希长度扩展攻击简单的来讲就是:
- 知道一个密文(SECRET)的哈希
- 知道密文的长度(SECRET LENGTH)
然后在不知道密文的情况下可以推算出密文+填充+追加消息(SECRET+PADDING+EXTRA)的哈希,也就是说在只知道密文长度和密文哈希的情况下,可以预测出密文和另一消息拼接后的哈希
易受哈希长度扩展攻击的哈希算法: SHA 系列和 MD 系列。这两个系列的哈希算法都有一个共同点——基于 Merkle –Damgård构造。
Merkle–Damgård算法的流程如下:
- 把消息划分为 n 个消息块
- 对最后一个消息块做长度填充
- 每个消息块都会和一个输入向量做一个运算,把这个计算结果当成下个消息块的输入向量
MD5
MD5 加密过程:
- MD5加密过程中 512bit (64byte)为一组,属于分组加密,在加密运算过程中,将512bit 分为 16 块32bit,进行分块运算
- MD5的填充,也叫补位,即对加密的字符串进行填充( bit 第一位为 1 其余比特为 0 ),使之(二进制)对 512 取模后的值为 448 ,即长度为 512 的倍数减 64 ,最后的 64 位再补充为原来字符串的长度,这样刚好补满 512 位的倍数,如果当前明文正好是 512bit 的倍数则再加上一组512bit
- MD5无论如何加密, 每一块加密得到的密文将作为下一次加密的初始向量IV