跳到主要内容
ecdsa.com

长度扩展攻击

一种针对 MD5、SHA-1、SHA-256、SHA-512 等 Merkle–Damgård 哈希的攻击:无需知道密钥,仅凭 H(密钥 ‖ m) 和“密钥 ‖ m”的长度,就能算出 H(密钥 ‖ m ‖ 填充 ‖ m′)。
其他写法length extension attackhash length extension

Merkle–Damgård 摘要就是处理完最后一个分组后的完整内部状态,因此攻击者可以加载这个状态并继续计算哈希。如果某个服务用 SHA-256(secret ‖ params) 认证请求,那么任何看到一个有效标签的人,都可以(在填充字节之后)追加 &admin=1,并为更长的消息算出有效标签。2009年,Flickr 基于 MD5 的 API 签名正是这样被攻破的。

不受影响的有:HMAC(外层哈希隐藏了内层状态)、SHA-3 和 SHAKE 系列函数(容量部分从不输出)、BLAKE2 和 BLAKE3,以及 SHA-384、SHA-512/256 等截断的 SHA-2 变体,它们的输出省略了部分状态。签名方案在签名前先对消息计算哈希,因此也不受影响。

规则很简单:切勿用 SHA-1 或 SHA-256 按 hash(key ‖ message) 的方式构造 MAC;应使用 HMAC、KMAC 或带密钥的 BLAKE2。

标准与参考资料

全部术语