哈希长度扩展攻击简单的来讲就是:

  1. 知道一个密文(SECRET)的哈希
  2. 知道密文的长度(SECRET LENGTH)

然后在不知道密文的情况下可以推算出密文+填充+追加消息(SECRET+PADDING+EXTRA)的哈希, 也就是说在只知道密文长度和密文哈希的情况下,可以预测出密文和另一消息拼接后的哈希

易受哈希长度扩展攻击的哈希算法:SHA系列和MD系列。这两个系列的哈希算法都有一个共 同点——基于Merkle–Damgård构造。

Merkle–Damgård算法的流程如下:

  1. 把消息划分为n个消息块
  2. 对最后一个消息块做长度填充
  3. 每个消息块都会和一个输入向量做一个运算,把这个计算结果当成下个消息块的输入向量

MD5

MD5 加密过程:

  1. MD5加密过程中512bit(64byte)为一组,属于分组加密,在加密运算过程中,将512bit 分为16块32bit,进行分块运算
  2. MD5的填充,也叫补位,即对加密的字符串进行填充(bit第一位为1其余比特为0),使 之(二进制)对 512 取模后的值为 448 ,即长度为512的倍数减64,最后的64位再补充 为原来字符串的长度,这样刚好补满512位的倍数,如果当前明文正好是512bit的倍数则 再加上一组512bit
  3. MD5无论如何加密, 每一块加密得到的密文将作为下一次加密的初始向量IV