【摘要】針對現(xiàn)代遠(yuǎn)程教育系統(tǒng)采用的基于MD5的用戶名/密碼的靜態(tài)身份認(rèn)證技術(shù)在應(yīng)用中的不足,提出了一種基于MD5分組變序的動態(tài)身份認(rèn)證技術(shù),并用概率統(tǒng)計的方法對該技術(shù)的安全性進(jìn)行了驗證,最后給出了實驗分析。
【關(guān)鍵詞】身份認(rèn)證;MD5算法;分組變序;碰撞;安全
【中圖分類號】G420 【文獻(xiàn)標(biāo)識碼】A 【論文編號】1009—8097(2010)09—0119—04
一 引言
現(xiàn)代遠(yuǎn)程教育系統(tǒng)是以計算機(jī)軟硬件技術(shù)為基礎(chǔ),通過互聯(lián)網(wǎng)向處于不同地域的用戶提供教育服務(wù)的信息系統(tǒng)。遠(yuǎn)程用戶在獲得教育服務(wù)之前,通常需要通過系統(tǒng)的身份認(rèn)證。目前來講,最常用的身份認(rèn)證技術(shù)是基于用戶名/密碼的靜態(tài)認(rèn)證技術(shù)。該身份認(rèn)證技術(shù)起源于上個世紀(jì)70年代初[1],認(rèn)證系統(tǒng)通過登記、注冊等方式事先保存合法用戶的用戶名和密碼;認(rèn)證時,系統(tǒng)將用戶輸入的用戶名和密碼與對應(yīng)合法用戶的用戶名和密碼進(jìn)行匹配,以此來驗證用戶身份的合法性。在這種認(rèn)證技術(shù)中,用戶名和密碼均以明文的方式進(jìn)行傳輸和存儲,無法抵擋重放攻擊[2]。一種解決辦法是對密碼加密后再傳輸和存儲,只要加密算法夠可靠,就可以有效地防止重放攻擊。1992年,RIVEST R[3]提出了MD5(Message Digest 5)算法,該算法從理論上講具有不可逆性、離散型和唯一性[4],因此基于用戶名/密碼的靜態(tài)身份認(rèn)證技術(shù)在應(yīng)用了MD5算法后,其安全性可以得到較大的增強(qiáng)。然而王小云[5]等人在2004年8月召開的國際密碼學(xué)會議(Crypto 2004)上做了破譯MD5、HAVAL-128、 MD4和RIPEMD算法的報告,給出了一種高效的MD5碰撞[6]方法,可以在短時間內(nèi)找到多個碰撞,這意味著如果攻擊者竊取到密文并且展開碰撞攻擊,則將有可能繞過認(rèn)證,這又使得重放攻擊變?yōu)榭赡堋?/p>
針對這個問題,本文提出了一種基于MD5分組變序的動態(tài)身份認(rèn)證技術(shù),該技術(shù)通過隨機(jī)數(shù),對原MD5密文采用分組變序的方法生成偽MD5密文存儲到數(shù)據(jù)庫中,并且每次驗證成功后,再次生成隨機(jī)數(shù)重新分組變序,產(chǎn)生另一個偽MD5密文替換原偽MD5密文,以此實現(xiàn)了用戶密碼明文不變,但數(shù)據(jù)庫中密文隨認(rèn)證次數(shù)不斷變化的功能,進(jìn)一步增強(qiáng)基于MD5的靜態(tài)身份認(rèn)證技術(shù)的安全性,從而更安全地保護(hù)遠(yuǎn)程教育系統(tǒng)中的教育資源以及用戶的信息。
二 基于MD5分組變序的動態(tài)身份認(rèn)證技術(shù)
傳統(tǒng)的基于MD5用戶名/密碼的靜態(tài)身份認(rèn)證技術(shù)是將用戶的密碼進(jìn)行MD5加密,再發(fā)送到服務(wù)器端進(jìn)行存儲,這種方式的安全性主要取決于MD5算法本身。除了向用戶騙取密碼以外,要獲取真正的密碼,只有通過對密文碰撞來獲得,然而從理論上來講,如果要對一個MD5密文使用窮舉法進(jìn)行碰撞破解,用一臺運算速度為10億次/秒的超級計算機(jī),需要 年[6],即使使用效率較高的生日攻擊法[5],同樣的運算速度,仍需要58年的時間[6],而王小云等人提出的方法則可以在數(shù)小時之內(nèi)找到一對碰撞[7],因此傳統(tǒng)的基于MD5用戶名/密碼的靜態(tài)身份認(rèn)證技術(shù)已經(jīng)不再安全。進(jìn)一步分析,如果碰撞的對象并不是MD5值,那一切針對MD5的碰撞方法將不起作用。本文提出的基于MD5分組變序的動態(tài)身份認(rèn)證技術(shù)的核心即在于動態(tài)地生成偽MD5密文,使針對MD5值的碰撞攻擊無效,從而在原基于MD5的身份認(rèn)證技術(shù)的基礎(chǔ)上,進(jìn)一步增強(qiáng)其安全性。
該身份認(rèn)證技術(shù)的體系結(jié)構(gòu)如圖1所示。
從圖中可以看出,所有關(guān)于用戶密碼的加密處理全部在客戶端完成,在網(wǎng)絡(luò)中僅傳輸用戶名、密鑰和加密后的偽MD5密文,而服務(wù)器端則為一個數(shù)據(jù)庫,僅起到存儲這些信息的功能,這么做既保證了網(wǎng)絡(luò)傳輸?shù)陌踩裕瑢τ脩舻拿艽a又做到了消息級的加密[8]。
客戶端由密鑰生成、MD5加密、密文數(shù)組生成、偽MD5密文生成、偽MD5密文分割、密文數(shù)組比較六個模塊組成,這幾個模塊的不同組合構(gòu)成了用戶注冊和認(rèn)證過程。
1 用戶注冊階段
用戶注冊主要流程如圖2所示。
步驟1:用戶輸入用戶名和密碼,客戶端首先對密碼進(jìn)行MD5加密操作,得到32位長度的MD5字符串,記為 ;同時執(zhí)行密鑰生成程序,生成隨機(jī)數(shù),記為 , ,且 為32的因數(shù)。
步驟2:執(zhí)行MD5密文數(shù)組生成程序,將 按密鑰 的值為長度進(jìn)行分組,將分組后的字符串存入字符串?dāng)?shù)組中,該字串符數(shù)組記為 。
步驟3:執(zhí)行偽MD5密文生成程序,隨機(jī)變換 中元素的順序,依次把值從變序后的 中取出,生成新字符串,該字符串即偽MD5密文,記為 。
步驟4:客戶端將用戶名、密鑰和偽MD5密文 發(fā)送至服務(wù)端,并存儲到數(shù)據(jù)庫中。
從注冊的過程可以看出,該認(rèn)證技術(shù)的動態(tài)性體現(xiàn)在密鑰 的隨機(jī)性上, 的不同使密文 分組的位置不同,從而使得最終得到的密文 也是不同的。然而生成的偽MD5字符串 ,來源于標(biāo)準(zhǔn)的MD5字符串,這就為認(rèn)證提供了依據(jù),但同時又不是MD5字符串,因此任何針對MD5算法進(jìn)行的破解將不起作用。
2 用戶認(rèn)證階段
用戶認(rèn)證主要流程如圖3所示。
步驟1:待驗證用戶輸入用戶名和密碼,客戶端依然執(zhí)行MD5程序,將用戶輸入的密碼進(jìn)行MD5加密,生成待驗證密文,記為 ,同時將用戶名發(fā)送至服務(wù)器端。
步驟2:服務(wù)器端從數(shù)據(jù)庫中查詢是否存在該用戶名,不存在則認(rèn)證失敗,存在則取出數(shù)據(jù)庫中的偽MD5密文 和密鑰 ,一起傳輸至客戶端。
步驟3:用密鑰 對待驗證的MD5字符串 執(zhí)行客戶端MD5密文數(shù)組生成程序,得到待驗證的字符串?dāng)?shù)組中,該數(shù)組記為 ,同時執(zhí)行偽MD5密文分割程序,以 為每組長度對 進(jìn)行分組,每 位后加入“,”生成分割后的偽MD5字符串,記為 。
步驟4:執(zhí)行密文數(shù)組比較程序,依次取出數(shù)組 中的值與 進(jìn)行比較,如果 的每個元素都包含在 中,則通過認(rèn)證,如果有一個不包含,則認(rèn)證失敗。判斷的根據(jù)在于 本身只是對MD5字符串做了位置上的改變,如果待認(rèn)證的口令正確,那么 中的每個元素都應(yīng)該包含在 中的,但只要數(shù)組中有一個元素不包含在密文字符串中,就可以判斷認(rèn)證失敗。
步驟5:如果驗證通過,則對 再重新執(zhí)行一次分組變序操作,用得到的新的偽MD5密文和新密鑰替換原有的密文與密鑰,一起存入數(shù)據(jù)庫。
需要說明的是,本文給出的匹配方法并沒有直接把數(shù)據(jù)庫中的 和 的元素進(jìn)行包含比較,而是以“,”分割后再比較,原因在于密文的長度為32,而數(shù)組中值的長度小于或等于32,那么不排除數(shù)組的值交叉包含于密文中的情況,假設(shè)密文是c4ca4238a0b923820dcc509a6f75849b,密鑰為16,則數(shù)組 的長度為2,再假設(shè)數(shù)組中的兩個值分別為a0b923820dcc509a,20dcc509a6f75849b,雖然這兩個值也都包含在密文中,但a0b923820dcc509a處于密文(c4ca4238-a0b923820dcc509a-6f75849b)的中間位置,而20dcc509a6f75849b處于密文(c4ca4238a0b9238-20dcc509a6f 75849b)的后半段,這種情況的出現(xiàn)有可能使匹配算法失效,反而造成認(rèn)證的不精確。事實上標(biāo)準(zhǔn)的MD5字符串是多個16進(jìn)制字符串的組合,而“,”是不可能出現(xiàn)在16進(jìn)制字符串中的,采用“,”分組后再比較則可以有效地避免這種情況。
三 安全性驗證
以上認(rèn)證技術(shù)是對單個MD5值進(jìn)行分組變序,根據(jù)不同的 ,除去MD5值本身,每個MD5值能演變出 -1個偽MD5值,記為下式:
(1)
由于隨機(jī)數(shù)的存在,要還原得到真正的MD5值,只能通過暴力破解法來實現(xiàn),對于單個MD5值,暴力破解的運算量為 ,同樣使用一臺運算量為10億次/秒的超級計算機(jī),需要約 年。
由于偽MD5密文和密鑰K均在網(wǎng)絡(luò)中傳輸,如果攻擊者知道該算法,利用密鑰K進(jìn)行攻擊,那么最終密文的安全性取決于變換的順序種類。變換的順序種類由密鑰K確定,K越小,順序種類越多,破解的運算量越大。
對于單個MD5值,當(dāng) 時, ,即不存在偽MD5值, 不可取。
當(dāng) 時, ,暴力破解的運算量僅為1,很容易還原得到原始MD5值,因此密鑰為16時,已經(jīng)存在很大的安全隱患了。
當(dāng) 時, ,暴力破解的運算量為23。
當(dāng) 時, ,暴力破解的運算量為40319。
當(dāng) 時, ,同樣使用一臺運算量為10億次/秒的超級計算機(jī),需要約663457年。
當(dāng) 時,暴力破解的運算量更是巨大的。
更進(jìn)一步研究,該認(rèn)證技術(shù)同樣適合對多個MD5值的組合進(jìn)行分組變序,假設(shè) 為由 個 組成的長度為 的字符串,其中 。這種情況下,暴力破解的運算量為 ,這樣的運算量更是天文數(shù)字。而在知道該認(rèn)證算法的情況下,暴力破解的運算量為 , , 可取的值更多,運算量更大。
對于應(yīng)用該認(rèn)證技術(shù)的系統(tǒng)來講,運算量僅僅取決于變序算法的復(fù)雜度,本文采取經(jīng)典的洗牌算法[9]作為變序算法,以隨機(jī)數(shù) 作為變序的基礎(chǔ),以保證每次交換順序后的結(jié)果與交換之前的不同,算法復(fù)雜度僅為數(shù)組的長度,即 。
實際應(yīng)用時,當(dāng) , 時,最終生成的密文的安全性將是相當(dāng)高的。而當(dāng) 時,可選擇的 更多,安全性則更高,而同時對認(rèn)證系統(tǒng)的運算量并不會有太大增加。
四 實驗分析
本實驗選擇瀏覽器/服務(wù)器作為運行模式,選擇JavaScript作為客戶端注冊、認(rèn)證程序編寫語言,保證運算均在瀏覽器端完成,選擇Java作為服務(wù)器端數(shù)據(jù)庫訪問語言,選擇MySQL作為測試數(shù)據(jù)庫。假設(shè)密碼明文為888888,則MD5值為21218CCA77804D2BA1922C33E0151105,對比最終密文、密鑰做8次運算,其中第一次為注冊,后7次為認(rèn)證,運算結(jié)果對比如表1所示。
從表1可以看出,最終生成的密文已經(jīng)和原MD5值已經(jīng)有較大的不同,即使是相同的密鑰,由于交換了順序,密文也是不同的,攻擊者即使得到這些密文,也是徒勞的。
五 結(jié)束語
本文通過分析目前遠(yuǎn)程教育系統(tǒng)常用的身份認(rèn)證技術(shù)的優(yōu)缺點,以基于MD5的用戶名/密碼的靜態(tài)身份認(rèn)證為基礎(chǔ),提出了基于MD5分組變序的動態(tài)身份認(rèn)證技術(shù),該技術(shù)通過分組變序隨機(jī)地產(chǎn)生偽MD5密文,將偽MD5密文在客戶端和服務(wù)器端之間傳輸,并存儲到數(shù)據(jù)庫中,從而可以有效抵擋碰撞攻擊和重放攻擊,并且實現(xiàn)了數(shù)據(jù)庫中的密碼隨認(rèn)證次數(shù)不斷變化,而對用戶透明的功能,進(jìn)一步增強(qiáng)了原基于MD5的用戶名/密碼的靜態(tài)身份認(rèn)證的安全性。同時,該技術(shù)僅僅是對經(jīng)MD5加密后的密文進(jìn)行再處理,與MD5算法本身并有沒有很大的關(guān)聯(lián),因此具有一定的通用性,只要稍做修改,就可以用于任何基于不可逆算法的身份認(rèn)證技術(shù)中,以起到在原有認(rèn)證技術(shù)的基礎(chǔ)上,增加其安全性的作用。
參考文獻(xiàn)
[1] 曹雪菲.基于身份的認(rèn)證協(xié)議的理論及應(yīng)用研究[D].西安:電子科技大學(xué),2008.
[2] Carles Garrigues, Nikos Migas, William Buchanan, et al. Protecting mobile agents from external replay attacks[J]. Journal of Systems and Software,2009,82(2):197-206.
[3] RIVEST R.RFC 1321 The MD5 Message-Digest Algorithm[S].Boston: MIT Laboratory for Computer Science and RSA DATA Security, Inc, 1992.
[4] 王津濤,覃尚毅,王冬梅.基于MD5的迭代冗余加密算法[J].計算機(jī)工程與設(shè)計,2007,28(1):41-42.
[5] Wang Xiaoyun, Feng Dengguo, Lai Xuejia, et al. Collisions for hash functions MD4, MD5 Haval-128 and RIPEMD[R].CRYPTO 2004, Cryptology ePrint Archive, 2004.
[6] Eric Thompson.MD5 collisions and the impact on computer forensics[J].Digital Investigation,2005,2(1): 36-40.
[7] 張裔智,趙毅,湯小斌.MD5算法研究[J].計算機(jī)科學(xué), 2008,35(7):295-297.
[8] Paul Kearney.Message level security for web services[J].
Information Security Technical Report, 2005,10(1):41-50.
[9] 曹樹國.基于洗牌算法的快速個性化組卷方法的研究[J].計算機(jī)與信息技術(shù),2007,(10):71-72.