基于 SHA-1 的 HMAC 的安全性是否受到 SHA-1 冲突攻击的影响?
3 回答
HMAC 的安全含义在 RFC的安全部分中有详细描述。简而言之,在 HMAC 的安全受到威胁之前,确实需要非常强大的攻击;现有的对 SHA-1 的碰撞攻击当然不构成这种情况。HMAC 是专门为使攻击变得困难而设计的,普通的碰撞攻击通常是不够的:
此处介绍的消息认证机制的安全性取决于散列函数 H 的加密属性:对冲突发现的抵抗力(仅限于初始值是秘密和随机的,并且函数的输出不能明确提供给攻击者),以及 H 的压缩函数在应用于单个块时的消息认证属性(在 HMAC 中,这些块对于攻击者来说是部分未知的,因为它们包含内部 H 计算的结果,特别是不能完全选择攻击者)。
我建议阅读整个部分;它更详细地说明了哪些攻击足以破坏 HMAC,以及需要付出多少努力。
有关同一主题的讨论,请参阅此问题。简而言之:碰撞攻击不会直接损害 HMAC。但是冲突攻击的存在意味着构建哈希函数的压缩函数不是“随机预言机”,这使得 HMAC 安全证明无效。
已知针对 HMAC 的最强攻击是基于散列函数 H(“生日攻击”)[PV,BCK2] 的冲突频率,对于最低限度合理的散列函数是完全不切实际的。
例如,如果我们考虑像MD5 这样的哈希函数,其中输出长度等于 L=16 字节(128 位),攻击者需要 在大约 2 64 个已知的明文。这将需要处理至少 2H 下的 64 个块,在任何实际情况下都是不可能完成的任务(对于 64 字节的块长度,在连续 1Gbps 的链路中这将需要 250,000 年,并且在此期间不更改密钥 K)。只有在发现函数 H 的冲突行为中的严重缺陷(例如,在 2**30 条消息之后发现冲突)时,这种攻击才能变得现实。这样的发现将决定函数 H 的立即替换(对于在数字签名、公钥证书等环境中使用 H 的传统用途而言,这种失败的影响要严重得多)。
注意:这种攻击需要与对加密哈希函数的常规冲突攻击形成强烈对比,其中不涉及密钥,并且 2 64 个离线可并行化(!)操作足以发现冲突。后一种攻击正在接近可行性 [VW] ***,而对 HMAC 的生日攻击完全不切实际。(在上述示例中,如果使用具有 160 位输出的散列函数,则 2 64 应替换为 2 80。)*
上述结构的正确实现、随机(或加密伪随机)密钥的选择、安全的密钥交换机制、频繁的密钥更新和良好的密钥保密保护都是 HMAC 提供的完整性验证机制安全性的基本要素.