黃 偉 孟 博 李云超
摘 要:對基于口令的訪問控制進行研究,應(yīng)用DES,SHA-512和Diffe-Hellman密鑰交換協(xié)議,提出一個基于口令的安全用戶認證模型。此模型可以抵抗中間人攻擊、重放攻擊、字典攻擊和拒絕服務(wù)攻擊,同時還能提供完善向前保密?;谔岢龅陌踩脩粽J證模型應(yīng)用HOOK技術(shù),給出了一個基于C/S方式的原型實現(xiàn)。
關(guān)鍵詞:訪問控制;身份認證;弱口令;哈希函數(shù);HOOK;DES;Diffe-Hellman密鑰交換協(xié)議
中圖分類號:TP309 文獻標(biāo)識碼:A
文章編號:1004-373X(2009)21-079-04
Secure User Authentication Model Based on Password
HUANG Wei,MENG Bo,LI Yunchao
(College of Computer,South-Central University for Nationalities,Wuhan,430074,China)
Abstract:Access control based on the password is researched,a secure user authentication model with DES,SHA-512 and Diffe-Hellman key exchange protocol is proposed.This model not only prevents MiM attack,replay attack,guess password attack and denial of service attack,but also provides the perfect forward secrecy.A C/S-based prototype is developed with hook technology.
Keywords:access control;identity authentication;weak password;Hash function;HOOK;DES;Diffe-Hellman key exchange
隨著網(wǎng)絡(luò)在人們生活中的不斷深入,網(wǎng)絡(luò)安全越來越受到人們的關(guān)注。身份認證是網(wǎng)絡(luò)安全中最令人關(guān)心的熱點問題之一。通常,用戶在使用網(wǎng)絡(luò)服務(wù)前必須向認證服務(wù)器提供一個對應(yīng)的身份標(biāo)識以及相應(yīng)的秘密信息用于身份認證,網(wǎng)絡(luò)服務(wù)提供商根據(jù)認證結(jié)果決定是否提供所需的網(wǎng)絡(luò)服務(wù)及用戶權(quán)限。目前網(wǎng)絡(luò)應(yīng)用大致利用以下三種類型的秘密信息實現(xiàn)身份認證機制:用戶擁有的,比如利用智能IC卡存放一個足夠大的秘密隨機數(shù)(128/256 b)進行身份認證;用戶知道的,比如用戶利用自選的口令進行身份認證;用戶的特征,比如用戶用自身的生物特征,例如指紋、聲紋、視網(wǎng)膜、臉型等進行身份認證。在這三類機制中,由于成本最低、實施方便使得基于口令的認證方式應(yīng)用最為廣泛。
1 相關(guān)工作
目前主要應(yīng)用兩種口令管理方式來增強口令的安全性:一種是一次口令(OneTime Password,OTP)的方式[1,2];另外一種是基于Hash函數(shù)的口令管理方式。對于一次口令的方式中用戶在每次認證的時候,所提交的認證信息都是不同的,使整個認證過程更加安全,從而能夠較好地應(yīng)用在Internet環(huán)境下。但這樣的OTP認證系統(tǒng)每隔一段時間需要用戶重新初始化系統(tǒng),這使得服務(wù)器的額外開銷比較大;另外,用戶在認證時需要進行多次Hash運算,在應(yīng)用上也不夠方便。
目前的研究熱點主要集中在基于Hash函數(shù)的口令管理方式上,此方式的特點是真正的口令是由Hash函數(shù)計算產(chǎn)生,如Gabber等提出的LPWA[3],Ross等提出的PwdHash[4],Halderman等提出的Password Multiplier[5]和Yee等提出的Passpet[6]方案。LPWA和PwdHash方案都是將用戶主口令和站點域名的Hash值作為真正的賬號口令。這兩個方案解決了多個口令的維護問題,但由于Hash函數(shù)的運算速度很快,它們?nèi)菀自獾奖┝ζ平?。Password Multiplier和Passpet方案首先用主口令和用戶信息經(jīng)過多次執(zhí)行Hash運算得到中間變量v,并保存在本地主機上,然后使用主口令、v和Web站點域名多次執(zhí)行Hash運算得到賬號對應(yīng)的口令,兩次計算中都執(zhí)行迭代Hash運算,增加了計算的時間復(fù)雜度,提高了暴力破解的難度。以上基于Hash函數(shù)的方案存在明顯的安全漏洞,只要攻擊者攻破主口令,就可以計算出用戶的所有賬號口令,并且用戶不能修改單個賬號的口令。
Gajek等[7]提出應(yīng)用每個用戶使用高熵的口令并且不同的帳號使用不同的口令的方法來增強口令的強度,但沒有解決用戶需要記憶多個口令的問題,并且實現(xiàn)方法復(fù)雜。Bruce Schneier提出的Password Safe方案[8],將用戶所有的帳號和對應(yīng)的口令存儲在經(jīng)Twofish加密算法加密的口令庫中,用戶只需要記憶訪問口令庫對應(yīng)的主口令就能管理所有的口令,但將口令文件存儲在本地磁盤上,非常容易被竊取和破壞,因此不但沒有增強口令的強度和安全性,反而增加了口令的不安全因素。
本文在挑戰(zhàn)/響應(yīng)的基礎(chǔ)上,結(jié)合Hash函數(shù)的口令管理技術(shù)和隧道技術(shù)提出了一個基于口令的安全用戶認證模型。
2 提出的基于口令的安全用戶認證模型
應(yīng)用Diffe-Hellman密鑰交換協(xié)議,DES和SHA-512提出了一個基于口令的安全用戶認證模型,如圖1所示。此模型既能夠抵抗中間人攻擊,重放攻擊,字典攻擊和拒絕服務(wù)攻擊,同時還能提供完善向前保密。在此模型中客戶端連接器和服務(wù)器端連接器使用彼此的公鑰加密Diffe-Hellman交換參數(shù)以抵抗中間人攻擊;抵抗重放攻擊通過在客戶端連接器和服務(wù)器端連接器使用挑戰(zhàn)/響應(yīng)方式進行會話密鑰建立;引入口令處理器以增加口令的強度,同時在服務(wù)器端引入“掛起”機制以抵抗字典攻擊;抵抗拒絕服務(wù)攻擊通過應(yīng)用Email Server用于接受服務(wù)器發(fā)送過了的激活碼;為了提供完善向前保密,客戶端連接器和服務(wù)器端連接器在創(chuàng)建隧道時隨機選擇秘密指數(shù),隧道創(chuàng)建成功后就將秘密指數(shù)刪除。
圖1 基于口令的安全登陸模型
提出的模型主要包含:登陸模塊,口令處理器模塊,連接器模塊,數(shù)據(jù)庫模塊,Email Server模塊。
用戶通過登陸模塊輸入“用戶名”和“口令”,登陸模塊將“用戶名”和“口令”傳給口令處理器模塊處理,連接器模塊將“用戶名”和處理過的“口令”通過隧道方式傳給數(shù)據(jù)庫,數(shù)據(jù)庫將處理后的結(jié)果返回給連接器,然后通過隧道將結(jié)果返回給登陸模塊。各模塊的功能如下:
登陸模塊:與用戶實現(xiàn)交互的界面,向其他模塊提出請求,并顯示其他模塊的響應(yīng)。
口令處理器模塊:用戶注冊和修改口令時,主動檢查用戶的口令;用戶登陸時,加密用戶的口令。
由于一般的用戶往往會選擇短的、有意義的字母組合或日常生活中常用的號碼作為口令以方便記憶,而這些類型的口令數(shù)是有限的,因此攻擊者可以利用電腦將所有可能的口令存放在字典中,然后快速地遍歷字典進行反復(fù)猜測與比對,并在很短的時間內(nèi)就有可能猜出一個用戶的口令。
主動的口令檢查在用戶注冊和試圖修改口令的時候就進行。這樣就可以有效地消除脆弱的,易被破解的口令。主動的口令檢查對時間和資源也沒有太大的消耗,因為其檢查的過程不是一個破解的過程,而是利用口令本身檢查其脆弱性的過程[9]。
登陸時用戶的口令被當(dāng)作DES的密鑰用以加密用戶名和口令的Hash值,為了提高安全性這里建議Hash算法使用SHA-512。加密算法被重復(fù)25次,得出結(jié)果中包含了11個字符長的字符串和兩個字符的“Salt”。在系統(tǒng)校驗用戶口令時,系統(tǒng)把經(jīng)過加密后的口令與Password表中存儲的加密字串進行比較,如果相同則證明用戶輸入的口令正確。
連接器模塊:為模塊之間的通信提供加密解密功能。在模塊之間建立隧道,提供相互認證,分配會話密鑰和PFS。g和p是公共的Diffe-Hellman參數(shù),a是A選擇的秘密指數(shù),b是B選擇的秘密指數(shù)。
(1) 連接器A向連接器B發(fā)送質(zhì)詢RA;
(2) 連接器B收到質(zhì)詢RA,計算gbmod p,并將計算結(jié)果和RA一起用A的公鑰加密,B再對加密結(jié)果{RA,gbmod p}A進行簽名操作,并將運算結(jié)果[{RA,gbmod p}A]B和質(zhì)詢RB一起發(fā)送給連接器A;
(3) 連接器A將收到結(jié)果進行解密,得到質(zhì)詢RB,質(zhì)詢RA和gbmod p ,A計算gamod p,并將計算結(jié)果和RB一起用B的公鑰加密,A再對加密結(jié)果{RB,gamod p}B進行簽名操作,并將運算結(jié)果[{RA,gbmod p}B]A發(fā)送給連接器B;
(4) 連接器B將收到結(jié)果進行解密,得到質(zhì)詢RB和gamod p;
(5) 連接器A和B各自計算gabmod p,得到共享的會話密鑰K,隧道建立成功。
數(shù)據(jù)庫模塊:存儲用戶的相關(guān)信息。
數(shù)據(jù)庫中包含Users,Password和Faillog表。這三個表解決了文獻[10]中提到的如何既能防止字典攻擊,又能防止拒絕服務(wù)攻擊的問題。Users表通過訪問Password表獲得用戶的口令;Password表只能被Users表訪問,提高口令的安全性;Faillog表記錄用戶登陸失敗的情況,設(shè)置一個閾值,與閾值比較,超過閾值將該用戶掛起不允許該用戶再次登陸,這樣可以完全抵制字典攻擊;并將一個生成的激活碼發(fā)送給該用戶的Email中,以便用戶再次激活帳號,這樣可以抵制拒絕服務(wù)攻擊。三個表的關(guān)系如圖2所示。
圖2 表間的訪問關(guān)系
下面給出這三個表的具體的結(jié)構(gòu)。
Users表用來記錄用戶登陸時認證和授權(quán)的信息,其結(jié)構(gòu)如下:
用戶名連接Password用戶標(biāo)識組標(biāo)識狀態(tài)激活碼
用戶名:標(biāo)識一個惟一用戶,設(shè)為主碼,這里用用戶的郵箱地址作為用戶名。
連接Password:用來連接Password表,存取用戶的口令。
用戶標(biāo)識:標(biāo)識用戶的安全級別。只有當(dāng)用戶的安全級別高于文件的安全級別時才可以對文件有“讀”訪問權(quán)[10]。
組標(biāo)識:標(biāo)識用戶所屬的組。
狀態(tài):標(biāo)識用戶帳戶的有效性。有兩個狀態(tài):“有效”和“掛起”。它能完全杜絕字典攻擊。
激活碼:激活用戶帳戶,能防止拒絕服務(wù)攻擊。
Password表用來記錄用戶的口令,只能由Users表來連接調(diào)用和讀取,對其他任何操作透明。其結(jié)構(gòu)如下:
用戶名口令
用戶名:同表1的“用戶名”字段。
口令:這里實際存儲的是加密后的口令。
Faillog表用來記錄用戶用戶登陸時的一些相關(guān)信息,其結(jié)構(gòu)如下:
用戶名次數(shù)時間
用戶名:同表1的“用戶名”字段。
次數(shù):統(tǒng)計用戶登陸失敗的次數(shù)。
時間:記錄最近一次登陸失敗時間。
在此安全模型中另外還包括例外處理模塊,各例外處理模塊的功能如下:
用戶名不存在例外處理模塊:向調(diào)用模塊返回“用戶名不存在”,并進行相應(yīng)處理。
狀態(tài)無效例外處理模塊:向調(diào)用模塊返回“狀態(tài)無效”,要求用戶輸入激活碼,并與Users表中該用戶的“激活碼”字段比較,相等時激活用戶的帳號。
密碼不正確例外處理模塊:向調(diào)用模塊返回“密碼不正確”,并進行相應(yīng)處理。
Email Server:用于接受數(shù)據(jù)庫發(fā)送過來的激活碼,可以防止拒絕服務(wù)攻擊。
3 基于C/S方式的原型實現(xiàn)
本文提出的基于口令的安全用戶認證模型的實現(xiàn)可以采用B/S方式,也可以采用C/S方式。在此給出一個基于C/S結(jié)構(gòu)的原型實現(xiàn),如圖3所示,客戶端包含登陸模塊,口令處理模塊和連接器模塊;服務(wù)器端包含連接器模塊和數(shù)據(jù)庫。
圖3 基于C/S方式的原型實現(xiàn)
3.1 用戶注冊
用戶輸入注冊名,連接器A使用會話密鑰K加密用戶名并將結(jié)果發(fā)送給連接器B,B使用會話密鑰K解密將結(jié)果發(fā)送給數(shù)據(jù)庫,數(shù)據(jù)庫檢查用戶名是否存在,并將檢查結(jié)果返回;用戶名通過檢測,用戶輸入口令;口令處理器主動檢查輸入口令,不允許弱口令通過;口令通過檢測,口令處理器對口令加密,連接器A使用會話密鑰K對用戶名和加密后的口令進行加密,并發(fā)送到連接器B;連接器B使用會話密鑰K解密得到用戶名和加密過的口令,將用戶名和加密過的口令發(fā)送給數(shù)據(jù)庫,數(shù)據(jù)庫將用戶的相關(guān)信息添入表中。
3.2 用戶登陸
用戶登陸時,過程如下:
(1) 用戶在登陸模塊中輸入用戶名和口令;
(2) 口令處理器加密口令;
(3) 用戶名和加密過的口令通過隧道傳給數(shù)據(jù)庫;
(4) 數(shù)據(jù)庫驗證用戶
① 在Users表中查找,如果用戶名存在并且狀態(tài)為“有效”,則進入下一步;如果用戶名不存在,轉(zhuǎn)向用戶名不存在例外處理模塊;如果用戶名存在但是狀態(tài)為“掛起”,則轉(zhuǎn)向狀態(tài)無效例外處理模塊。
② 通過連接Password字段,連接Password表。在Password中查找用戶名所對應(yīng)的口令進比較如果相等進入第(5)步;否則進入下一步。
③ 在Faillog表查找用戶名對應(yīng)的記錄。記錄此次登陸失敗的時間。將登陸失敗次數(shù)加1,比較是否超過最大限制次數(shù)。如果超過進入下一步;否則,轉(zhuǎn)向密碼不正確例外處理模塊。
④ 將Users表中用戶的狀態(tài)字段改為“掛起”。通過Faillog表中用戶最近一次登陸失敗時間生成一個激活碼(用于激活用戶帳號),存儲到Users表中用戶對應(yīng)的“激活碼”字段并發(fā)送到用戶的郵箱中,轉(zhuǎn)向狀態(tài)無效例外處理模塊。
(5) 驗證通過,通過Users表對用戶進行初始化。
在客戶端使用HOOK(鉤子)技術(shù)來加強登陸的安全性。
鉤子函數(shù)實際上是一個處理消息的程序段,每當(dāng)一個應(yīng)用程序調(diào)用函數(shù)GetMessage或PeekMessage而恰有一個消息即將被處理時,系統(tǒng)調(diào)用鉤子函數(shù)。也就是說,當(dāng)特定的消息發(fā)出,在沒有到達目的窗口前,鉤子函數(shù)先捕獲消息,亦即鉤子函數(shù)先獲得控制權(quán)。這時鉤子函數(shù)既可以加工處理該消息,也可以不作處理而繼續(xù)傳遞消息,還可以強制結(jié)束消息傳遞。系統(tǒng)為每種類型的鉤子維護一個鉤子鏈,最近安裝的鉤子放在鏈的開始,而最先安裝的鉤子放在最后,也就是后加入的鉤子先獲得控制權(quán)。
由于最后安裝的鉤子總是放在最前,也就是最先獲得對消息的控制權(quán)。為此可以在客戶端每次登陸時,安裝鍵盤鉤子,鉤子截取用戶輸入的用戶名和口令,發(fā)送給口令處理模塊和連接器模塊,登陸成功后卸載鍵盤鉤子。由鉤子函數(shù)來阻斷鍵盤消息在鉤子鏈中的傳遞,將消息直接發(fā)送給消息接受窗口。本模型創(chuàng)建鉤子的核心代碼如下:
創(chuàng)建一個鍵盤線程鉤子WH_KEYBOARD,在登陸窗口中SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hInst,GetCurrentThreadId());
鉤子處理函數(shù)KeyboardProc如下:
LRESULT CALLBACK _stdcall KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if((nCode<0)||nCode==HC_NOREMOVE)
return CallNextHookEx(hook,nCode,0,0);
else if(hWnd!=NULL)
SendMessage(hWnd,WM_KEYINFO,0,0);
return CallNextHookEx(hook,nCode,0,0);
}
登陸成功后UnhookWindowsHookEx(hook);
4 結(jié) 語
身份認證是網(wǎng)絡(luò)安全中熱點問題之一,本文對基于口令的安全用戶認證模型進行研究,應(yīng)用DES,SHA-512和Diffe-Hellman密鑰交換協(xié)議提出一個能夠有效抵抗中間人攻擊,重放攻擊,字典攻擊和拒絕服務(wù)攻擊,同時能提供完善向前保密的安全用戶認證模型,并且進行了安全性分析。最后給出了一個基于C/S結(jié)構(gòu)的原型實現(xiàn)。
參考文獻
[1]Lamport L.Password Authentication with Insecure Communication[J].Communications of the ACM,1981,24(11): 770-772.
[2]Haller N.The S/KEY One-Time Password System.RFC1760.1995.
[3]Gabber E,Gibbons P B,Matias Y,Mayer A.How to Make Personalized Web Browsing Simple,Secure and Anonymous [J].Proceedings of Financial Cryptography′97,Anguilla:Springer-Verlag,1997:17-31.
[4]Ross B,Jackson C,Miyake N,et al.Stronger Password Authentication Using Browser Extensions[A].Proceedings of the 14th USENIX Security Symposium.2005:17-32.
[5]Halderman J A,Waters B,Fehen E W.A Convenient Method for Securely Managing Passwords[A].Proceedings of the 14th International Conference on World Wide Web.Chiba:ACM Press,2005:471-479.
[6]Yee K P,Sitaker K.Passpet:Convenient Password Management and Phishing Protection[A].Proceedings of the Second Symposium on Usable Privacy and Security.New York:ACM ,2006:32-43.
[7]Gajek S,Sadeghi A R,Stuble C,et al.Compartmented Security for Browsers-or How to thwat a phisher with trusted computing[A].Proceedings of the 2nd International Conference on Availability,Reliability and Security.Washington DC:IEEE Computer Society,2007:120-127.
[8]Schneier B.Password Safe[EB/OL].http://www.schneier.com/passsafe.html.
[9]董光宇,高安全等級操作系統(tǒng)及網(wǎng)絡(luò)服務(wù)的標(biāo)識鑒別機制[D].北京:中科院軟件所,2002.
[10]Mark Stamp.Information Security:Principles and Practice[M].Wiley,2006.