长度扩展攻击详解

本文深入探讨了长度扩展攻击,一种针对Merkle-Damgård散列函数的安全威胁。通过MD5算法为例,解释了攻击过程,并以CTF题目实战展示攻击步骤,帮助读者理解这种攻击手段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天在看密码学的长度扩展攻击,看了不少文章,感觉都说得不够清楚,自己弄清楚之后想写一篇,做一个记录。


1. 简介

       长度扩展攻击(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)的值。


2. 攻击方法详解

         下面以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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值