2012-07-06 81 views

回答

1

數據和關鍵的HMAC-MD5是定義爲

MD5((K xor pad1) + H ((K xor pad2) + DATA) 

其中PAD1和PAD2是兩個固定的常數。你可能做的一些更明顯的事情是加密弱。

Digest::MD5.hexdigest(KEY + DATA) 

是致命的缺陷。考慮MD5如何工作。它將輸入分成一定大小的塊(512位爲md5)並設置一些初始狀態h0,h1,h2,h3。然後進行一系列轉換,將第一個數據塊與該初始狀態混合,以生成h0,h1,h2,h3的新值。然後將第二部分數據與那些數據結合以產生一組新的h0,h1,h2,h3等等。散列函數的最終值只是h0,h1,h2,h3的串聯。

這意味着如果你給我Digest::MD5#hexdigest(KEY + DATA)然後我可以計算什麼Digest::MD5#hexdigest(KEY + DATA + OTHER_DATA)是根本不知道KEY。你可以做同樣的事情與SHA1

相反,如果你沒有

Digest::MD5.hexdigest(DATA+KEY) 

然後在MD5任何已知的衝突很容易被用來製造具有相同HMAC值的消息。

顯然

Digest::MD5.hexdigest(KEY+DATA+KEY) 

可能太有缺陷的,即使使用了兩種不同的密鑰。 HMAC旨在緩解所有這些攻擊。