要如何知道網路上取得的資料, 有沒有被更改過?
例如: 我們到一個網站上下載 一個軟體, 可是我如何確定這個軟體是原版的呢? 其實只要該網站在網上, 提供 MD5 數位簽章號碼, 我們即可進行驗證.
例如:
原始網站 ---> MD5 碼 (如: d41d8cd98f00b204e9800998ecf8427e)
B: 任意網站下載 軟體.
作法如下:
將需要驗證的軟體或文件準備好, 利用MD5 驗證工具產生MD5 碼, 然後與原始網站公布的 MD5 號碼字串比較.
若兩者 MD5 一樣, 則表示你下載的軟體與原始網站的軟體是一樣的. 當然, 最笨的方法就是到原始網站下載一份完整的軟體, 這樣也可以.
一般 MD5 數字只有幾組而已, 所以使用 MD5 的好處就是你不用下載完整的軟體, 就可以驗證整個軟體的正確性.
簡單的說, 就是
A 傳給 B: 文章 與 該文章在 A 方 用 md5 hash 後的碼(Ha)
B: 用他方 md5 演算法對收到的文章, 計算 hash 碼(Hb).
若收到的文章沒有經過更改, Ha 應該會 等於 Hb.
大概的認證流程.
為了保證文件或資料的正確性與一致性, 我們需要數位簽章. 有了數位簽章技術, 就可以把軟體或文件散佈到世界各地, 又能保證這些複製文件內容的正確性 (沒有被更改過).
Java 的作法: 我們使用 MessageDigest 類別幫我們處理, 下面是 MD5 簽章的範例.
Messagedigest 提供了許多數位簽章的演算法
近幾年來, 資訊安全界的大事就是大家常用的 MD5 這個數位簽章方法, 已經被發現可能會遭受到 collision 攻擊.
所以, MessageDigest 除了提供 MD5 演算法之外, 還提供擴充版本 SHA-256, SHA-384, SHA-512.
如何使用更安全的 SHA-256 演算法呢? 很簡單只要指明使用 SHA-256 即可.
下面是 SHA-512 的範例.
Enjoy.
by Jing
參考資料
[1] http://java.sun.com/j2se/1.4.2/docs/guide/security/CryptoSpec.html#AppA
[3] 有關 MD5 碰撞攻擊的說明
[4] SHA 家族
現在 MD5 可能不夠安全了,現在還有 MD5 快速碰撞產生器,實在讓人不怎麼安心......
回覆刪除