关于安全性:HMAC与简单的MD5哈希

HMAC vs simple MD5 Hash

谁能指出使用HMАC的优点是什么?

例如,如果我有一个文本T和一个键K,则可以使用HMAC-MD5算法或Md5(T + K)来获取签名。


HMAC不受长度扩展攻击。

md5(T + K)对于大多数用途应该是可以的,除非您的对手有动机去篡改您的消息并且具有很好的计算能力。只要您控制T,生日攻击就不适用,并且您只有蛮力攻击。但是意识到这些限制是一件好事。如果要使用这种方法,则可能要使用SHA1(T + K)而不是MD5。

md5(T + K)当然比md5(K + T)更好,在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的设计旨在避免此类扩展攻击。没有针对HMAC的已知攻击。


HMAC上的Wikipedia文章对此做了很好的解释。

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

HMACs are substantially less affected by collisions than their underlying hashing algorithms alone.

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


我建议阅读Bellare,Canetti和Krawczyk撰写的HMAC论文。