1. 谈谈你对长度延展攻击的理解,列出你查找的资料列表(博客,图书,论文等)

长度延展攻击(Length Extension Attack)是一种针对特定哈希算法(如MD5、SHA-1和SHA-2)的攻击方法,能够在不知道原始消息内容的情况下,对已有哈希值进行篡改。这种攻击方法利用了某些哈希算法的内部结构特点,使得攻击者可以在原始消息后附加额外的数据,然后计算出附加数据后的哈希值,而无需知道原始消息的内容。

原理

要理解长度延展攻击的原理,我们需要先了解一下 Merkle-Damgård 结构,这是一种被 MD5、SHA-1 和 SHA-2 等哈希算法采用的构造方法。Merkle-Damgård 结构的工作原理如下:

  1. 将输入消息分割成固定大小的分组(通常为 512 或 1024 位)。
  2. 对每个分组应用压缩函数,将其与上一分组的输出值(称为“链式变量”)进行组合,生成一个新的链式变量。第一个分组的链式变量是预定义的初始值。
  3. 当所有分组都经过压缩函数处理后,最后一个链式变量就是哈希值。

在长度延展攻击中,攻击者利用了 Merkle-Damgård 结构的特性。由于攻击者已经知道原始哈希值(即最后一个链式变量),他们可以在原始消息后添加额外的数据,然后使用已知的哈希值作为新的初始链式变量,重新计算压缩函数。这样,攻击者可以获取到原始消息与额外数据拼接后的哈希值,而无需知道原始消息的内容。

示例

假设我们有以下原始消息和其对应的哈希值:

  • 原始消息:message
  • 哈希值:hash(message)

攻击者不知道 message 的内容,但知道 hash(message)。现在,攻击者想在 message 后添加一段额外的数据 extra_data,并计算出 hash(message || extra_data),其中 || 表示拼接。

攻击者可以采用以下步骤进行长度延展攻击:

  1. 使用 hash(message) 作为新的初始链式变量。
  2. extra_data 应用与原始哈希算法相同的压缩函数,计算出新的哈希值。
  3. 获得 hash(message || extra_data)

需要注意的是,长度延展攻击对于具有特定构造的哈希算法才有效,如采用 Merkle-Damgård 结构的算法。对于其他类型的哈希算法,例如 SHA-3 和 BLAKE2,这种攻击方法并不适用。为了防范长度延展攻击,可以使用不受此类攻击影响的哈希算法,或采用特定的技术(如 HMAC)对哈希值进行验证。

posted on 2023-05-28 22:40  朴伤色  阅读(70)  评论(0编辑  收藏  举报