0Pricing
Cryptology Academy · 课时

MAC 概念与长度扩展攻击

解释为何附加秘密前缀无法抵御长度扩展攻击

MAC 概念与长度扩展攻击 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

欢迎

消息认证码(MAC)使用共享密钥提供完整性和真实性。本课将学习 MAC 及其特性,以及朴素密钥哈希中的一个关键漏洞。

什么是 MAC

MAC 是根据消息和密钥计算出的短认证码。接收方使用相同的密钥重新计算 MAC 并进行验证。它可以在不暴露密钥的情况下防止伪造。

MAC、哈希与签名的比较

哈希:无密钥、公开,仅提供完整性。\nMAC:共享密钥、对称方式,提供完整性和真实性。\n数字签名:私钥、非对称方式,并增加不可否认性。\n\n只有签名能够提供不可否认性。

不可伪造性

安全的 MAC 必须满足选择消息攻击下的存在不可伪造性(EUF-CMA):能够为任意消息查询 MAC 的攻击者,无法为此前未查询过的新消息伪造有效的 MAC。

朴素密钥哈希:前缀 MAC

朴素做法:MAC(K, M) = H(K || M)。它看似安全,但容易受到 Merkle-Damgård 哈希函数(SHA-256、SHA-512、MD5)的长度扩展攻击。

长度扩展攻击

对 M 进行哈希后,SHA-256 的状态就是 H(M)。已知 H(K || M) 后,攻击者无需知道 K,就可以计算任意“额外数据”的 H(K || M || 填充 || 额外数据)。他们可以扩展消息并追加新数据。

攻击的实际影响

Flickr(2009 年):其 API 使用了 H(K || params)。攻击者向已认证的请求中追加了 &api_sig=forgery。结果:未经授权的 API 调用看起来有效。这纯粹是一次长度扩展漏洞利用。

后缀 MAC 同样不安全

MAC(K, M) = H(M || K):容易受到离线攻击。攻击者无需 K 即可计算 H(消息),然后使用生日攻击找到具有相同哈希值的 M'。密钥被追加在碰撞数据之后。

HMAC 如何解决这个问题

HMAC 使用不同的密钥填充,将哈希计算封装两次:\nHMAC(K, M) = H((K⊕opad) || H((K⊕ipad) || M))\n\n内部哈希产生 H(ipad_key || M)。外部哈希使用 opad_key 将其封装起来。由于攻击者无法设置外部哈希的初始状态,长度扩展攻击就会失效。

SHA-3 与长度扩展

SHA-3 使用海绵构造,因此天然能够抵御长度扩展攻击。H_SHA3(K || M) 是一种有效的简单 MAC 构造。SHA-2 则不是,因此使用 SHA-2 时请始终使用 HMAC。

MAC 验证中的计时攻击

提前退出的 MAC 比较(==)会泄露计时信息。第一个字节正确时所需时间会略长于第一个字节错误时。查询 256 次后:找到第 1 个字节。再查询 256 次:找到第 2 个字节。在 16×256 次查询内即可恢复完整 MAC。

快速检查

为什么 MAC(K, M) = SHA256(K || M) 不安全?

回顾

长度扩展攻击说明了朴素密钥哈希为何会失效。接下来我们将学习 HMAC 的构造及其安全性证明。

常见问题解答

「MAC 概念与长度扩展攻击」课时是免费的吗?

是的 — 「MAC 概念与长度扩展攻击」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「MAC 概念与长度扩展攻击」这节课中我会学到什么?

解释为何附加秘密前缀无法抵御长度扩展攻击 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「MAC 概念与长度扩展攻击」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. MAC 概念与长度扩展攻击
  2. HMAC 构造与安全性证明
  3. API 中的 HMAC:请求签名
  4. CMAC 与 Poly1305:分组密码 MAC
← 返回 Cryptology Academy