為什麼應該放棄或減少使用 MD5

來源:互聯網
上載者:User

MD5是一種常用的單向雜湊演算法。它被廣泛用於以下幾個用途:

檢查資料是否一致。將兩地儲存的資料進行雜湊,比較結果,如果結果一致就無需再進行資料比對。這是利用了其“抵 抗衝突”(collision- resistant)的能力,兩個不同的資料,其雜湊值只有很小的幾率一致。相當多資料服務,尤其是網盤服務,利用類似的做法來檢測重複資料,避免重複上 傳。

儲存使用者密碼。將密碼雜湊後的結果儲存在資料庫中,以做密碼匹配。這是利用了其做為單向雜湊的特點,從計算後的雜湊值不能得到密碼。

校正資料正確性。將資料和資料雜湊後的結果一併傳輸,用於檢驗傳輸過程中資料是否有損壞。這是利用了很難找到兩個不同的資料,其雜湊結果一致的特點。

下面我們將說明為什麼對於上面三種用途, MD5都不適用。

第一個用途尤其可怕。這個用途的最大的問題是,MD5在現實中已經被發現有相當多的資料都可能導致衝突。舉例而言,如下兩段資料的MD5雜湊值就是完全一樣的。

資料 1

4d c9 68 ff 0e e3 5c 20 95 72 d4 77 7b 72 15 87

d3 6f a7 b2 1b dc 56 b7 4a 3d c0 78 3e 7b 95 18

af bf a2 00 a8 28 4b f3 6e 8e 4b 55 b3 5f 42 75

93 d8 49 67 6d a0 d1555d 83 60 fb 5f 07 fe a2

資料 2

4d c9 68 ff 0e e3 5c 20 95 72 d4 77 7b 72 15 87

d3 6f a7 b2 1b dc 56 b7 4a 3d c0 78 3e 7b 95 18

af bf a2 02 a8 28 4b f3 6e 8e 4b 55 b3 5f 42 75

93 d8 49 67 6d a0 d1d55d 83 60 fb 5f 07 fe a2

輸出相同的MD5 雜湊

008ee33a9d58b51cfeb425b0959121c9

這意味著,如果使用者提供資料 1,伺服器已經儲存資料 2。通過簡單的MD5雜湊方式檢查重複,伺服器上為使用者儲存的資料就是2。 接下來發生的事情大家都知道了,就是使用者資料丟了。

第二個用途很容易遭到rainbow table攻擊,和明文儲存密碼的實質區別不大。更詳細的分析可以察看這篇文章。

第三個用途裡一般會在需要雜湊的資料中混入某些秘密,也就是計算公式為md5(secret key + data)。 但這樣並不適合用於驗證資料的完整性。這是因為,從理論上上來說,如果知道md5(secret key +X),即使不知道secret key的內容, 仍然可能通過對X的分析,計算得到md5(secret key +Y),從而將X成功的替換成Y,導致接收方仍然認為資料是正確的。

goto:http://www.oschina.net/news/33225/use-less-md5

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.