1. 谈谈你对长度延展攻击的理解,列出你查找的资料列表(博客,图书,论文等)
长度延展攻击(Length Extension Attack)是一种针对特定哈希算法(如MD5、SHA-1和SHA-2)的攻击方法,能够在不知道原始消息内容的情况下,对已有哈希值进行篡改。这种攻击方法利用了某些哈希算法的内部结构特点,使得攻击者可以在原始消息后附加额外的数据,然后计算出附加数据后的哈希值,而无需知道原始消息的内容。
原理
要理解长度延展攻击的原理,我们需要先了解一下 Merkle-Damgård 结构,这是一种被 MD5、SHA-1 和 SHA-2 等哈希算法采用的构造方法。Merkle-Damgård 结构的工作原理如下:
- 将输入消息分割成固定大小的分组(通常为 512 或 1024 位)。
- 对每个分组应用压缩函数,将其与上一分组的输出值(称为“链式变量”)进行组合,生成一个新的链式变量。第一个分组的链式变量是预定义的初始值。
- 当所有分组都经过压缩函数处理后,最后一个链式变量就是哈希值。
在长度延展攻击中,攻击者利用了 Merkle-Damgård 结构的特性。由于攻击者已经知道原始哈希值(即最后一个链式变量),他们可以在原始消息后添加额外的数据,然后使用已知的哈希值作为新的初始链式变量,重新计算压缩函数。这样,攻击者可以获取到原始消息与额外数据拼接后的哈希值,而无需知道原始消息的内容。
示例
假设我们有以下原始消息和其对应的哈希值:
- 原始消息:
message
- 哈希值:
hash(message)
攻击者不知道 message
的内容,但知道 hash(message)
。现在,攻击者想在 message
后添加一段额外的数据 extra_data
,并计算出 hash(message || extra_data)
,其中 ||
表示拼接。
攻击者可以采用以下步骤进行长度延展攻击:
- 使用
hash(message)
作为新的初始链式变量。 - 对
extra_data
应用与原始哈希算法相同的压缩函数,计算出新的哈希值。 - 获得
hash(message || extra_data)
。
需要注意的是,长度延展攻击对于具有特定构造的哈希算法才有效,如采用 Merkle-Damgård 结构的算法。对于其他类型的哈希算法,例如 SHA-3 和 BLAKE2,这种攻击方法并不适用。为了防范长度延展攻击,可以使用不受此类攻击影响的哈希算法,或采用特定的技术(如 HMAC)对哈希值进行验证。