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