MD5校驗會有極低的碰撞率,那麼經過MD5之後產生的16個位元組再次進行MD5運算會不會進一步降低碰撞率?
01-03
這個原理應該跟HMAC-md5一樣吧?
不會。
考慮兩個Hash鏈
把h視為MD5的話,找MD5碰撞相當於在a0,b0處找出一個碰撞,設這個碰撞率為p。
而在HMAC結構或多輪MD5下(此處簡化key的影響),為了找一個衝突,只需要找到這麼一個i, 使得
即可,這個衝突概率,邏輯上來表示是
所以,多次進行MD5,被碰撞成功的概率至少和碰撞一次MD5的概率相等(這是下界)。
另外,下面是對多輪Hash的碰撞率的上界的一個估計,
, n為輪數或者HMAC所用的block數。
沒有任何的關係。
假設A和B兩個消息是碰撞的,那麼第一輪的結果就已經一樣了,你第二輪無論如何也是一樣的結果。
從數學上,你這樣處理只會增加碰撞率而不是減少。
HMAC的做法也不是這樣。我也強調過HMAC對於密碼學意義上的碰撞應該是沒有太大意義的,只是在網路安全協議的碰撞上有一定貢獻。
MD5的碰撞率是可以忽略的,我認為如果你只是使用密碼學演算法,而不是真正在研究它,這個問題不要關心。
我個人建議你用SHA256代替,如果你有心,bcrypt等演算法能提供更高的安全性。除非你是國防用途,否則這兩者應該是足夠了碰撞就是指不同內容的hash值正好相同,那麼相同的16位元組再md5當然是也是相同的了
其實我倒是一直在想一種加強機制,也不知道有沒有人驗證過:
如果同時採用md5和crc32,會不會碰撞的難度就大很多?沒有任何關係,舉個簡單的例子"兩次投擲硬幣"
推薦閱讀:
※MD5 加密不是單向的嗎? 那為什麼網上還有在線 MD5 破解呢?
※先用md5,再用sha1,這樣密碼會安全一點嗎?
※為什麼現在網上有很多軟體可以破解MD5,但MD5還是很流行?
※有哪些值得推薦的 MD5 在線解密網站?