原理
MAC算法(Message authentication codes (MACs)一般是为:md5(salt+data)
哈希摘要算法,如MD5、SHA1、SHA2等,都是基于Merkle–Damgård结构。当知道hash(salt+data)的值及salt长度的情况下,可以轻松推算出hash(salt + data+padding+m)。m是任意数据,可以为空,padding是salt后的填充字节。hash的padding字节包含整个消息的长度,因此,为了能准确计算出padding的值,salt的长度我们也是需要知道的。
当我们填充后,服务器算出的原始hash值,正好与我们添加扩展字符串并覆盖初始链变量所计算出来的一样。这是因为攻击者的哈希计算过程,相当于从服务器计算过程的一半紧接着进行下去。
影响范围
- 受影响哈希:
MD4、MD5、RIPEMD-160、SHA-0、SHA-1、SHA-256、SHA-512、WHIRLPOOL等 - 无影响哈希:
MD2、SHA-224和SHA-384
MD5算法的流程:
- 把消息分为n个消息块。
- 对最后一个消息块进行消息填充。
- 每个消息块和一个输入量做运算,把运算结果作为下一个输入量。
MD5算法的实现:
- Append Padding Bits(填充bits)
- Append Length(填充长度)
- Initialize MD Buffer(初始化向量)
- Process Message in 16-Word Blocks(复杂的函数运算)
而要实现我们的攻击,我们只关心前三步,也就是不用纠结复杂的算法运算。
利用工具
- HashPump(需要原始数据)
下载地址:
1 | https://github.com/bwall/HashPump |
可以python扩展,所以在python2下安装hashpumpy后直接使用
1 | import hashpumpy |
- hexpand (不需要原始数据)
1 | https://github.com/amlweems/hexpand |
修复方式
- 使用HMAC方式。
- 置换盐值与data,如 hash(data+secret)