摘 要 本文在研究身份認(rèn)證技術(shù)、uKey技術(shù)及Windows系統(tǒng)登錄原理基礎(chǔ)上,提出了基于數(shù)字證書的uKey身份認(rèn)證與安全登錄方案,設(shè)計了自定義登錄模塊,從而實現(xiàn)了使用uKey進行主機安全登錄的功能。
關(guān)鍵詞 uKey;安全登錄;身份認(rèn)證
1 引言
用戶在訪問安全系統(tǒng)之前,首先經(jīng)過身份認(rèn)證系統(tǒng)識別身份,然后訪問監(jiān)控模塊,系統(tǒng)根據(jù)用戶身份和授權(quán)情況決定用戶是否能夠訪問某個資源。因此系統(tǒng)安全登錄與身份認(rèn)證是安全系統(tǒng)中的第一道關(guān)卡,也是實施訪問控制的基礎(chǔ),在系統(tǒng)安全領(lǐng)域具有十分重要的作用。本文提出了基于數(shù)字證書的uKey安全登錄與身份認(rèn)證方案,采用將第三方開發(fā)的uKey與用戶身份信息相結(jié)合的認(rèn)證方式,保證每個用戶在登錄時具有證明其身份的唯一標(biāo)志,從而使系統(tǒng)通過這個惟一標(biāo)志驗證用戶身份合法性。
2 身份認(rèn)證技術(shù)
身份認(rèn)證是網(wǎng)絡(luò)安全技術(shù)的一個重要方面。用戶在訪問安全系統(tǒng)之前,首先經(jīng)過身份認(rèn)證系統(tǒng)識別身份,然后訪問監(jiān)控模塊,系統(tǒng)根據(jù)用戶身份和授權(quán)情況決定用戶是否能夠訪問某個資源,常用的口令認(rèn)證方式有以下幾種:
1)基于口令的認(rèn)證方式
基于口令的認(rèn)證方式是目前在互聯(lián)網(wǎng)和計算機領(lǐng)域中最簡單、最容易實現(xiàn)的一種身份認(rèn)證技術(shù),也是目前應(yīng)用最廣泛的認(rèn)證方法。例如:操作系統(tǒng)及諸如郵件系統(tǒng)等一些應(yīng)用系統(tǒng)的登錄和權(quán)限管理都基于口令[1],當(dāng)用戶登錄計算機網(wǎng)絡(luò)時,需要輸入口令。計算機系統(tǒng)將其認(rèn)證機制建立在用戶名和口令的基礎(chǔ)上,如果用戶將用戶名和口令告訴其它人,則計算機也將給予那個人以訪問權(quán)限[2]。
2)基于智能卡的認(rèn)證方式
智能卡(Smart Card)是法國人Roland Moreno于1970年發(fā)明的[3]。法國BULL公司首創(chuàng)智能卡產(chǎn)品,并將這項技術(shù)應(yīng)用到金融、交通、醫(yī)療、身份認(rèn)證等多個方面?;谥悄芸ǖ纳矸菡J(rèn)證屬于通過物理設(shè)備進行身份認(rèn)證的機制,該機制結(jié)合電子技術(shù)和現(xiàn)代密碼學(xué)知識,大大提高了基于物理設(shè)備機制的安全性。每個用戶持有一張智能卡,智能卡存儲用戶秘密信息,同時在驗證服務(wù)器中也存放該秘密信息。進行認(rèn)證時,用戶輸入PIN碼(個人身份認(rèn)證碼),服務(wù)器認(rèn)證PIN碼,成功后即可讀出智能卡中的秘密信息,進而利用該秘密信息與主機之間進行認(rèn)證?;谥悄芸ǖ恼J(rèn)證方式是一種雙因素認(rèn)證方式(PIN+智能卡),即使PIN碼或智能卡單獨被竊取,合法用戶的身份仍不會被冒充(即不能獲得訪問權(quán))。
3)基于生物特征的認(rèn)證方式
生物特征識別是一種根據(jù)人體自身所固有的生理特征和行為特征來識別身份的技術(shù),即通過計算機與光學(xué)、聲學(xué)、生物傳感器和生物統(tǒng)計學(xué)原理等高科技手段的密切結(jié)合,利用人體固有生理特征(如手形、指紋、面部特征、虹膜、視網(wǎng)膜等)和行為特征(如筆跡、聲音、步態(tài)等)來進行個人身份鑒定[4]。
生物特征認(rèn)證技術(shù)的主要應(yīng)用有辨識和驗證兩種。辨識(Identification)指的是確定用戶身份,通常是在生物特征模版庫中進行一對多匹配(One-to-Many Matching)或基于知識判別;驗證(Verification)指的是驗證用戶是否為他所聲明的身份,通常是用單模板進行一對一匹配[5](One-to-One)。
4) 基于數(shù)字證書的認(rèn)證方式
數(shù)字證書(Digital Certificate)是標(biāo)志一個用戶身份的一系列特征數(shù)據(jù),其作用類似于現(xiàn)實生活中的身份證[6]。國際電信聯(lián)盟的X.509建議定義了一種提供認(rèn)證服務(wù)的框架。采用基于X.509證書的認(rèn)證技術(shù)依賴于共同信賴的第三方來實現(xiàn)認(rèn)證,所不同的是其采用非對稱密碼體制,實現(xiàn)上更加簡單明了。這里的第三方是指稱為CA(Certificate Authority)的認(rèn)證機構(gòu),該認(rèn)證機構(gòu)負(fù)責(zé)認(rèn)證用戶身份并向用戶簽發(fā)數(shù)字證書。數(shù)字證書遵循X.509標(biāo)準(zhǔn)所規(guī)定的格式,因此稱為X.509證書。持有此證書的用戶就可以憑此證書訪問那些信任的CA服務(wù)器,通過CA服務(wù)器實現(xiàn)用戶身份的驗證。
3 基于數(shù)字證書的uKey安全登錄與身份認(rèn)證
Windows 2000操作系統(tǒng)以及微軟后續(xù)的操作系統(tǒng),如Windows XP都內(nèi)置了對智能卡用戶認(rèn)證的支持,計算機用戶可以選擇使用傳統(tǒng)的用戶名、口令驗證方式進行域內(nèi)用戶身份驗證,也可使用智能卡來自動完成用戶身份驗證。
3.1 uKey技術(shù)
uKey又名智能電子密碼鑰匙,既完全繼承了已有智能卡技術(shù)的安全性,又結(jié)合了新型USB接口的數(shù)據(jù)傳輸能力。
1)uKey簡介
uKey是集智能卡與讀卡器于一體的USB設(shè)備,支持熱插熱拔和即插即用,體積小、重量輕、便于攜帶[7]。uKey本身作為密鑰存儲器,自身硬件結(jié)構(gòu)決定了用戶只能通過廠商編程接口訪問數(shù)據(jù),這就保證了保存在uKey中的數(shù)字證書無法被復(fù)制,并且每一個uKey都帶有PIN碼保護,這樣uKey的硬件與PIN碼就構(gòu)成了使用uKey進行身份認(rèn)證的雙因子。如果用戶uKey丟失,獲得者由于不知道該硬件的PIN碼,就無法冒充合法用戶身份;如果用戶PIN碼泄露,只要保存好uKey硬件就可以保證自己的身份不被冒充。
安全性是眾多應(yīng)用(特別是網(wǎng)絡(luò)應(yīng)用)的基礎(chǔ),而實現(xiàn)安全性的手段一般都是通過加密算法來達到,因為加密算法可以更好地實現(xiàn)數(shù)據(jù)保密性、數(shù)據(jù)完整性、身份可鑒別性以及交易不可抵賴性。加密算法安全性主要取決于密鑰的秘密性,而不必對算法保密。智能卡作為一種有效的安全保障設(shè)備,是保存密鑰信息的最可靠手段。傳統(tǒng)智能卡的封裝形式需要額外的讀卡器設(shè)備,因為設(shè)備體積較大且不便于攜帶,所以使用很不方便,另外讀卡器設(shè)備也增加了整體的成本[8]。如表1所示:uKey系列產(chǎn)品在完全繼承智能卡優(yōu)點的同時很好地解決了傳統(tǒng)封裝形式的諸多不足。
表1 uKey與傳統(tǒng)智能卡的比較
比較項目uKey
讀卡器+PK卡
成本遠低于讀片器+PK卡的成本之和。雖然PK卡成本較低,但讀卡器成本通常很高。
移動辦公體積小、重量輕,方便隨身攜帶,非常適用于移動辦公。讀卡器體積大,也比較重,不便隨身攜帶。
通訊速率連接電腦主機的USB 口,通訊速率為12M bps,是高速設(shè)備。通訊速率一般在9600bps~115200bps之間。
多用戶USB設(shè)備,共享方式,支持多用戶訪問。USB級聯(lián)設(shè)備,通過級聯(lián)方式,一臺電腦可以接多個uKey。對于串口讀寫器,串口資源是獨占的且主機串口數(shù)量有限,如果串口已經(jīng)被其它設(shè)備占用,將不能使用讀卡器。USB接口讀寫器可支持多用戶。
操作方便性直接插在電腦主機的USB口或延長線接口上,操作極為簡單。熱插拔設(shè)備,可以隨時插/拔uKey而不必?fù)?dān)心損壞。對于串口讀寫器,電腦主機串口不支持熱插拔,經(jīng)常插拔、操作不當(dāng)時容易燒壞主機串口。USB讀寫器操作方便性同uKey。
2) uKey特點
(1)高安全性。uKey通過了國家安全管理權(quán)威部門—國密辦的技術(shù)鑒定和認(rèn)可,支持國密辦認(rèn)證的分組算法SSF33,也是國內(nèi)唯一能同時支持ECC、RSA密碼算法的同類產(chǎn)品。使用基于硬件RSA算法的uKey比單純軟件實現(xiàn)RSA的應(yīng)用更加安全可靠。敏感數(shù)據(jù)都被保存在uKey的安全存儲區(qū)域中,未授權(quán)用戶將無法接觸到這些信息。uKey的安全性還在于uKey所使用的加密算法都是被廣泛公開、業(yè)界公認(rèn)并經(jīng)受了多年考驗的算法。
(2)靈活易用。使用uKey無需任何附加外部設(shè)備。用戶只需簡單地將uKey插入任何帶有USB接口的設(shè)備就可以使用uKey,使用完畢后直接拔下uKey就可以了。
(3)造價低廉。uKey比任何傳統(tǒng)基于硬件的安全系統(tǒng)都節(jié)省開支。由于使用uKey無需任何附加設(shè)備,因此很適合大范圍發(fā)行。uKey能夠?qū)崿F(xiàn)智能卡提供的所有功能,但是不需要智能卡讀卡器。
(4)攜帶方便。uKey體積小,重量輕,精美時尚,可以隨身攜帶。
(5)無縫集成。uKey提供符合業(yè)界廣泛認(rèn)可的PKCS#11和Microsoft CryptoAPI兩種標(biāo)準(zhǔn)接口。任何兼容這兩種接口的應(yīng)用程序,都可以立即集成uKey進行使用。uKey內(nèi)置大容量智能卡安全芯片,可以同時存儲多個數(shù)字證書和用戶私鑰及其它數(shù)據(jù)。也就是說,多個PKI應(yīng)用程序可以共用同一個uKey。
(6)高可靠性。uKey使用嚴(yán)格工藝制造,可長期安全的保存用戶數(shù)據(jù)。
3.2 Windows登錄原理
Windows 2000的登錄方式分為兩種:一種是交互式登錄(Interactive Logon),另一種是遠程登錄[9] (Remote Logon)。交互式登錄是最典型的登錄方式,并且由大部分訪問域的用戶所使用。當(dāng)用戶第一次登錄到某臺計算機時將發(fā)生交互式登錄,該過程使用登錄用戶的用戶名和密碼來確切驗證用戶真實身份。
Windows操作系統(tǒng)的身份認(rèn)證機制可以用Windows登錄模塊體系圖來說明。如圖1所示,Winlogon進程是Windows 2000及以上版本提供的一個支持交互式操作的組件,用于負(fù)責(zé)管理與承擔(dān)登錄相關(guān)的安全工作,包括處理用戶的登錄與注銷、啟動用戶SHELL、輸入密碼、更改密碼、鎖定與解鎖計算機等。GINA(Graphical Identification and Authentication)是一個圖形動態(tài)鏈接庫,在Winlogon進程中運行,用于提供可定制的登錄界面并對用戶進行身份驗證。LSA(Local Security Authority,本地安全認(rèn)證)是在用戶模式下運行/Winnt/ System32/Lsass.exe映像的進程,負(fù)責(zé)本地系統(tǒng)安全策略。
圖1 Windows登錄模塊體系結(jié)構(gòu)圖
在Windows登錄過程中,如果用戶在Windows系統(tǒng)啟動后按下“Ctrl+Alt+Del”組合鍵,則會引起硬件中斷,該中斷信息被系統(tǒng)捕獲后,操作系統(tǒng)立即激活Winlogon進程。Winlogon進程通過調(diào)用GINA.DLL將登錄窗口(賬戶名和口令登錄提示符)展示在用戶面前。GINA.DLL在收集好用戶登錄信息后,就調(diào)用LSA的LsaLogonUser命令,將用戶登錄信息傳遞給LSA。實際上認(rèn)證部分的功能是通過LSA來實現(xiàn)的,這三部分相互協(xié)作實現(xiàn)了Windows的登錄認(rèn)證功能。
缺省狀態(tài)下,Windows系統(tǒng)提供微軟公司自己實現(xiàn)的GINA.DLL—msgina.dll供Winlogon進程調(diào)用。用戶登錄前后計算機的狀態(tài)有3個,分別是LOGGED_OFF(未登錄)、LOGGED_ON(已登錄)、LOCKED(鎖定)。
3.3 msgina.dll的狀態(tài)流程
msgina.dll的狀態(tài)流程如圖2所示,圖中部分英文是調(diào)用的函數(shù)名稱。
圖2 msgina.dll狀態(tài)流程圖
(1)系統(tǒng)啟動后,首先調(diào)用WlxNegotiate函數(shù)確認(rèn)該DLL是否支持當(dāng)前版本的Winlogon.exe,接著調(diào)用函數(shù)WlxInitialize進行相關(guān)函數(shù)初始化。完成初始化工作后,Winlogon進程調(diào)用函數(shù)WlxDisplaySASNotice顯示歡迎用戶登錄界面,該函數(shù)還會檢測是否有自定義的SAS(Secure Attention Sequence,安全提示碼序列)出現(xiàn)。如果出現(xiàn)則通知Winlogon進程有登錄請求發(fā)出。SAS在Windows 2000下缺省為“Ctrl+Alt+Del”,用戶也可以定義自己的SAS。
(2)當(dāng)發(fā)現(xiàn)有SAS事件發(fā)生時,Winlogon進程調(diào)用WlxLoggedOutSAS函數(shù),并向下調(diào)用WlxDialogBoxParam顯示用戶登錄對話框,然后調(diào)用LSA進行驗證,如果驗證通過,Winlogon進程調(diào)用函數(shù)WlxActivateUserShell啟動用戶外殼程序。
(3)當(dāng)系統(tǒng)處于登錄成功且沒有鎖定狀態(tài)(LOGGED_ ON state)時,Winlogon進程接收到SAS事件時,就調(diào)用函數(shù)WlxLoggedOnSAS。
(4)當(dāng)系統(tǒng)處于鎖定的狀態(tài)(LOCKED state)時,Winlogon進程則調(diào)用函數(shù)WlxDisplayLockedNotice顯示一些信息,如鎖定者、鎖定時間等。當(dāng)其接收到SAS事件時就調(diào)用函數(shù)WlxWkstaLockedSAS,該函數(shù)的返回值將確定工作站的狀態(tài):仍然鎖定、解鎖或用戶注銷。
(5)當(dāng)用戶注銷時,Winlogon進程調(diào)用函數(shù)WlxLogoff,通知msgina.dll用戶的注銷操作,msgina.dll做出相應(yīng)處理。當(dāng)用戶需要關(guān)閉計算機時,Winlogon進程調(diào)用函數(shù)WlxShutdown,允許msgina.dll進行系統(tǒng)關(guān)閉前的處理。
(6)缺省狀態(tài)下,Winlogon進程在注冊表中查找鍵值HKEY_LOCAL_MACHINE /Software/ Microsoft/Windows NT/CurrentVersion/Winlogon,如果存在GINA.DLL鍵,則Winlogon使用該鍵;如果不存在GINA.DLL鍵,則Winlogon就使用默認(rèn)值msgina.dll。由于GINA動態(tài)鏈接庫可以替換,因此只要通過一個自定義GINA來替換GINA.DLL,即可實現(xiàn)用其它認(rèn)證方式代替Windows所默認(rèn)的登錄方式,例如:eKey、指紋識別等[10]。
3.4 安全登錄實現(xiàn)原理
利用uKey提供的安全機制,將數(shù)字證書存儲在uKey中,以實現(xiàn)用戶登錄及身份認(rèn)證。由Windows系統(tǒng)登錄原理可知,要實現(xiàn)基于數(shù)字證書的uKey安全登錄及身份驗證,需要完成兩項工作:一是編寫自定義GINA,二是與uKey進行交互。
1) 自定義GINA—Ginamy.dll的實現(xiàn)
在GINA中,由Winlogon進程進行函數(shù)調(diào)用,通過自定義SAS可以實現(xiàn)對uKey設(shè)備的登錄支持。GINA中有兩個地方需要驗證用戶身份:一是系統(tǒng)啟動時需要驗證用戶身份;二是系統(tǒng)鎖定后解除鎖定時需要驗證用戶身份,其對應(yīng)函數(shù)分別是WlxLoggedOutSAS和WlxWkstaLocked SAS。
系統(tǒng)在沒有用戶登錄之前,Winlogon進程接收到SAS事件時調(diào)用函數(shù)WlxLoggedOutSAS,因此可在該函數(shù)中對uKey的存在與否進行判斷。
當(dāng)插入uKey時,uKey檢測窗口發(fā)現(xiàn)后向Winlogon進程發(fā)出登錄SAS事件,調(diào)用LogonUser函數(shù)登錄系統(tǒng)。在返回幾個必要的參數(shù)后,Winlogon進程調(diào)用WlxActivateUserShell函數(shù)激活用戶桌面,這樣用戶就可成功登錄到Windows系統(tǒng)中進行正常操作。
在Windows使用過程中,如果用戶有事需要離開現(xiàn)場而拔下uKey,則應(yīng)用系統(tǒng)獲得uKey斷開的消息,通過調(diào)用WlxSasNotify函數(shù)發(fā)送一個自定義的SAS事件;隨后Winlogon進程就調(diào)用WlxLoggedOnSAS函數(shù)進行相應(yīng)的處理,通過發(fā)送返回值:WLX_SAS_ACTION_LOCK_ WKSTA實現(xiàn)對Windows系統(tǒng)桌面的鎖定。
系統(tǒng)鎖定后,如果用戶重新插入uKey時,則系統(tǒng)通過調(diào)用WlxSasNotify函數(shù)發(fā)出一個自定義解除鎖定的SAS事件;Winlogon進程調(diào)用WlxWkstaLockedSAS函數(shù),在驗證PIN正確后通過發(fā)送返回參數(shù):WLX_SAS_ACTION_UNLOCK_ WKSTA即可對Windows系統(tǒng)桌面解鎖,允許用戶重新登錄。
2) 與uKey進行交互
如圖3所示,在辦公局域網(wǎng)中可以采用集中式的管理方案,集中配置一個身份驗證服務(wù)器,客戶端所有登錄請求都將被發(fā)送到驗證服務(wù)器進行驗證。
圖3 身份驗證的集中式管理方案
使用uKey進行身份認(rèn)證與安全登錄主要包括以下步驟:
1)初始化uKey
當(dāng)新用戶提出登錄申請時,管理員根據(jù)用戶需求生成數(shù)字證書,同時將數(shù)字證書和對應(yīng)的密鑰對寫入一個全新的uKey中,然后將此uKey發(fā)放給用戶。密鑰存儲在uKey中特殊的文件分區(qū)里,不能向外讀出,以保證其私密性,但可以使用該私鑰進行加密或簽名。用戶獲得自己的uKey后就可以登錄指定的機器。
2)用戶注冊
當(dāng)客戶端第一次使用uKey進行登錄時,需要向身份認(rèn)證服務(wù)器進行注冊??蛻舳俗x出uKey中的數(shù)字證書,同時在本地創(chuàng)建本地賬戶名(機器名+硬盤序列號)和密碼,經(jīng)過私鑰加密后一起發(fā)送給身份驗證服務(wù)器。服務(wù)器接收到后,驗證證書的合法性,如果合法,就認(rèn)為此用戶是合法用戶,然后檢查身份信息數(shù)據(jù)庫。如果沒有此賬戶名,服務(wù)器則認(rèn)為這臺機器是第一次被登錄,需要進行注冊,就把此賬戶名和密碼加入身份信息數(shù)據(jù)庫,接著服務(wù)器向客戶端發(fā)回確認(rèn)信息,客戶端收到后則認(rèn)為注冊成功。
3)安全登錄
用戶登錄客戶端時,首先插入uKey并將用戶信息提交到身份驗證服務(wù)器,服務(wù)器生成隨機數(shù)發(fā)回到客戶端;然后客戶端利用uKey對隨機數(shù)進行簽名并發(fā)回服務(wù)器端;最后服務(wù)器利用對應(yīng)的用戶公鑰進行驗證,如果有效就認(rèn)為是合法用戶,否則拒絕登錄。具體登錄驗證流程如圖4所示。
圖4 基于uKey的安全登錄與身份認(rèn)證流程
a.用戶登錄客戶端,開啟計算機。
b.Winlogon進程調(diào)用自定義的Ginamy.dll替換默認(rèn)的msgina.dll,實現(xiàn)自己的身份驗證過程。
c.Ginamy.dll通過調(diào)用uKey的API函數(shù)來檢測uKey是否插上,如未發(fā)現(xiàn)uKey,則提示用戶插入uKey,并拒絕登錄。
d.一旦檢測到uKey,則彈出自定義對話框,要求用戶輸入個人PIN碼,這一過程是對持卡人身份的確認(rèn)。
e.如果驗證PIN碼正確,則可啟動認(rèn)證過程(如圖4中虛線框中的認(rèn)證算法)。
f.自定義的Ginamy.dll模塊將根據(jù)認(rèn)證結(jié)果返回允許或禁止用戶登錄系統(tǒng)。
g.若用戶有事暫時離開而拔下uKey,則計算機被鎖定,直到用戶重新插入合法的uKey,輸入正確PIN碼,經(jīng)過驗證成功后就可以重新登錄系統(tǒng)。
3.5 安全性分析
安全系統(tǒng)自身的安全性是首先要考慮的問題,以下從四個方面對采用uKey實現(xiàn)身份認(rèn)證的安全性進行分析:
1)用戶私鑰的雙重保護
用戶數(shù)字證書及個人密鑰保存在uKey中。身份驗證時,使用對稱加密算法對用戶私鑰進行加密處理。由于私鑰不通過網(wǎng)絡(luò)傳輸,因此攻擊者不可能從截獲的數(shù)據(jù)中獲得用戶私鑰。此外,uKey的訪問密碼只在客戶端出現(xiàn),也不通過網(wǎng)絡(luò)傳輸。
2)認(rèn)證過程的安全性
由于對隨機數(shù)進行簽名在uKey內(nèi)部完成,用于簽名的私鑰保存在卡內(nèi)固定區(qū)域,并且在簽名過程中私鑰不會被讀出到內(nèi)存,任何人都無法獲得uKey私鑰,因此保證了認(rèn)證過程的安全性。
3)能抵抗重放攻擊
由于每次身份驗證時,服務(wù)器都要發(fā)送不同的隨機數(shù)給客戶端,因此,如果攻擊者將以前截獲的簽名信息重放,則不可能認(rèn)證成功;如果服務(wù)器發(fā)送的隨機數(shù)被截獲,由于攻擊者不能得到用戶私鑰也不可能將隨機數(shù)正確簽名,因此也不可能認(rèn)證成功。
4)能抵抗假冒攻擊
由于攻擊者無法獲取用戶私鑰以及用戶uKey的PIN碼,因此無法向服務(wù)器端發(fā)送驗證請求,從而無法通過服務(wù)器的認(rèn)證。
4 小結(jié)
本文論述了身份認(rèn)證技術(shù),在研究uKey技術(shù)及Windows系統(tǒng)登錄原理的基礎(chǔ)上,提出了一種基于數(shù)字證書的uKey安全登錄與身份認(rèn)證方案,完成了自定義GINA的開發(fā),實現(xiàn)了基于uKey的身份認(rèn)證與系統(tǒng)安全登錄功能。經(jīng)調(diào)試運行,系統(tǒng)達到了對安全登錄與身份認(rèn)證的目標(biāo)要求。