ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CTF 密碼學實戰:MD5 雜湊演算法的特徵識別、碰撞破解與安全評估(ctf-wiki)

CTF 密碼學實戰:MD5 雜湊演算法的特徵識別、碰撞破解與安全評估(ctf-wiki) 文档网络安全教程【免费下载链接】ctf-wikiCome and join us, we need you!项目地址https://gitcode.com/gh_mirrors/ct/ctf-wiki点击查看免费下载MD5 是 CTF 密碼學賽題中最常出現的雜湊Hash演算法之一本指南以 ctf-wiki 倉庫 docs/zh-tw/docs/crypto/hash/md5.md 為核心系統整理 MD5 的輸入輸出結構、初始化向量IV特徵、16 位與 32 位摘要的區別以及暴力破解、碰撞查詢、指定前綴碰撞與哈希長度擴展攻擊等實戰手法。讀者學完本指南後將能在逆向題中快速識別 MD5 演算法並掌握針對加鹽 MD5 的破解思路與常用工具鏈。基本描述輸入輸出與摘要結構MD5 的輸入輸出可以簡單概括為輸入任意長度的消息按512 比特進行分組處理。輸出128 比特的消息摘要通常以 32 個十六進制字符顯示。在 docs/zh-tw/docs/crypto/hash/introduction.md 中ctf-wiki 給出了哈希函數的一般模型哈希函數把任意長度的消息或數據壓縮成固定長度的摘要因此理論上對於任何一個 hash 值都存在若干個消息與之對應即碰撞collision。MD5 正是一個典型的迭代型哈希函數與 SHA1、SHA256、SHA512 一樣其核心思路是「使用同一個哈希函數以不同的參數進行多次迭代運算」。下圖展示了哈希函數的一般模型MD5 的壓縮流程即遵循這一結構各主流哈希演算法的輸出長度對比如下出自 introduction.md演算法類型輸出 Hash 值長度MD5128 bitSHA1160 bitSHA256256 bitSHA512512 bit哈希函數需要滿足的性質包括輸入長度可變、輸出長度固定、計算效率高、單向性由摘要反推消息在計算上不可行、抗弱碰撞性給定消息 x難以找到消息 y 使 H(x)H(y)、抗強碰撞性難以找到任意一對 x、y 使 H(x)H(y)以及偽隨機性。MD5 的「被攻破」正是集中在抗碰撞性這一環節攻擊者無需逆向出原始消息只要能在可接受的計算量內構造出兩個摘要相同的不同消息即可在簽名偽造、完整性繞過等場景中造成實際危害。16 位 MD5 與 32 位 MD5 的區別在 CTF 題目中有時我們獲得的 MD5 是16 位的。這裡需要澄清一個常見誤解16 位 MD5 其實來源於 32 位 MD5而不是另一種獨立演算法。按照 ctf-wiki 的說明16 位 MD5 的產生方式是將 32 位 MD5 去掉前八位再去掉後八位即取中間的 16 個十六進制字符。因此當你在逆向或取證場景中見到一個 16 位的十六進制串時可以將其視為對應 32 位 MD5 的子串來進行後續檢索與比對例如在線上碰撞查詢平台中同時嘗試兩種形式。透過初始化 IV 識別 MD5 函數在逆向分析中我們往往無法直接看到函數名但可以通過函數的初始化變量來判斷其是否為 MD5。MD5 的初始化 IV 如下ctf-wiki 原文0x674523010xEFCDAB890x98BADCFE0x10325476只要一個函數的初始化過程中出現這四個常量基本可以猜測該函數就是 MD5。這四個常量是 MD5 演算法的標準初始化鏈接變量任何標準實現無論是 C、Python 還是彙編層面的手寫實現都會使用它們。這一識別技巧可以與 SHA1 形成對照。在 docs/zh-tw/docs/crypto/hash/sha1.md 中SHA1 的初始化 IV 包含五個變量0x67452301 0xEFCDAB89 0x98BADCFE 0x10325476 0xC3D2E1F0其中前四個與 MD5 完全相同第五個0xC3D2E1F0是新增的SHA1 輸出 160 比特需要 5 個 32 位鏈接變量。因此在實戰中看到這四個常量時還需進一步確認後續是否出現第五個初始化常量才能準確區分 MD5 與 SHA1。MD5 的破解方法ctf-wiki 明確指出目前可以說 MD5 已經基本被攻破——此處「攻破」主要指 MD5 不再滿足抗碰撞性。以下按攻擊場景梳理常見的破解手段。暴力破解與字典攻擊暴力攻擊不依賴於演算法細節只與 Hash 值長度有關典型手段包括生日攻擊法Birthday Attack不利用哈希函數的結構或代數弱性質僅依賴消息摘要的長度。對於 128 比特的 MD5理論上大約只需要約2^64次計算即可找到一對碰撞。中點交會攻擊法Meet-In-The-Middle生日攻擊的一種變形不直接比較 Hash 值而是比較中間變量適用於攻擊具有分組鏈結構的哈希方案。在工具層面docs/zh-tw/docs/crypto/hash/attack.md 推薦了HashCat——目前基於 CPU 與 GPU 破解 Hash 的主流工具。針對口令類 MD5實戰流程通常為先通過字典如 rockyou 等常用洩漏口令集或規則生成候選明文再計算其 MD5 與目標摘要比對對於「加鹽」的 MD5則需要先分析鹽的長度與拼接方式鹽在前還是鹽在後再據此調整字典生成策略。線上碰撞查詢平台對於強度不高的 MD5 摘要可以藉助網上常見的 MD5 查詢/碰撞服務如 cmd5、ttmd5、pmd5 等平台其本質是彩虹表與海量字典的組合直接反查明文。此類平台適合破解由常見口令、單詞或短文本生成的 MD5。需要注意的是此類查詢服務依賴預計算數據庫對於隨機性強、加鹽或長明文的消息通常無法直接命中需要配合爆破工具使用。生成指定前綴的 MD5 碰撞在需要構造「指定前綴」碰撞的場景例如兩個文件必須以相同內容開頭但後續不同、摘要卻相同中可以使用fastcoll這一工具。它能在可接受的時間內生成給定前綴的 MD5 碰撞對是 CTF 中構造 MD5 碰撞文件的常用工具。哈希長度擴展攻擊Hash Length Extension AttackMD5 基於Merkle–Damgård 構造因此與 SHA1 一樣對哈希長度擴展攻擊表現出脆弱性。attack.md 給出了此類攻擊的完整原理核心要點如下此類哈希的消息填充方式類似先在消息後追加一個 1再填充若干個 0直到總長度與 448 同餘即對 512 取模餘數為 448最後附上 64 位的消息長度填充前的長度。每一分組得到的鏈接變量都會作為下一次執行哈希函數的初始向量 IV只有最後一組才把鏈接變量轉換為最終 Hash 值。攻擊適用於H(key ∥ message)這類構造需要滿足的條件是已知 key 的長度未知則需爆破、可以控制 message 的內容、已知包含 key 的某條消息的 Hash 值。在此前提下攻擊者可以推導出H(key ∥ message ∥ padding ∥ extra)的結果而無需知道 key 的具體內容——因為填充後的鏈接變量可以從已知 Hash 值逆推得到後續 extra 部分的計算完全可控。CTF 中常用工具是hashpump其典型用法為輸入已知的 key 長度、原始消息與原始 Hash 值指定要追加的 extra 內容即可輸出偽造的完整消息與新 Hash 值。這類題目常見於 Web 簽名驗證場景例如服務端以md5(secret input)作為認證憑證。自定義哈希演算法的可逆設計缺陷除了標準 MD5 外attack.md 中「Hashinator」一例也值得借鑑該題從 rockyou 字典選取 password生成與口令長度相關的 salt再用md5、sha1、blake、scrypt四種演算法隨機進行 32 輪混合哈希。由於interim_salt與interim_hash的更新採用了異或xor結構而xor運算可逆因此即使涉及 MD5 等標準演算法整個 32 輪鏈路仍然可以從最終哈希逐輪逆推還原最初的 password 與 salt。這提醒我們哈希演算法本身安全並不代表「多輪混合 異或」的組合設計安全遇到自定義哈希邏輯時應首先檢查其運算結構是否可逆。實戰題目指引加鹽 MD5 的破解ctf-wiki 的 MD5 章節列出了兩道相關賽題CFF 2016 「好多鹽」JarvisOJ 「好多鹽」從題名與哈希章節的語境可以推斷「好多鹽」考察的核心是加鹽saltMD5 的破解與普通 MD5 相比加鹽會顯著破壞彩虹表與線上查詢平台的有效性因為相同口令在不同鹽下會產生完全不同的摘要。解題通常需要確定鹽的獲取方式鹽可能來自固定字符串、隨機數或題目給出的附加數據確定拼接順序是salt password、password salt還是混合構造這決定了字典生成與哈希計算的方式選擇破解手段當口令來自可窮舉字典時用 HashCat 等工具結合鹽進行帶規則的爆破當可以構造碰撞時考慮 fastcoll 等碰撞工具。此類題目的通用思路字典 規則爆破同樣適用於其他加鹽哈希場景。小結MD5 的實戰知識可以濃縮為三點識別通過四個初始化常量0x67452301、0xEFCDAB89、0x98BADCFE、0x10325476快速判斷、破解按場景選擇線上查詢、HashCat 暴力破解、fastcoll 碰撞或 hashpump 長度擴展攻擊、警惕加鹽與多輪混合並不能從根本上挽救 MD5 的抗碰撞性在現代安全設計中應改用 SHA-256 及以上或專用密碼雜湊演算法。在 CTF 解題時建議同時查閱倉庫中的 哈希函數綜述、哈希攻擊綜述 與 SHA1 章節以建立完整的哈希攻防知識體系。赞分享文档网络安全教程【免费下载链接】ctf-wikiCome and join us, we need you!项目地址https://gitcode.com/gh_mirrors/ct/ctf-wiki点击查看免费下载相关推荐CTF-Wiki 密碼學專題ARXAdd-Rotate-Xor運算原理與 2018 \*ctf primitive 實戰解析CTF Wiki 密碼學專題ARXAdd Rotate Xor運算原理與 2018 \ ctf primitive 實戰解析 導讀 本文基於 CTF Wi文档网络安全教程CTF-Wiki 密碼學ElGamal 數字簽名算法原理與四類常見攻擊實戰CTF Wiki 密碼學ElGamal 數字簽名算法原理與四類常見攻擊實戰 ElGamal 數字簽名方案是基於離散對數困難問題的經典簽名體制與其加密方案不同文档网络安全教程CTF Misc 現實世界常用編碼全解條形碼與二維碼的識別與分析CTF Misc 現實世界常用編碼全解條形碼與二維碼的識別與分析 本指南聚焦 CTF Misc「編碼分析」體系中現實世界最常遇到的兩類視覺編碼——條形碼與二維文档网络安全教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表