密钥哈希:构建安全消息认证码的多种方法
1. 密钥前缀构造的安全隐患
密钥前缀构造(secret - prefix construction)在哈希函数中存在一定的安全问题。
- 长度扩展攻击的威胁 :SHA - 2 系列的哈希函数容易受到长度扩展攻击。攻击者在已知较短消息的哈希值 Hash(K || M1)
时,无需知道 M1
和密钥 K
,就能计算出 Hash(K || M1 || M2)
。这使得攻击者可以免费伪造有效的 MAC 标签,因为他们原本不应仅根据 M1
的 MAC 猜出 M1 || M2
的 MAC。Merkle - Damgård 结构存在允许长度扩展攻击的弱点,而 SHA - 3 的候选者都具备抵御此类攻击的能力。
- 不同密钥长度的风险 :当允许使用不同长度的密钥时,密钥前缀构造也不安全。例如,不同长度的密钥 K
与消息 M
组合后,可能会得到相同的 K || M
值,从而导致哈希结果相同。虽然可以通过对密钥长度、密钥和消息一起哈希(如 Hash(L || K || M)
,其中 L
是密钥长度的 16 位整数编码)来解决,但现代哈希函数如 BLAKE2 和 SHA - 3 包含密钥模式,可避免这些问题,提供安全的 PRF 和 MAC。