HMAC vs简单的MD5哈希

任何人都可以指出使用HMАC的优点是什么?

例如,如果我有文本T和密钥K ,则可以使用HMAC-MD5algorithm或Md5(T + K)来获得签名。

关于HMAC的维基百科文章给出了一个很好的解释。

在同一篇文章的安全部分,它继续说:

与单独的基础散列algorithm相比,HMAC受冲突的影响要小得多。

因此,将HMAC添加到MD5哈希值将使通过彩虹表破解更加困难。

HMAC不容易受到长度扩展攻击。

md5(T + K)在大多数情况下都应该是正常的,除非你的对手有动机篡改你的消息,并且具有非常好的计算能力。 只要你控制T,生日攻击是不适用的,你只有暴力攻击。 但是意识到这个限制是很好的。 如果你想用这种方法,你可能需要使用SHA1(T + K)而不是MD5。

md5(T + K)肯定比md5(K + T)好,攻击者可以在文本上附加文本并生成另一个有效的MAC。

对于md5(T + K),问题是如果攻击者能够发现与T2的碰撞使得md5(T)= md5(T2),那么md5(T + K)= md5(T2 + K)。 但是这需要暴力攻击。

注意:我说“ 只要你控制T ”,因为如果可以对T进行修改(这样就不明显),可以尝试生成2个消息T1和T2,T1可以通过T和md5 (T1)= md5(T2)。 现在这样做比较容易(我们说的是2 ^ 64而不是2 ^ 128),原因是所谓的生日悖论或生日攻击。

注意: HMAC的devise是为了避免这种扩展攻击。 对HMAC没有已知的攻击。

我build议阅读Bellare,Canetti和Krawczyk 的HMAC论文 。