摘要:針對(duì)多數(shù)Web系統(tǒng)在用戶驗(yàn)證時(shí)以明文傳輸賬戶信息帶來的安全隱患,提出了一種綜合使用對(duì)稱密碼體制、非對(duì)稱密碼體制、單向散列算法和一次一密技術(shù)來保障用戶驗(yàn)證安全的策略。該方法在略微增加計(jì)算復(fù)雜度的前提下,就能夠有效防止用戶驗(yàn)證過程遭受竊聽、重放等惡意攻擊;而對(duì)現(xiàn)有Web系統(tǒng)的改進(jìn)僅涉及新用戶注冊(cè)、用戶登錄、密碼修改等操作,更新便捷。
關(guān)鍵詞:混合密碼體制;安全;Web;用戶驗(yàn)證;加密
0 引言
隨著互聯(lián)網(wǎng)的發(fā)展和WWW技術(shù)的推廣應(yīng)用,Web瀏覽已經(jīng)成為廣大網(wǎng)民主要的網(wǎng)絡(luò)活動(dòng)。CNCERT/CC網(wǎng)絡(luò)安全工作報(bào)告指出,2005年Web瀏覽所消耗的帶寬位居所有網(wǎng)絡(luò)應(yīng)用之首(37.82%)。隨著WWW應(yīng)用領(lǐng)域的擴(kuò)大,Web應(yīng)用所暴露的安全問題日益增多,這其中多數(shù)Web系統(tǒng)都必備的用戶驗(yàn)證模塊就存在著重大的安全隱患。常見的Web服務(wù),比如網(wǎng)絡(luò)論壇、網(wǎng)絡(luò)博客、Web郵箱,在為用戶提供服務(wù)前,服務(wù)器都需要根據(jù)用戶輸入的賬戶信息進(jìn)行身份驗(yàn)證。然而,經(jīng)調(diào)查發(fā)現(xiàn),多數(shù)Web服務(wù)(如新浪郵箱、新華論壇、博客天下、搜狐郵件等。調(diào)查日期:2007-1-6)在對(duì)用戶身份驗(yàn)證時(shí)并沒有采取有效的保護(hù)措施,用戶的賬戶信息被直接以明文形式在網(wǎng)絡(luò)中傳送。于是,惡意攻擊者利用網(wǎng)絡(luò)嗅探技術(shù)將很容易得到他人的賬戶信息,甚至出現(xiàn)了專門的工具軟件用于竊取局域網(wǎng)中的賬戶信息。
1 用戶驗(yàn)證的安全策略
由于設(shè)計(jì)時(shí)未考慮安全因素,HTTP協(xié)議是以明文方式傳送數(shù)據(jù)的。因此,Web通信的安全需要通過其他路徑來解決。
為了保證基于WWW服務(wù)的數(shù)據(jù)傳輸?shù)陌踩?,Netscape公司提出了稱為“Secure Sockets Layer”(安全套接字層,SSL)的Internet安全標(biāo)準(zhǔn)。SSL位于應(yīng)用層(如HTFP)和傳輸層(TCP)之間,為客戶機(jī)與服務(wù)器間的數(shù)據(jù)傳輸建立了加密通道。然而Web服務(wù)器在執(zhí)行SSL相關(guān)任務(wù)時(shí),吞吐量顯著下降,運(yùn)行速度比只執(zhí)行HTTP1.0連接時(shí)慢50多倍。而且,除了網(wǎng)絡(luò)銀行等少數(shù)站點(diǎn),多數(shù)Web應(yīng)用并不需要運(yùn)行SSL來為所有傳輸?shù)臄?shù)據(jù)加密。在這些Web系統(tǒng)中,可以采用綜合對(duì)稱密碼算法、非對(duì)稱密碼算法、單向散列算法和一次一密技術(shù)的混合密碼體制,在用戶驗(yàn)證所涉及的新用戶注冊(cè)、用戶登錄、密碼修改等3個(gè)操作中為賬戶的傳輸提供保密措施。
新用戶注冊(cè)過程中,用戶輸入的賬戶信息(包括用戶名和密碼)將被安全地傳輸?shù)椒?wù)器端用戶數(shù)據(jù)庫(kù)中存儲(chǔ)。這可以通過非對(duì)稱密碼體制(比如RSA)來實(shí)現(xiàn)。服務(wù)器端在運(yùn)行初始階段生成并維護(hù)一對(duì)密鑰:公鑰用于瀏覽器對(duì)賬戶信息的加密,私鑰用于服務(wù)器端的解密。兩端的加解密分別用服務(wù)器端腳本和客戶端腳本實(shí)現(xiàn)。
為了防止服務(wù)器端用戶數(shù)據(jù)庫(kù)中賬戶信息(主要是密碼)的泄露,可以存儲(chǔ)通過單向散列函數(shù)(比如MD5)求得的密碼的摘要信息,而非密碼本身。
用戶登錄過程中,只要能驗(yàn)證用戶的合法性即可,不必傳輸密碼信息。服務(wù)器將當(dāng)前系統(tǒng)時(shí)間和一個(gè)隨機(jī)數(shù)傳輸給瀏覽器,瀏覽器以用戶輸入的賬戶信息為密鑰,用對(duì)稱加密算法(比如DES)對(duì)這兩個(gè)值加密后傳回服務(wù)器進(jìn)行驗(yàn)證。由于傳輸?shù)氖窍到y(tǒng)時(shí)間和隨機(jī)數(shù)的組合,實(shí)現(xiàn)了一次一密技術(shù),可以有效預(yù)防重放攻擊。
密碼修改操作首先需要驗(yàn)證用戶現(xiàn)用密碼的正確性,然后以新密碼更新用戶數(shù)據(jù)庫(kù)。服務(wù)器將兩個(gè)參數(shù)(系統(tǒng)時(shí)間和一個(gè)隨機(jī)數(shù))傳輸給瀏覽器,瀏覽器端以現(xiàn)用密碼為密鑰,用對(duì)稱加密算法加密新密碼和服務(wù)器端傳來的兩個(gè)參數(shù)。于是服務(wù)器端可根據(jù)傳回的兩個(gè)參數(shù)值驗(yàn)證用戶后更新數(shù)據(jù)庫(kù)。
2 用戶驗(yàn)證的實(shí)現(xiàn)細(xì)節(jié)
Web系統(tǒng)中涉及密碼傳輸?shù)闹饕腥齻€(gè)操作:新用戶注冊(cè)、用戶登錄和密碼修改。
2.1 新用戶注冊(cè)
服務(wù)器端在第一個(gè)用戶注冊(cè)前生成一對(duì)密鑰:公鑰PK和私鑰SK——這對(duì)密鑰可供所有新注冊(cè)用戶使用,為安全起見,也可定期更新。瀏覽器以PK為密鑰對(duì)賬戶信息進(jìn)行加密。待密文傳輸?shù)椒?wù)器端后,服務(wù)器端即可以SK為密鑰解密并獲得賬戶信息。用戶注冊(cè)過程有以下幾個(gè)步驟:
(1)用戶瀏覽新用戶注冊(cè)頁(yè)面(Reg),如圖1的①;
(2)服務(wù)器端生成一個(gè)隨機(jī)數(shù)R,將R和系統(tǒng)時(shí)間T保存到當(dāng)前連接的會(huì)話Session中,并將Reg頁(yè)面(內(nèi)含T、R和PK)發(fā)送到瀏覽器,如圖1的②;
(3)用戶輸入用戶名UN、密碼PWD,并單擊“提交”按鈕;
(4)Reg頁(yè)的客戶端腳本以PK為密鑰采用非對(duì)稱加密算法AE將T、R、UN和PWD加密為密文:AEPK[T+R+UN+PWD];
(5)瀏覽器將密文傳輸?shù)椒?wù)器端,如圖1的③;
(6)服務(wù)器端將當(dāng)前時(shí)間和保存在Session中的T進(jìn)行比較,若超時(shí),則提示用戶并轉(zhuǎn)到“(2)”; (7)服務(wù)器端腳本利用SK對(duì)AEPK[T+R+UN+PWD]進(jìn)行解密,得到T’、R’、UN和PWD;
(8)服務(wù)器端將T’和R’與Session中的T和R進(jìn)行比較。若不同,則提示失敗并轉(zhuǎn)到“(2)”;
(9)服務(wù)器端判斷UN是否已被他人注冊(cè)使用,若已用,則提示用戶并轉(zhuǎn)到“(2)”;
(10)服務(wù)器端將賬戶信息保存到用戶數(shù)據(jù)庫(kù),并提示用戶注冊(cè)成功。為防止用戶數(shù)據(jù)庫(kù)泄密,服務(wù)器端可將UN和PWD用單向散列算法H進(jìn)行散列,將得到的H[UN+PWD]存儲(chǔ)到密碼字段——此處包含UN是為了防止不同用戶碰巧采用同一密碼而導(dǎo)致密碼泄露。
2.2 用戶登錄
每當(dāng)用戶需要登錄系統(tǒng)時(shí),服務(wù)器將當(dāng)前的系統(tǒng)時(shí)間T和一個(gè)隨機(jī)數(shù)R發(fā)送給瀏覽器。瀏覽器以用戶輸入的賬戶信息為密鑰采用對(duì)稱加密算法SE對(duì)T和R進(jìn)行加密,然后將密文傳輸?shù)椒?wù)器。服務(wù)器端用數(shù)據(jù)庫(kù)中的賬戶信息將密文解密后,比對(duì)前后的T和R以驗(yàn)證用戶的合法性。詳細(xì)過程如下:
(1)用戶瀏覽用戶登錄頁(yè)面(Login),如圖2的①;
(2)服務(wù)器端生成一個(gè)隨機(jī)數(shù)R,將R和系統(tǒng)時(shí)間T保存到當(dāng)前連接的會(huì)話Session中,并將Login頁(yè)面(內(nèi)含T和R)發(fā)送到瀏覽器,如圖2的②;
(3)用戶輸入賬戶信息UN和PWD;
(4)Login頁(yè)的客戶端腳本用單向散列算法H對(duì)UN和PWD進(jìn)行散列,求得H[UN+PWD];
(5)Login頁(yè)的客戶端腳本以H[UN+PWD]為密鑰采用對(duì)稱加密算法SE對(duì)T和R進(jìn)行加密,得到SEH[UN+PWD][T+R];
(6)瀏覽器將密文和UN一起發(fā)送到服務(wù)器端,如圖2的③;
(7)服務(wù)器端將當(dāng)前時(shí)間和保存在Session中的T進(jìn)行比較,若超時(shí),則提示用戶并轉(zhuǎn)到“(2)”;
(8)服務(wù)器端根據(jù)UN在用戶數(shù)據(jù)庫(kù)中找到H[UN+PWD],以其為密鑰解密收到的密文,獲得瀏覽器傳回的數(shù)據(jù)T’和R’;
(9)服務(wù)器端將T’和R’與Session中的T和R進(jìn)行比較,若相同則登陸驗(yàn)證通過,完成隨后的一系列工作(如在Session中保存UN),并清除Session中的T和R——以免遭受重放攻擊,若不同,則提示失敗并轉(zhuǎn)到“(2)”。
2.3 密碼修改
成功登錄后的用戶需要修改密碼時(shí),服務(wù)器端給瀏覽器發(fā)送當(dāng)前系統(tǒng)時(shí)間T、隨機(jī)數(shù)R和Session中的UN。瀏覽器以用戶輸入的現(xiàn)用密碼OPWD和UN為密鑰,對(duì)T、R和用戶輸入的新密碼NPWD采用對(duì)稱加密算法SE進(jìn)行加密,然后將密文傳輸給服務(wù)器。服務(wù)器通過比較前后的T和R驗(yàn)證用戶的合法性,更新用戶密碼。以下是修改密碼的過程:
(1)用戶瀏覽修改密碼頁(yè)面(chgPwd),如圖3的①;
(2)服務(wù)器端生成一個(gè)隨機(jī)數(shù)R,將R和系統(tǒng)時(shí)間T保存到當(dāng)前連接的會(huì)話Session中,并將ChgPwd頁(yè)面(內(nèi)含T、R和Session里的UN)發(fā)送到瀏覽器,如圖3的②;
(3)用戶輸入現(xiàn)用密碼OPWD和新密碼NPWD;
(4)ChgPwd頁(yè)面里的客戶端腳本用單向散列算法H對(duì)UN和OPWD進(jìn)行散列,求得H[UN+OPWD];
(5)ChgPwd頁(yè)面里的客戶端腳本以H[UN+OPWD]為密鑰采用對(duì)稱加密算法SE對(duì)T、R和NPWD進(jìn)行加密,得到SEH[UN+OPWD][T+R+NPWD];
(6)瀏覽器將密文發(fā)送到服務(wù)器端,如圖3的③;
(7)服務(wù)器端將當(dāng)前時(shí)間和保存在Session中的T進(jìn)行比較,若超時(shí),則提示用戶并轉(zhuǎn)到“(2)”;
(8)服務(wù)器端根據(jù)Session里的UN在數(shù)據(jù)庫(kù)中找到H[UN+PWD],以其為密鑰解密密文,獲得瀏覽器傳回的數(shù)據(jù)T’、R’和NPWD;
(9)服務(wù)器端將T’和R’與Session中的T和R進(jìn)行比較,若相同則用戶合法,計(jì)算H[UN+NPWD]并更新用戶數(shù)據(jù)庫(kù),提示成功,同時(shí)清除Session中的T和R,若不同,則提示失敗并轉(zhuǎn)到“(2)”。
3 性能分析
3.1 安全性能分析
用戶驗(yàn)證的安全策略至少可以應(yīng)對(duì)以下幾種攻擊:
密碼竊聽 用戶驗(yàn)證過程中沒有明文傳輸密碼,而且在用戶登錄操作中就根本無(wú)需傳輸密碼,從而避免了密碼被竊聽的威脅。
數(shù)據(jù)篡改 瀏覽器端傳回的密文中包含了隨機(jī)值,若數(shù)據(jù)被篡改則服務(wù)器端能在驗(yàn)證時(shí)及時(shí)發(fā)現(xiàn)。
已知明文攻擊 用戶驗(yàn)證過程中傳輸?shù)臄?shù)據(jù)都包含了隨機(jī)值,可以避免明文數(shù)據(jù)模式的泄露。
重放攻擊 用戶驗(yàn)證中傳輸?shù)臄?shù)據(jù)都包含了系統(tǒng)時(shí)間值,時(shí)間錯(cuò)誤和超時(shí)都不能完成操作,從而杜絕了重放攻擊的發(fā)生。
3.2 計(jì)算性能分析
密碼算法的引入必然會(huì)增加系統(tǒng)的計(jì)算復(fù)雜度,其中以非對(duì)稱密碼算法的復(fù)雜度最大。不過,只有新用戶注冊(cè)時(shí)需要執(zhí)行非對(duì)稱密碼算法。由于新用戶注冊(cè)操作相比用戶登錄操作要少很多,用戶驗(yàn)證的3個(gè)操作在Web系統(tǒng)整個(gè)運(yùn)行期間也只占很小的比重;而且,完成用戶驗(yàn)證后,系統(tǒng)就可按常規(guī)(明文)方式通信。因此用戶驗(yàn)證的改進(jìn)策略對(duì)Web服務(wù)的計(jì)算性能影響不大。
4 結(jié)束語(yǔ)
綜合了多種密碼學(xué)技術(shù)的Web用戶驗(yàn)證策略可以有效解決存在于現(xiàn)今多數(shù)Web服務(wù)中的賬戶信息安全隱患。不僅如此,還可以借鑒這一策略來實(shí)現(xiàn)Web服務(wù)中其他一些敏感數(shù)據(jù)的安全傳輸。當(dāng)然,該方法只是解決了賬戶信息明文傳輸可能造成的威脅,并沒有涉及驗(yàn)證通過后的訪問安全性。而且Web服務(wù)還存在其他一些安全問題,比如用戶登錄成功后,系統(tǒng)一般利用Session中的數(shù)據(jù)來識(shí)別用戶的合法性,因此,存在會(huì)話被第三方劫持等威脅。這些卻需要通過其他技術(shù)解決。