◆靳 燕
(山西大學商務學院信息學院 山西 030031)
隨著互聯網技術的快速發展,人們已經逐漸進入了全面信息化時代,信息技術已滲透在社會生產和生活的方方面面,人們的生活和工作方式也因此發生了巨大的變化。信息技術是一把雙刃劍,可以成為網絡作案的工具。非法竊取隱私信息、破壞網絡服務系統等,保護重要信息不被泄露和破壞,是極為重要的。密碼學綜合了數學科學,電子通信技術以及計算機科學等多個領域的學科知識,在提供數據的安全性、保密性、完整性上發揮著重要的作用。本文詳細分析了MD5算法的原理,設計文件完整性檢測模型,并在QT環境中編程實現。使用測試文件進行系統功能測試,以驗證模型設計的有效性。
美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)在MD4算法的基礎上,于1992年設計出更為趨于成熟的MD5算法[1-2]。使用該算法可以將任意長度的文本轉換為一個固定長度的字符串。由于同一文件產生出相同字符串的概率極小,可將該字符串視為該文件的摘要信息。文件的完整性檢測是比較文件前后兩次的摘要值是否相同,如果被篡改,摘要值將發生變化,因此可以有效檢測出文件是否完整。
MD5算法以任意長度的消息作為輸入,進行比特填充和補足長度后,按512比特為單位進行處理,輸出一個長度為128比特的字符串,稱該字符串為消息摘要。
(1)比特填充
MD5算法先要對輸入的消息進行比特填充,使其比特長度模512為448。如果輸入的消息長度正好是模512為448,則填充512個二進制數[3],顯然,需要填充的二進制數的個數范圍為:1~512。填充方法為:第一個二進制位為1,其余全部為0。示意圖見圖1所示。

圖1 MD5算法的比特填充示意圖
(2)填加長度信息
在填充數據的后面附加一個以64位二進制表示的原始消息的長度值。如果消息長度值超出了64位二進制數所能表示的范圍,只保留低位的64位,超出部分截去。最終,處理后得到的消息是512比特的整數倍,字節長度表示為N*512+448+64=(N+1)*512。示意圖見圖2所示。

圖2 MD5算法的填加長度信息示意圖
(3)主處理過程
將上述處理后的消息,按512比特大小進行分塊,每個數據塊再按每組32比特進行分組,分得16組。
步驟1:輸入第一個數據塊(512比特),按每32比特為單位,依次存入M[k]中,k=0,1,2,..,15。
步驟2:使用四個緩沖器(A,B,C,D)來計算消息摘要,每個緩沖器都是4個字節共32位的寄存器,空間大小與每個單位組M[k]一致。使用下列初值對A、B、C、D進行初始化。
A=0X01234567 B=0X89abcdef
C=0Xfedcba98 D=0X76543210
步驟3:該部分主要完成壓縮處理,是主處理過程的核心。壓縮處理有四層運算(每層16次迭代),四層運算結構相同。每次運算的輸入都是當前要處理的512比特的數據塊(已分為16組的M[k])和四個緩存器(A、B、C、D)。每層都對緩存器的內容進行更新,而且每層使用的邏輯函數不同,分別表示為:F、G、H、I;第四層的輸出與第一層的輸入相加得到壓縮函數的輸出。每層處理描述如下:
第一層運算,執行16次:
a=FF(a,b,c,d,M[k],s,T[i])=b+((a+F(b,c,d)+M[k]+T[i])<<
第二層運算,執行16次:
a=GG(a,b,c,d,M[k],s,T[i])=b+((a+G(b,c,d)+M[k]+T[i])<<
第三層運算,執行16次:
a=HH(a,b,c,d,M[k],s,T[i])=b+((a+H(b,c,d)+M[k]+T[i])<<
第四層運算,執行16次:
a=II(a,b,c,d,M[k],s,T[i])=b+((a+I(b,c,d)+M[k]+T[i])<<
在上述運算過程描述中,<<
&是按位與運算,|是按位或運算,~是按位取反運算,^是按位異或運算。以第二層運算為例,示意圖見圖3所示。

圖3 MD5算法的第二層壓縮處理示意圖
按上述步驟將所有數據塊處理完成。
(4)結果輸出
所有的512位的數據塊都處理完后,最后一個數據塊的輸出便是128位的消息摘要值。
(1)算法特性分析
算法的輸入為任意長度的消息[4],記為M,經算法處理后得到消息的摘要值,記為h,這一處理過程記為:h=MD5(M)。MD5算法具有哈希函數的相應性質,主要體現在:①可以接受任意長度的消息M,經處理產生一個固定長度的輸出h。②任意給定消息M,計算M的摘要值h很容易。③任意給定摘要值h,找到滿足MD5(M)=h的M很難,計算上不可行,稱為算法的單向性。④任意給定消息M,找到不等于M的M’,使MD5(M)=MD5(M’),計算上不可行,稱為弱抗沖突性。⑤找到任意消息對(M,N),滿足MD5(M)=MD5(N),這在計算上是不可行的,稱為強抗沖突性。
(2)算法安全性分析
兩個不同的消息M和M’,如果具有相同的摘要值,就稱之為碰撞,MD5的安全性分析需要從碰撞入手。在MD5算法的特性分析中,抗沖突性強調了尋找具有相同摘要值的消息在計算上是不可行的,但這在理論上卻是成立的。MD5算法的輸入是任意長度的消息,通過處理映射到固定長度的128位二進制數上,顯然這種映射無法做到一一對應,因此,碰撞是無法避免的。
分析MD5算法的安全性,是分析其在抗碰撞性上的強弱,或稱為抗沖突性的強弱。MD5算法具有單向性,在碰撞測試中,無法由摘要值推導出消息,只能嘗試選取一個消息,計算摘要值是否發生了碰撞。MD5算法的輸出為128比特,若采用強力攻擊法,找到一個消息M,使其具有和給定h相同的摘要值,計算難度為2128。
研究如何破譯MD5算法,就是構建理論模型來加速構造碰撞對。若采用生日攻擊法[5],尋找有相同摘要值的兩個消息,需要嘗試264次,按2.6GHz的計算頻率推算時間大約為225年。2004年,王小云教授將碰撞嘗試減少至242次。2009年,馮登國和謝濤利用差分攻擊,將碰撞嘗試次數進一步降低到221,按2.6GHZ的計算頻率,大約為8秒。
為進一步提高MD5算法的安全性,在實際應用中,對MD5算法進行了改良,如:MD5加鹽、SHA-1等。
網絡安全的五大目標為:保密性、完整性、不可否認性、可控性和可用性。完整性強調了信息在存儲或傳輸過程中流向不能變,內容不能變。認證技術是保證信息完整性和有效性的重要手段。認證技術包括實體認證和消息認證。消息認證就是驗證消息的完整性,即驗證消息在傳輸或存儲過程中未被竄改、重放或延遲等。這些消息可以是存儲在主機系統上的重要數據和重要文件,也可以是即時通信的會話信息等。消息認證也稱文件完整性檢測[6]。
各類網絡安全事件都可能對文件完整性造成威脅,如:計算機病毒、木馬、消息偽造、會話劫持等人為破壞。設備硬件故障、網絡故障等非人為因素。
根據MD5算法特點,當消息發生改變時,摘要值也會發生變化,且其單向性保證了計算的不可逆。在接受MD5算法的安全性能的前提下,可以將其用于文件完整性檢測,檢測模型見圖4所示。

圖4 文件完整性檢測模型
為了進行文件完整性檢測,同時保證系統的廣大用戶群,系統需要提供默認檢測功能和檢測建議。文件包括:系統重要文件集、用戶自定義文件集、已下載文件集。對于本地重要文件,為防止篡改,應當事先計算文件摘要值,并妥善保存;對于待傳輸的文件,為防止傳輸過程中被篡改,可在傳輸前計算摘要值。
系統的主要模塊包括:(1)文件選定模塊:關于系統重要文件或文件夾的選定,用戶可以使用默認選項,由程序決定,也可自行選擇。關于用戶重要文件或文件夾的選定,由用戶通過界面操作來完成。(2)文件摘要計算模塊:程序計算選定文件的摘要值并保存。(3)文件完整性檢測模塊:用戶根據需要對選定的文件進行完整性檢測。對于系統的重要文件,推薦在新程序安裝后或每天的固定時間進行完整性檢測。用戶的重要文件,推薦在每天的固定時間進行完整性檢測。程序設計時,將推薦做為選項提供給用戶。該模塊的檢測結果一方面顯示給用戶,另一方面要存儲到日志文件中。(4)更新文件摘要值:當被保護的文件被合法操作后,需要重新計算文件摘要值,在此模塊計算完成后進行更新。(5)日志查看模塊:用戶可以按時間查閱日志情況,包括檢測的文件名、文件格式、存儲路徑、檢測時間和檢測結果等。
選用C++作為系統開發語言,使用QT框架設計系統界面。QT是一個跨平臺的C++GUI應用框架,主要提供窗口部件集,具有面向對象、便于擴展等優點,利于系統功能設計與開發。
MySQL是一款關系型數據庫,具有開發成本低,占用空間小,處理速度快等優點。根據系統功能,設計出四個實體:用戶實體(用戶id、用戶名、密碼、權限)、目錄實體(目錄名、目錄路徑、文件數)、文件實體(用戶id、文件名、MD5摘要值,更新時間)和日志實體(日志id、用戶id、日志路徑、創建時間、文件名)。
系統提供用戶注冊和登錄界面,只有注冊用戶才可使用系統功能,用戶登錄成功后,進入系統主界面,提供五個操作選項:文件選定、文件摘要計算、文件完整性檢測、更新文件摘要值、日志查看。
在文件選定操作中,提供了選定文件夾進行文件保護的功能,用戶只需給出待保護的文件夾,由程序決定對哪些文件進行檢測保護。考慮文件夾的文件數量情況,在用戶沒有做特定文件的保護要求的情況下,文件夾中的.jpg,.png,.mov,.avi等圖片和視頻文件默認不做保護檢測,因此,在文件摘要計算模塊,掃描選定的文件夾時,這些文件會跳過。
本文選擇三個文件依次進行摘要值計算,并通過修改文件內容進行完整性檢測,前后兩次摘要值見表1~表3所示,由于摘要值較原始摘要值發生變化,成功給出檢測結果。

表1 test.doc文件摘要信息

表2 index.html文件摘要信息

表3 myprog.cpp文件摘要信息
本文設計的文件完整性檢測系統,提供了默認選定功能,用戶無須具備安全知識即可輕松保護重要文件。日志功能利于后期查看文件破壞的規律,進一步找出極易受攻擊破壞的重要文件,對進一步的文件保護提供指導。
MD5算法除了可進行文件完整性檢測外,還可廣泛應用于數字簽名、密碼保護等領域,從密碼分析的角度來看,MD5算法易受攻擊,但其較強的綜合性能使得依舊有很多優勢。在MD5算法的多年應用中,對其進行的攻擊并不總是有效的,整體來講,MD5算法仍然是比較安全的。