HMAC vs simple MD5 Hash
谁能指出使用HMАC的优点是什么?
例如,如果我有一个文本T和一个键K,则可以使用HMAC-MD5算法或Md5(T + K)来获取签名。
-
这些算法打算用于什么?
-
Hmac是否需要比普通哈希更多的资源?
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的已知攻击。
-
1:对MD5的碰撞攻击要比通常的生日攻击快得多。 2:对HMAC-MD4和HMAC-MD5有很多理论上的攻击(这通常意味着即将发生实际攻击;您应该至少使用HMAC-SHA-1)。 3:MD5(K + T + K)似乎比T + K和K + T都更可取,并且还使暴力破解的速度变慢(对于MD5(T + K),其中T较长,攻击者可以预先计算T的哈希状态并简单地遍历K,这可能是一个数量级的加速)。
-
冲突攻击在这里发现两个具有相同哈希值的任意输入,在这里与攻击无关。 OP表示他有一个文本T和一个键K。在这里,图像前电阻适用于md5,与暴力破解几乎没有太大不同:2 ^ 128。 OP希望了解使用HMAC而不是仅使用散列的优势。我回答说:" HMAC不受长度扩展攻击的影响",还回答"您可能希望使用SHA1(T + K)代替MD5。"正如HMAC RFC 2104所说的那样," HMAC的加密强度取决于基础哈希函数的属性",因此HMAC-SHA1比HMAC-MD5更可取。
-
1:我的意思是生日界限仍然很高;最新的MD5攻击效率更高。另请注意,在MD5上存在(理论上)原像攻击,但攻击只会变得更好。 2:我认为这取决于您对" HMAC攻击"的含义。 RFC 6151还说:" [对HMAC-MD5的攻击]对作为伪随机函数的HMAC使用的实际影响...尚未广为理解。...对于新协议设计,不应包括具有HMAC-MD5的密码套件"。我的观点是,除非实现者完全意识到漏洞,否则应始终不鼓励MD5。
-
在此解释中给出了"易受扩展攻击"点的一个很好的例子。 dev.ionous.net/2009/03/hmac-vs-raw-sha-1.html查找"但请不要再打电话给我"
HMAC上的Wikipedia文章对此做了很好的解释。
在同一文章的"安全性"部分中,它继续说:
HMACs are substantially less affected by collisions than their underlying hashing algorithms alone.
因此,将HMAC添加到MD5哈希将使通过彩虹表进行破解变得更加困难。
-
我应该在HMAC中使用哪种类型的密钥(秘密)?人类可读或随机的字符串?多久?
我建议阅读Bellare,Canetti和Krawczyk撰写的HMAC论文。