王澤++曹莉莎
摘要:MD5和SHA-1是兩個已知的廣泛應用于信息安全的散列算法,均由MD4發(fā)展而來。詳細介紹了它們的算法邏輯,并通過模擬實驗、軟件測試等方式對其在各個方面進行比較,最終得出結論:SHA-1算法比MD5算法的安全性更高,但在同一硬件上,SHA-1比MD5運行的要慢。
關鍵詞:散列算法;SHA-1;MD5;消息認證 ;摘要
中圖分類號:TN918.1 文獻標識碼:A 文章編號:1009-3044(2016)11-0246-02
Abstract: MD5 and SHA-1 are the two known Hash Algorithm which are widely applied in information security, they are both developed from MD4.This paper introduces their algorithm logic in detail, compares them though simulation experiment ,software testing, etc. Finally, it draw a conclusion: The SHA-1 algorithm is more secure than the MD5 algorithm, but in the same hardware, SHA-1 is slower than MD5.
Key words: Hash Algorithm;SHA-1;MD5; message authentication; message digest
1 引言
散列算法也叫散列函數(shù)、Hash函數(shù)、哈希函數(shù)、雜湊函數(shù),在現(xiàn)代密碼學中扮演者重要角色[1]。散列函數(shù)是一種公開函數(shù),用于將任意長得消息映射為較短的、固定長度的一個值作為認證符,經(jīng)常稱函數(shù)值H(M)為散列值、哈希值或消息摘要等。從密碼角度看,散列函數(shù)也可以看做是一種單向密碼體制,只有加密過程,不能解密。在密碼學和數(shù)據(jù)安全技術中,散列函數(shù)是實現(xiàn)有效、安全可靠數(shù)字簽名和認證的重要工具,是安全認證協(xié)議中的重要模塊[2]。目前在信息安全中,MD5、SHA-1是當前國際通行的兩大散列函數(shù)。
2 MD5算法
MD5 報文摘要算法(RFC 1321)是由Rivest(公開密鑰密碼RSA 算法的設計者之一)所設計的單項散列函數(shù)。其中,MD 表示消息的摘要。MD5 不基于任何假設和密碼體制,它采用了直接構造的辦法,速度很快、非常實用。因此MD5 曾是使用最為廣泛的安全散列算法。MD5算法實現(xiàn)共需要五個步驟。
第一步,附加填充位。首先填充消息,使其長度為一個比512的倍數(shù)小64位的數(shù)。填充方法:在消息后面填充一位1,然后填充所需數(shù)量的0。填充位的位數(shù)為1~512。
第二步,附加長度。將原消息長度的64位表示附加在填充后的消息后面。當原消息長度大于[264]時,用消息長度mod[264]填充(即僅取最低64bit)。消息長度恰好是512的整數(shù)倍。可以表示為L個512bit的數(shù)據(jù)塊。
第三步,初始化MD緩沖區(qū)。一個128bitMD緩沖區(qū)用以保存中間和最終Hash函數(shù)的結果。它可以表示為4個32bit的寄存器(A、B、C、D)。寄存器初始化為以下的十六進制值:A=67452301;B=EFCDAB89;C=98BADCFE;D=10325476。
第四步,按512位的分組處理輸入消息。處理每個消息塊,每個消息塊可分為16個字,記為M[0],M[1],…,M[15]。這一步為MD5的主循環(huán),包括四輪。每個循環(huán)都以當前的正在處理的512bit分組和128bit緩沖值ABCD為輸入,然后更新緩沖內(nèi)容。四輪的操作類似,每一輪進行16次操作,但每輪訪問的數(shù)據(jù)的次序有所變動。每次操作對A、B、C和D中的其中三個做一次非線性函數(shù)運算,然后將所得結果加上第四個變量,再將所得結果向右位移一個不定的數(shù),并加上A、B、C或D中之一。最后用該結果取代A、B、C或D中之一[3]。每次使用的不同的基本邏輯函數(shù),記為F、G、H、I。其中,
F(B,C,D)=(B∧C)∨([B]∧D)
G(B,C,D)=(B∧D)∨(C∧[D])
H(B,C,D)=B[⊕]C[⊕]D
I(B,C,D)=C[⊕](B∨[D])
第五步,輸出結果。所有L個512bit數(shù)據(jù)塊處理完畢后,由A、B、C、D四個寄存器的輸出按低位字節(jié)在前的順序得到128位的消息摘要。
3 SHA-1算法
安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標準(Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)。事實上SHA-1目前是全世界使用最為廣泛的哈希算法,已經(jīng)成為業(yè)界的事實標準。其實現(xiàn)同樣共需要五個步驟。
第一步,填充消息。末尾添加一些額外的比特來填充消息,與MD5填充方式完全相同,對消息進行填充,使得其消息長度的值模512等于448(448=512-64),若原始消息長度正好是模512為448,則也要增加1個512比特填充塊,也就是說最少要填充1個512塊。填充內(nèi)容為第一個比特位是1,其余全部為0。
第二步,補足長度。在填充消息的末尾添加64比特的塊,該64比特是原始消息二進制表示的長度。如果消息長度變換為二進制塊的位的個數(shù)小于64,則左邊補0,使得塊的長度剛好等于64位。如果消息長度變換為二進制塊的位的個數(shù)大于64,則僅取最低的64比特,即mod[264]。最終,消息長度成為512的整數(shù)倍。
第三步,初始化緩沖區(qū)。初始化SHA-1的初始輸出,放在5個32位寄存器A、B、C、D、E中,這些寄存器隨后將用于保持散列函數(shù)的中間結果和最終結果,SHA-1的5個寄存器初始值為160比特。Ⅳ初始變量為(十六進制表示):
A = 67452301 ,B = EFCDAB89,C =98BADCFE,D = 10325476,E =C3D2ElF0
前4個值和MD5相同。
第四步,數(shù)據(jù)處理。消息劃分成512比特的塊,每個塊由16個32位字組成,通過混合和移位,塊中的16個字被擴充為80個字,存放在W[k],k=0,1…,79中。每輪的結構類似,但邏輯函數(shù)不同,設分別為[f1],[f2],[f3],[f4],每輪的輸入為512比特,輸出為160比特。[f1-4]邏輯函數(shù)的定義如下所示:
[f1=f(t,B,C,D)=(B∧C)∨(B∧D)] 0≦t≦19
[f2=f(t,B,C,D)=B⊕C⊕D] 20≦t≦39
[f3=f(t,B,C,D)=(B∧C)∨(B∧D)∨(C∧D)] 40≦t≦59
[f4=f(t,B,C,D)=B⊕C⊕D] 60≦t≦79
與MD5使用的64個常量不同,SHA-1算法在各個回合只有四個常量值,使用數(shù)組[K1-4]定義如表1所示。
4 MD5算法與SHA-1算法的比較
由于MD5與SHA-1均是從MD4發(fā)展而來,它們的結構和強度等特性有很多的相似性,但仍有不同之處。
4.1 安全性比較
(1)碰撞率的比較
如果兩個輸入串的散列值一樣,則稱這兩個串是一個碰撞(collision)。既然是把任意長度的字符串變成固定長度的字符串,所以必有一個輸出串對應多個輸入串,碰撞是必然存在的[4]。碰撞率(CR)是已發(fā)現(xiàn)碰撞的數(shù)量與總共生成的消息的數(shù)量之比。通過模擬實驗可知,SHA-1的CR值比MD5低,這意味著SHA-1比MD5擁有更高的安全性[5]。
(2)基于散列值長度的比較
對于同一文件的散列值,長度越長必然會越難破解。MD5算法散列值為128比特,而SHA-1算法散列值為160比特,MD5與SHA-1的最大區(qū)別在于其摘要比SHA-1短32比特。
(3)已有破解方法比較
MD5已有密碼分析的攻擊方法,而SHA-1只是理論上被破解,故MD5較脆弱。
4.2 執(zhí)行速度比較
SHA-1執(zhí)行需要80步,而MD5的執(zhí)行只需要64步。而且與MD5的128比特緩沖區(qū)相比,SHA-1必須處理160比特的緩沖區(qū)。因此,SHA-1在相同的硬件上比MD5運行的慢。
4.3綜合比較
相同點:MD5算法與SHA-1算法均由MD4算法發(fā)展而來,屬于散列函數(shù)。它們均需要五步來完成算法,即填充消息、補足長度、初始化變量、數(shù)據(jù)處理和最后輸出結果。其中前兩步完全相同,第四步都需要四輪操作,并且均需要將消息劃分為多個16字(32bit)即512比特消息塊來處理。因此它們的結構和算法有很多的相似之處。
不同點:為了方便對比,將兩大散列算法列表進行綜合比較,如下表2所示。
5 結束語
MD5 和SHA-1 是單項散列函數(shù)的典型代表,它們廣泛地應用在信息安全和數(shù)字簽名等各個領域。本文主要介紹了兩大散列算法——MD5算法與SHA-1算法,通過對這兩大散列算法的研究,總結出它們的相同點與不同點。在同一硬件上,SHA-1比MD5運行的要慢。在某種程度上,我們可以得出這樣一個結論,當處理的數(shù)據(jù)很小時,我們可以選擇使用MD5消息摘要而不是SHA-1消息摘要。因為此時MD5的碰撞率和運行時間都不高,這可以大大節(jié)約資源。
參考文獻:
[1] 張仕斌,萬武南,張金全,等.應用密碼學[M].西安:西安電子科技大學出版社,2009.
[2] 胡建偉,馬建峰.網(wǎng)絡安全與保密[M].西安:西安電子科技大學出版社2003.
[3] 魏曉玲.MD5加密算法的研究及應用[A].延安:延安大學計算中心,2010.
[4] 劉紅軍.MD5防碰撞和窮舉變換算法的研究與實現(xiàn)[J].包頭:職大學報,2008(2).
[5] Ming Hu,Yan Wang.The Collision Rate Tests of Two Known Message Digest Algorithms[C].2009 International Conference on Computational Intelligence and Security,2009.