内容:学习掌握长度扩展攻击,明白攻击原理,知道攻击的条件,实践长度扩展攻击,题目:Plaid CTF 2014 Crypto 250 Parlor,完成WP
掌握长度扩展攻击
学习来源
博主
博客地址
长度扩展攻击(length extension attack),是指针对某些允许包含额外信息的加密散列函数的攻击手段。对于满足以下条件的散列函数,都可以作为攻击对象:
① 加密前将待加密的明文按一定规则填充到固定长度(例如512或1024比特)的倍数;
② 按照该固定长度,将明文分块加密,并用前一个块的加密结果,作为下一块加密的初始向量(Initial Vector)。
满足上述要求的散列函数称为Merkle–Damgård散列函数(Merkle–Damgård hash function),下列散列函数都属于Merkle–Damgård散列函数:
MD4
MD5
RIPEMD-160
SHA-0
SHA-1
SHA-256
SHA-512
WHIRLPOOL
对于H(salt+data)形式的加密,在以下条件满足的情况下,攻击者可以通过该方法获取H(salt+一定规则构造的data):
① 知道密文的加密算法且该算法满足Merkle–Damgård散列函数特征;
② 不知道salt,但知道salt的长度,并可控制data的值;
③ 可以得到一个H(salt+data)的值。
攻击方法详解
下面以MD5算法为例,讲述该攻击方式如何进行攻击。
百度百科中详细阐述了MD5算法的实现过程https://baike.baidu.com/item/MD5/212708?fr=aladdin,我们并不需要知道MD5具体的算法是怎么回事,只需要知道它的实现是满足上面所说的Merkle–Damgård散列函数的两个条件的,具体过程是这样的:
① 填充
拿到明文后,MD5现将明文转为二进制文件,然后将二进制文件的长度除以512比特(即64字节),如果余数等于448比特(即64-8字节),那么直接在后面加上八个字节的长度标识,使之成为512比特的倍数。否则则在明文后填一个1,再填充0直至其长度除以512等于448,再加上8位的长度标识。长度是使用大端序(big Endian)来存储,即低字节放在高地址位上。
比如加密的明文是admin,其二进制文件以16进制表示是0x61646d696e,长度是40比特(5字节),那么需要补充408比特(51字节)的填充符,填充内容第一位是1,其余全部是0。16进制表示是0x8000000000000000000000000000000000000000000000000