Windows操作系統(tǒng)的密碼解決方案
時(shí)間:
諸曄 秦芳 周東1由 分享
摘 要 本文從密碼學(xué)的角度對(duì)Windows操作系統(tǒng)進(jìn)行了分析,指出了Windows操作系統(tǒng)是如何通過(guò)程序來(lái)實(shí)現(xiàn)密碼安全功能的,并描述了Windows操作系統(tǒng)的安全特征及實(shí)現(xiàn)用戶認(rèn)證的技術(shù)細(xì)節(jié)。
關(guān)鍵詞 CSP;MS-CAPI;數(shù)字證書;ActiveX控件;COM組件;NTLM;域控制器
1 引言
在安全方面,微軟開發(fā)并免費(fèi)提供一套密碼接口API(MS-CAPI),使用這套API能夠解決Windows操作系統(tǒng)中的密碼安全問(wèn)題。
像JAVA中的JCA/JCE一樣,MS-CAPI隱藏了密碼算法本身的一些繁瑣內(nèi)容,而僅體現(xiàn)出功能上的要求。MS-CAPI同樣使用了引擎和類的方式,但它有自己的術(shù)語(yǔ)描述方法。在MS-CAPI中,提供者類等同于我們常說(shuō)的CSP(Cryptographic Service Providers)。不同的廠家提供的CSP在內(nèi)部實(shí)現(xiàn)代碼上可能不盡相同,但是在對(duì)外接口上按照微軟的定義都是完全一樣的。MS-CAPI提供一套通用的但需要CSP支持的外包接口,應(yīng)用程序開發(fā)者通過(guò)使用這套接口來(lái)實(shí)現(xiàn)密碼安全功能。CSP的內(nèi)部?jī)?nèi)容對(duì)于應(yīng)用程序的開發(fā)者來(lái)說(shuō)是透明的。MS-CAPI自帶默認(rèn)的微軟CSP,這個(gè)CSP也可被其它第三方的CSP所替代。
圖1 MS-CAPI與CSP的關(guān)系
圖2 MS-CAPI方法與CSP
CSP實(shí)際上就是一個(gè)DLL文件,這個(gè)文件必須經(jīng)過(guò)微軟的簽名才能保證它在Windows操作系統(tǒng)中的可用性,目前,微軟免費(fèi)對(duì)第三方的CSP進(jìn)行簽名。在應(yīng)用過(guò)程中,Windows操作系統(tǒng)首先要驗(yàn)證簽名合法性后才能正常使用。
2 MS-CAPI
我們來(lái)看一段用VB寫的小程序,這是運(yùn)用MS-CAPI來(lái)生成數(shù)字簽名的例子。例子本身很簡(jiǎn)單,但筆者還是給出了一定的注解,便于閱讀。
//給需要簽名的明文分配一個(gè)變量strPlainText
strPlainText = ”明文數(shù)據(jù)”
//通過(guò)CAPICOM數(shù)字簽名類創(chuàng)建一個(gè)對(duì)象,給對(duì)象命名oDigSig
set oDigSig = CreateObject(“CAPICOM.SignedData”)
//在數(shù)字簽名對(duì)象和明文建立關(guān)聯(lián)
oDigSig.Content = strPlainText
//設(shè)置輸出數(shù)據(jù)僅為簽名結(jié)果而不包含明文
fDetached = TRUE
//生成明文。通過(guò)調(diào)用數(shù)字簽名對(duì)象的Sign方法,同時(shí)傳遞相應(yīng)參數(shù)到方法中,變量signature包含簽名結(jié)果
signature = oDigSig.Sign(Nothing,fDetached)
和JCA/JCE類似,MS-CAPI的最大優(yōu)點(diǎn)就在于它是完全公開的,用戶可以自由的使用。而且,它已經(jīng)成為了IE和Windows2000以上操作系統(tǒng)的一部分。在未來(lái)的日子里,依靠微軟的品牌效應(yīng)再加上Windows操作系統(tǒng)龐大的用戶群,很可能使得MS-CAPI成為相當(dāng)流行的密碼安全類軟件。 MS-CAPI另一大優(yōu)點(diǎn)在于CAPICOM。CAPICOM是一個(gè)COM客戶端,可以通過(guò)ActiveX控件或COM組件的形式進(jìn)行密碼函數(shù)的自動(dòng)調(diào)用,CAPICOM用于處理基本的密碼操作,如簽名驗(yàn)證,數(shù)字信封,解密數(shù)字信封,加解密數(shù)據(jù),檢查數(shù)字證書的有效性等。CAPICOM可以用VB或VC 進(jìn)行調(diào)用。
3 安全與Windows操作系統(tǒng)
3.1 安全特征
(1)安全登錄與反欺騙措施:安全登錄要求管理員為所有用戶設(shè)置一個(gè)口令用于登錄。黑客會(huì)開發(fā)一個(gè)能夠給用戶顯示登錄界面的程序,然后通過(guò)某種方式在用戶終端上運(yùn)行,而不加懷疑的用戶往往會(huì)認(rèn)為這個(gè)登錄界面就是系統(tǒng)的登錄界面,并在其中輸入自己的用戶ID和口令,攻擊者以此方式輕易地就能夠截獲用戶ID和密碼,并顯示一個(gè)登錄失敗的錯(cuò)誤信息給用戶。Windows2000以上操作系統(tǒng)通過(guò)要求用戶使用CTRL-ALT-DEL結(jié)合的方式進(jìn)行登錄來(lái)防止上述攻擊。鍵盤驅(qū)動(dòng)程序在捕捉到CTRL-ALT-DEL的序列以后,會(huì)通知系統(tǒng)調(diào)用正確的登錄顯示界面。在Windows中,是沒(méi)有辦法屏蔽CTRL- ALT-DEL三鍵組合消息的,因此,使得黑客欺騙變得無(wú)機(jī)可乘。
(2)任意訪問(wèn)控制:這種機(jī)制允許資源如文件的擁有者能夠決定誰(shuí)并且能夠以哪種方式來(lái)訪問(wèn)資源。
(3)權(quán)限訪問(wèn)控制:這種機(jī)制允許系統(tǒng)管理員在出現(xiàn)問(wèn)題的情況下,超越任意訪問(wèn)控制的范圍。
(4)地址空間保護(hù):Windows2000以上操作系統(tǒng)給每個(gè)進(jìn)程提供獨(dú)立的受保護(hù)的虛擬地址空間,這樣就有效地防止了惡意的進(jìn)程攻擊。
(5)新頁(yè)歸零:這種機(jī)制保證了任何新頁(yè)都是從內(nèi)存地址二進(jìn)制0開始的,這樣一來(lái),一個(gè)進(jìn)程就無(wú)法知道它前面的那個(gè)進(jìn)程到底做了些什么。
(6)安全審計(jì):利用這個(gè)機(jī)制,系統(tǒng)管理員能夠通過(guò)查詢系統(tǒng)產(chǎn)生的日志了解系統(tǒng)的相關(guān)安全事件。
每個(gè)Windows2000的用戶和用戶組會(huì)被分配一個(gè)惟一的SID,這個(gè)SID由一個(gè)隨機(jī)數(shù)和一個(gè)短的二進(jìn)制的頭標(biāo)志組成。每個(gè)SID在全世界惟一。進(jìn)程和線程只有在用戶的SID下才能運(yùn)行。每個(gè)進(jìn)程在Windows2000下都有一個(gè)包含SID和其它信息的可訪問(wèn)令牌。系統(tǒng)中的每個(gè)資源(如文件)又都有一個(gè)對(duì)應(yīng)的安全描述符,該描述符描述了哪個(gè)SID允許做哪些操作。
3.2 用戶認(rèn)證
Windows 2000使用Kerberos協(xié)議來(lái)完成用戶身份認(rèn)證。同時(shí)系統(tǒng)也支持Windows NT的挑戰(zhàn)/響應(yīng)機(jī)制,這種機(jī)制又被稱之為NTLM。NTLM以挑戰(zhàn)/響應(yīng)機(jī)制為基礎(chǔ),同時(shí)避免明文口令的簡(jiǎn)單傳遞。NTLM的工作原理如下:
(1)用戶在登錄界面上輸入用戶ID和口令。用戶的計(jì)算機(jī)計(jì)算出口令的摘要值,同時(shí)在內(nèi)存中銷毀用戶輸入的口令。
(2)客戶端將用戶ID的明文傳遞到服務(wù)端。
(3)服務(wù)器傳送16字節(jié)的隨機(jī)數(shù)到客戶端。
(4)客戶端用口令計(jì)算出的摘要加密隨機(jī)數(shù),客戶端將加密結(jié)果(客戶端響應(yīng)值)傳送到服務(wù)器端。
(5)服務(wù)器將用戶ID、傳給客戶端的隨機(jī)數(shù)、客戶端響應(yīng)值(即客戶端加密結(jié)果)傳遞給一臺(tái)特殊的機(jī)器,我們稱之為域控制器。在域控制器上保留著所有的用戶ID和口令的消息摘要值。
(6)域控制器接收到從服務(wù)器端傳來(lái)的上述數(shù)據(jù)以后,從數(shù)據(jù)庫(kù)(SAM)中可以得到當(dāng)前用戶對(duì)應(yīng)的口令消息摘要值,并且用它來(lái)加密從服務(wù)器端傳來(lái)的隨機(jī)數(shù)。
(7)域控制器通過(guò)比較從服務(wù)器端傳來(lái)隨機(jī)數(shù)加密結(jié)果(第5步)和自身計(jì)算得到的結(jié)果(第6步)的一致性,來(lái)判斷用戶的身份是否合法。
圖3 Windows NTLM 的認(rèn)證過(guò)程
4 結(jié)論
從安全性的角度來(lái)說(shuō),Windows系統(tǒng)本身還有諸多方面值得我們進(jìn)行深入的研究,因?yàn)閃indows系統(tǒng)的安全性被集成到了操作系統(tǒng)的方方面面,大多數(shù)安全決策被本地的安全頒發(fā)策略所控制,本文的側(cè)重點(diǎn)僅在于關(guān)于密碼安全基礎(chǔ)的概念方面,力圖使讀者對(duì)于系統(tǒng)的安全特性有所了解,以便日后再進(jìn)行深入研究。
參考文獻(xiàn)
[1]Steve Burnett & Stephen Paine著,馮登國(guó),周永彬,張振峰,李德全等譯.《密碼工程實(shí)踐指南》.清華大學(xué)出版社,2001.10
[2]Bruce Schneier著,吳世忠等譯.應(yīng)用密碼學(xué)——協(xié)議、算法與C源程序.機(jī)械工業(yè)出版社,2000
[3]張世永.《網(wǎng)絡(luò)安全原理與應(yīng)用》.科學(xué)出版社
[4]尹傳勇,劉壽強(qiáng),陳嬌春.《基于PKI/CA身份認(rèn)證體系的應(yīng)用研究》.計(jì)算機(jī)安全