黃加華



摘要:在計算機網絡高速發展的今天,人們對網絡安全也越來越重視,也對通信網安全的技術要求日趨緊迫。本文主要介紹了網絡信息數據加密的MD5算法,并對MD5算法的原理進行研究分析,通過LabVIEW程序開發實現對數據信息執行MD5加密和應用。
關鍵詞:通信網安全;MD5;LabVIEW;加密
隨著互聯網通信的高速發展,以及互聯網相關服務的日益完善,在網絡上傳遞的信息量也幾乎是幾何數量級的增加;同時人們的網絡安全意識也不斷的提高,所以,為了更加有效地處理、存儲、管理、使用和保護在互聯網上傳遞的私有信息,大多是采用報文摘要加密的方式對信息加密,這不僅可以節省加密的時間,而且可以節省報文傳輸、處理和存儲的開銷,MD5(MessageDigestAlgorithm5)作為當前主流的數據的加密技術被廣泛地應用于通信中。
LabVIEW在儀器儀表控制,工業自動化控制、模塊化儀器、虛擬儀器和DAQ數據采集上,都廣泛使用。結合在工程項目中,對于數據的安全性同樣越來越引起重視,因此,將其兩者的優勢相結合,即可實現對工業控制和自動化測試相關數據的加密,提高數據的安全性。
一、MD5簡介及其原理
在90年代初,信息摘要算法是由Mit Laboratory for Computer Science和Rsa Data Security Inc的Ron Rivest研制出來的,其全稱是Messagedigest algorithm 5(簡稱為MD5),經由MD2和MD3以及MD4,一代代發展而來。
MD5是一種消息摘要算法(Message Digest Algorithm),因此,MD5算法是通過任意長度的信息(Message)作為數據輸入,經過算法運算,產生出一個128bit(16byte)的報文摘要(Fingerprint or Message Digest)。由此可見,要由兩個不同的信息產生相同報文的概率是相當小的,反而言之,一個給定的報文摘要想要逆向地產生回原始的信息的難度便可想而知。
MD5算法可以簡述為:第一步,對于輸入進來的信息,以512位的分組來處理,同時,又把每一個分組劃分為16個32位的子分組;第二步,對信息進行一系列的循環算法運算,然后,輸出由四個32位分組組成的結果;第三步,再將這結果級聯運算,最后生成一個128位的散列值。其整體流程如圖1所示:
采用MD5報文摘要算法產生報文的全過程包含以下五個步驟:
第一步:補位。
對于輸入進來的信息,首先對數據信息進行補位,然后對信息數據的長度(單位為:byte)進行64取余數,使得取余的結果是56,即Length=N*64+56(字節),同時N是一個大于等于0的正整數。此外,不管任何情況下,補位的操作始終是要執行的,即使信息數據的長度Length對64取余的結果已是56。
補位的具體操作為:首先,在輸入進來的數據信息的后面補充一個1;然后,對數據信息補0已達到滿足Length=N*64+56條件時,才停止對數據信息進行用0補充,由此,可看出數據信息最少要補充1位,最多可達512位。即相當于補充了一個0X80的字節,再補充值為0的字節。到這一步,數據信息總共補充的字節數為0~63個。
第二步:附加數據長度。
在第一步的輸出結果后面再附加用一個64位的整數表示數據的原始長度(單位為:bit),附加的數據在第一步補位后的數據的后面,同時,要求該數字的8個字節是以按低位的在前、高位在后的順序進行附加。
附加數據長度的具體操作為:假設數據的原始長度為L。第一步,換算為兩個32位數來表示L,第二步,取L的低64位;經過對數據的附加,新的數據的長度則剛好為512位的倍數,即此時的數據長度是16個字節(32位)的整數倍數。
經過第一步和第二步對數據信息的處理,那么數據信息的位長則為:N*512+448+64=(N+1)*512,從算式中可看出,處理后的數據長度恰好是512的整數倍。
注:64位整數是輸入數據的原始長度,而不是填充字節后的長度。
第三步:初始化MD5參數。
用一個4個32位整數變量(A、B、C、D)來計算報文摘要,該整數變量被稱作鏈接變量(Chaining Variable)的整數參數。A、B、C、D分別是32位的寄存器,每一個變量都被初始化為一個以十六進制數表示的數值,并且數值表示是低位在前面,高位在后:A=0x01234567;B=0x89ABCDEF;C=0xFEDCBA98;D=0x76543210。每一個變量給出的數值都是高字節存于內存的低地址,低字節存于內存的高地址,即大端字節序,所以,在程序中變量A、B、C、D的值分別為A=0x67452301;B=0xEFCDAB89;C=0x98BADCFE;D=0x10325476。
注:低位的字節在前面指的是Little Endian平臺上內存內存的供應商中字節的排列方式。
第四步:處理分組數據。
每一個分組都是需要將上述的四個鏈接變量賦值到另外四個變量中,即A賦值到a,B賦值到b,C賦值到c,D賦值到d;而從第二個分組開始,鏈接變量則成為上一分組的運算結果,即a 賦值到A, b 賦值到B, c賦值到C, d 賦值到D。
MD5和MD4的差別在于,MD5的主循環有四輪,MD4僅有三輪。具體的循環操作為:第一輪需要執行16次的操作,每次操作選取a、b、c、d四個變量中的三個作一次非線性函數運算,然后將運算結果加上剩下的一個變量,那么,原來的一個子分組和一個常數,再將所運算得到的結果向左循環移位一個不定的數,然后,加上a、b、c、d四個變量中的一個,最后,用最終的結果取代a、b、c、d四個變量中的一個。
下列是每次操作使用的四個非線性函數(每輪一個,每輪循環都很相似):
注:若X、Y、Z的對應位是獨立并且均勻的,則得到的結果的每一位也是獨立且均勻的。函數F是逐位運算的函數,即如果X,那么Y,否則Z。函數H是逐位奇偶操作符。
假設Mj是消息數據的第j個子分組(從0到15);常數ti是4294967296*|sin(i)|的整數部分(i=1~64)。
注:(4294967296=232),
則定義:
完成上述的四輪運算后,再在原基礎上對a、b、c、d分別加上A、B、C、D,即a = a + A,b = b + B,c = c + C,d = d + D,然后,再用下一分組數據繼續執行上述循環算法。
第五步:輸出報文摘要
經過前面四步的處理,最后輸出的數據信息應該是a、b、c、d的級聯,一共16個字節,128位,同樣按照十六進制數依次輸出這16個字節,即低位字節開始,高位字節結束。
二、MD5的LabVIEW實現
根據MD5報文摘要的加密原理,現已字符串“hjh”為例。該字符串在內存中表示為:68 6A 68(從左到右為低地址到高地址),信息長度為24bit,即0x18。對數據進行補位,填充到448位,即56字節,則結果為:686A 6880 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000,而剩下的64位,即8字節填充前信息位長,按照小端字節填充剩下的8字節,則結果為:686A 6880 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1800 0000 0000 0000。接著對該數據進行是初始化A、B、C、D四個變量,將該64字節填充后的數據分成16個小組(在程序中則是對應的16個數組),則結果為:M0:686A 6880;(該顯示為內存中的順序,是按照小端字節序原則,對應數組M0的值為0x80686A68);M1:00000000;……M14:18000000;M15:00000000。
經過分組數據處理后,a、b、c、d的值分別為0xB525EF18;0x21B77990;0xE440000A;0x5A5A5E8C,則在內存中為:a:18EF25B5;b:9079B721;c:0A0040E4;d:8C5E5A5A。所以,字符串“hjh”經過MD5報文摘要算法后,最終的MD5的值為:18EF25B59079B7210A0040E48C5E5A5A。
經過實例,則更加詳細說明了MD5算法的整體流程。在自動化控制和測試的工程上多使用的LabVIEW編程語言, MD5加密廣泛使用于工程上的各個領域,所以,通過LabVIEW來實現MD5報文摘要算法。
總體的編程流程都是按照MD5算法的整體流程,通過五個步驟實現對數據的MD5加密,程序的五個步驟如圖2所示。
經過步驟一對信息補位,對信息附加數據長度的程序如圖3所示。
在步驟一和步驟的操作后,對MD5參數進行初始化處理,實現了初始化后的數據,執行四輪的四個非線性函數,共執行64步。程序如圖4所示。
在對MD5進行初始化后,再通過對分組數據進行處理后,對輸出的數據進行級聯后,輸出MD5值。程序如圖5所示。
通過MD5的算法流程的原理,采用LabVIEW圖形化的G語言實現MD5加密。
三、MD5應用
經過對MD5原理的闡述和實踐,MD5算法就是對任意長度的數據消息執行運算,從而計算得到一個128位長度的“報文摘要”。在我們實際應用中,主要是利用了他這一原理來實現。因為兩個不同的數據或文件要產生相同的報文摘要,或者通過給定的報文摘要來恢復原始的數據或文件是不可實現的。所以,MD5算法在當前通信信息傳輸等領域廣泛應用。
(一)信息摘要
對數據信息產生信息摘要應該是MD5算法的典型應用,通過信息摘要以防止數據信息被篡改。MD5算法不僅可以將一個文字信息加密,而且可以將整個文件當作一個大文本信息,通過MD5這不可逆的字符串變換算法,產生一個唯一的MD5信息摘要。
(二)數字簽名
就像世界上找不到兩片相同的樹葉一樣,每個人都有自己獨一無二的指紋。同樣的道理,MD5算法可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的MD5值,如果你將該文件傳遞給別人,當別人通過某種手段修改了文件中的任何內容,只要你重新對該文件執行MD5算法時,那么你就會發現這兩個MD5值是不相同,所以,就可以判定該文件不是原始文件,已被篡改。
(三)文件校驗
在互聯網時代,應用軟件作為我們使用最廣泛的,通常我們在某些軟件網站上,就會看到軟件信息中有MD5值,它的主要作用就是當我們下載該軟件后,對下載回來的軟件做一次MD5校驗,如果運算出來的MD5和網站上的MD5值一致,那么就可以確定我們下載的軟件就是網站上的軟件;若MD5值不一致,則說明下載的軟件并非我們想要的。軟件下載站、論壇數據庫、系統文件安全等方面都采用MD5算法來進行文件校驗。
(四)登陸認證
MD5算法還廣泛地用在軟件的登陸認證上。用戶在創建密碼時,軟件通過MD5算法將用戶的登陸密碼運算成MD5值,并存儲與數據庫或文件系統中。當用戶再次登錄軟件時,軟件會把用戶當前輸入的密碼再次進行MD5運算,得到的MD5值再去和保存在數據庫或文件系統中的MD5值進行比較,從而確定用戶輸入的密碼是否正確。
四、總結
如今,互聯網作為龐大的信息共享系統的載體,網絡安全作為互聯網中一個綜合性的課題,不僅僅在立法、管理、技術等方面上,還在信息和數據的安全等問題上。MD5作為互聯網安全的一小部分,但是,MD5在當代的意義也是不可小覷的。通過采用儀器自動控制領域成熟的編程平臺LabVIEW,使得MD5算法安全應用于此領域,也在提高趨向工業自動化和工業4.0安全的發展和重視。
參考文獻:
[1]王育民,劉建偉.通信網的安全—理論與技術[M].西安電子科技大學出版社,2013.
[2]段鋼.加密與解密[M].電子工業出版社,2008.
[3]戴棟,楊穎.基于虛擬儀器的網絡測控技術研究[J].科技風,2011(22):21.
[4]Rivest R.The MD5 messagedigest lgorithm[EB/OL].1995.