【发布时间】:2011-03-21 01:21:20
【问题描述】:
基于 SHA-1 的 HMAC 的安全性是否会受到 SHA-1 冲突攻击的影响?
【问题讨论】:
标签: cryptography sha1 hashcode hmac cryptographic-hash-function
基于 SHA-1 的 HMAC 的安全性是否会受到 SHA-1 冲突攻击的影响?
【问题讨论】:
标签: cryptography sha1 hashcode hmac cryptographic-hash-function
HMAC 的安全含义在the RFC 的安全部分中有详细描述。简而言之,在 HMAC 的安全受到威胁之前,确实需要非常强大的攻击;现有的对 SHA-1 的碰撞攻击当然不构成这种情况。 HMAC 专门设计用于使攻击变得困难,普通的碰撞攻击通常是不够的:
消息的安全性 提出的认证机制 这里取决于密码学 散列函数 H 的性质: 抗碰撞发现 (仅限于初始的情况 值是秘密和随机的,其中 函数的输出不是 对攻击者明确可用), 和消息认证 压缩函数的性质 应用于单个块时的 H (在 HMAC 这些块是部分 攻击者不知道,因为它们包含 内部 H 计算的结果 尤其是不能完全 由攻击者选择)。
我建议阅读整个部分;它更详细地说明了哪些攻击将足以破坏 HMAC,以及需要付出多少努力。
【讨论】:
有关同一主题的讨论,请参见 this question。简而言之:碰撞攻击不会直接损害 HMAC。但冲突攻击的存在意味着构建哈希函数的压缩函数不是“随机预言机”,这使得 HMAC 安全证明无效。
【讨论】:
已知针对 HMAC 的最强攻击是基于 哈希函数 H 的冲突(“生日攻击”)[PV,BCK2],以及 对于最低限度合理的哈希函数是完全不切实际的。
例如,如果我们考虑像 MD5 这样的哈希函数,其中 输出长度等于 L=16 字节(128 位),攻击者需要 获取计算出的正确消息认证标签(使用 相同密钥 K!)在大约 264 个已知明文上。这个会 需要在 H 下处理至少 264 个块,一个 任何现实场景中不可能完成的任务(块长度为 64 在一个连续的 1Gbps 链路中,这将需要 250,000 年的字节数,并且 在这段时间内不改变密钥 K)。这次袭击 只有在碰撞中出现严重缺陷时才能变得现实 发现函数 H 的行为(例如发现碰撞 2**30 条消息后)。这样的发现将立即决定 替换函数 H(这种失败的影响将是 对于 H 在 数字签名、公钥证书等)。
注意:这种攻击需要与常规攻击形成强烈对比 对没有密钥的加密哈希函数的冲突攻击 涉及到 264 个离线可并行化 (!) 操作 足以找到碰撞。后一种攻击正在逼近 可行性 [大众] ***而对 HMAC 的生日攻击完全是 不切实际的。 (在上面的例子中,如果使用哈希函数 例如,输出 160 位,然后 264 应替换为 280。)*
正确执行上述构造,选择 随机(或加密伪随机)密钥,安全密钥 交换机制,密钥更新频繁,保密性好 密钥的保护都是确保安全的重要组成部分 HMAC提供的完整性验证机制。
【讨论】: