若你跟業內人士說你在系統裡使用了 MD5 雜湊,多半會得到以下反應:

  • 茄~ MD5 雜湊早在八百年前就被證實為不安全,你居然還在用?
  • 自從差分攻擊法問市,MD5 安全性已蕩然無存,幾秒就能破解

道理我都懂,但心中仍有疑問:

  • 即使 EXE 檔附上 MD5 碼驗證,駭客都能輕鬆能做出一植入木馬,檔案大小相同且 MD5 相同的執行檔?
  • 在系統內部用 MD5 比對內容重複性,也會有風險嗎?

在 YouTube 滑到很棒的科普影片,用極淺白的方式把 MD5 原理、攻擊方式及風險講到通透,看完算是徹底了解所謂的 MD5 不安全是怎麼一回事。

MD5为何不再安全

摘要如下:

  1. MD5 於 1992 由美國數學家羅納德·李維斯特(Ronald Linn Rivest)設計,將任何內容對映成 128 Bit 長度的數值,跟所有雜湊演算法一樣,具有內容相同雜湊一定相同、內容稍變雜湊截然不同、由無法由雜湊反推內容等特性。
  2. MD5 計算分為三步:填充對齊為 512 Bit 整數倍大小(保留最後 64 Bit 表原始長度大小)、以 512 Bit 為單位分塊,用 0x67452301、0xEFCDAB89、 0x98BADCFE、0x10325476 當初始值跟第一個區塊的資料進行一系列 AND、OR、NOT、位移計算得到 128 Bit 結果,用第一區塊計算結果作為初值對下一塊 512 Bit 作計算得到新的 128 Bit,處理完全部區丟的最終結果即為 MD5。
  3. MD5 計算但不複雜,就算用 Java 寫 100 行就能打死。
  4. 雜湊計算過程資訊會損失,故不可能反推結果(中間有 OR 運算,0 或 1 都得到 1,無法由 1 反推 );任何長度的內容計算結果固定為 128 Bit 表示每個 MD5 都對映到無窮多的來源內容。鴿巢原理,三隻鴿子放進兩個鴿籠,至少有一個籠子有兩隻。對映到 MD5,即所謂碰撞。
  5. 對 MD5 的攻擊方式:
    • 原像攻擊:知道 MD5,找出任意一個結果為該 MD5 的原始內容
      辦不到,來源數量高 2 ^ 128 要進行暴力攻擊類似在鄱陽湖中找到特定水分子
    • 第二原像攻擊:已知內容及 MD5,找到第二個 MD5 相同的內容
    • 抗碰撞性:找出任意兩個 MD5 相同的內容,難度最低,軟柿子
  6. 2004 中國密碼學家王小雲與其團隊找到方法能快速找到大量相同 MD5 的原始內容。原理基於模組化差分,先找到局部碰撞,分析差分如何傳遞,找出差分路徑,透過訊息修改技術得到能產生碰撞的訊息對。最早的研究可在 15 分鐘到一小時內找到碰撞。註:2009 由中國科學院學者提升到普通電腦執行只需要數秒鐘。
  7. 破解抗碰撞性代表可以快速找到 MD5 相同的碰撞對,但其訊息內容如同亂碼,無法真的拿來做壞事。
  8. 2007 年,密碼學者 Marc Stevens 在碩士論文中展示實際可執行的程式碼,用一份原始文件產生兩份有些許差異但 MD5 相同的文件。此稱為「相同前綴碰撞」,兩張照片貌似相同,最後不易察覺的細節不同,但 MD5 相同。(產生只需 6 秒)
  9. 相同前綴碰撞就真的可以拿來做壞事了! 準備兩個 EXE,最後幾個 Byte 不同但 MD5 相同,程式邏輯依據最後幾個 Byte 決定要不要發動攻擊。送正常版交付審查測試,放行後再設法調包成 MD5 相同的惡意版本,轟!
  10. 不過,審核過程防毒軟體有可能偵測到其中埋的惡意邏輯,Marc Stevens 研究成果的另一項武器是「選擇前綴碰撞」,可以做到前面內容也不同但 MD5 相同的程式,故可安排一完全無害的內容送審,未來再換成 MD5 相同的惡意程式。展示:兩個 MD5 相同的 EXE,一個顯示 Hello, World!,一個顯示 Goodbye World! (製作需數十小時)
  11. 選擇前綴碰撞也能讓數位簽章的有效性徹底互解 (10 元支票跟 1000 元支票的簽章相同) 註:2011 年 RFC 6151 禁止 MD5 作為 HMAC (Keyed-Hash Message Authentication Code,金鑰雜湊訊息鑑別碼) 使用的雜湊。
  12. MD5 面對原像攻擊及第二原像攻擊仍具備相當的安全性,但「君子不立於危牆之下」,既然都被貼上不安全標籤了,還是別自找麻煩。

看完,我心中疑問也獲得解答:

  1. 針對一個已存在 EXE 做出 MD5 相同的惡意版本屬第二原像攻擊,仍很有難度。必須要提防的是惡意人士可以拿出兩個 MD5 相同的程式檔,一個正常版,一個有毒。
  2. 用 MD5 比對重複性,若內容都為自家產生,且無人能因仿造 MD5 相同內容獲利,那 MD5 沒什麼問題且省空間。

但,「君子不立於危牆之下」,能不用則不用,想想省掉必須向別人解釋「用在這裡風險不高」的麻煩,無價!!


Comments

# by 2855722

那頻道很多好玩的影片可以看,另外在硬體方面推薦硬核拆解 / 工科男孫老師 / 稚暉君 之類的頻道............都是中國居多,剩下的就是數不升數的英文頻道了

Post a comment