寫(xiě)完上一篇,密碼學(xué)這棵大樹(shù)的主干,基本就勾勒完了。我們要開(kāi)始為它添加枝葉和果實(shí),就是一個(gè)個(gè)重要的知識(shí)點(diǎn)。今天介紹的是Windows下密碼體系的實(shí)現(xiàn)和調(diào)用機(jī)制。 密碼學(xué)是科學(xué),PKI是技術(shù)體系,而不同操作系統(tǒng)平臺(tái)有不同的PKI實(shí)現(xiàn)方式。Windows采用的是CryptoAPI/CSP體系。CryptoAPI是標(biāo)準(zhǔn)密碼功能接口,包括了對(duì)稱(chēng)加解密、非對(duì)稱(chēng)加解密、數(shù)字簽名與驗(yàn)證、數(shù)字摘要以及證書(shū)管理這些主要功能以及眾多輔助功能。通過(guò)包含WinCrypt.h頭文件,可以瀏覽并引入所需要的功能接口。如下圖,調(diào)用CertOpenStore打開(kāi)計(jì)算機(jī)上的證書(shū)存儲(chǔ)集。 CryptoAPI足夠強(qiáng)大全面,但它本質(zhì)上只是調(diào)用接口,真正實(shí)現(xiàn)密碼功能的是加密服務(wù)提供程序,英文全稱(chēng)Cryptographic Service Provider,簡(jiǎn)稱(chēng)CSP。Windows定義了一套標(biāo)準(zhǔn)的密碼服務(wù)接口,CSP實(shí)現(xiàn)了這些接口,而CryptoAPI則通過(guò)這套接口調(diào)用CSP的相關(guān)功能。那么,CSP從哪來(lái)的呢?是由各個(gè)安全廠商提供的。比如,研發(fā)加密機(jī)、加密卡、USB Key的安全企業(yè)。根據(jù)密碼學(xué)“私鑰永遠(yuǎn)不出Key”的圭帛,涉及到密鑰的運(yùn)算都需要由硬件完成,而不同硬件的原生接口千差萬(wàn)別,應(yīng)用系統(tǒng)如果直接調(diào)用硬件的接口,會(huì)帶來(lái)很多的重復(fù)開(kāi)發(fā),程序的可移植性和兼容性也會(huì)差很多。因此,CSP機(jī)制的意義在于屏蔽了硬件實(shí)現(xiàn)的不同,各個(gè)廠商提供自己的CSP,使CryptoAPI可以用同樣的接口調(diào)用不同的安全硬件功能。整個(gè)CryptoAPI/CSP體系的結(jié)構(gòu)如下圖。 從上往下看,應(yīng)用層就是要實(shí)現(xiàn)密碼 2000年左右CSP由微軟推出后,迅速成為市場(chǎng)上主流的密碼服務(wù)調(diào)用機(jī)制,應(yīng)用系統(tǒng)實(shí)現(xiàn)密碼服務(wù)的門(mén)檻被大幅度降低。據(jù)我了解,Java、Android、IOS還沒(méi)有類(lèi)似的機(jī)制。而微軟的這一機(jī)制倒是啟發(fā)了國(guó)內(nèi)很多CA廠商,它們也通過(guò)定義一套標(biāo)準(zhǔn)接口,實(shí)現(xiàn)接入多種安全硬件設(shè)備。 CryptoAPI/CSP機(jī)制雖然強(qiáng)大,但它畢竟比較復(fù)雜,而且不適合所有的應(yīng)用場(chǎng)景,尤其是JavaScript這樣的客戶端頁(yè)面腳本。你當(dāng)然可以自己把CryptoAPI封裝成COM控件,供腳本語(yǔ)言調(diào)用。但這里推薦CAPICOM,全名是 Cryptographic API Component Object Model,它是微軟為了方便使用,將CryptoAPI封裝成的COM安全組件。最新版本的CAPICOM是2.1.0.2。因?yàn)樗怯晌④浽瓘S商提供,又和CryptoAPI同源,所以使用起來(lái)還是很方便的,尤其它對(duì)數(shù)字證書(shū)的管理使用做的很不錯(cuò)。比如用下面的語(yǔ)句就可以在JS中調(diào)用CAPICOM的證書(shū)組件。 var smcerts = new ActiveXObject ("CAPICOM.Certificate"); 關(guān)于Windows下密碼體系的實(shí)現(xiàn)和調(diào)用機(jī)制就介紹到這里,如果大家有任何問(wèn)題和建議,歡迎評(píng)論交流。 |
|
來(lái)自: 吳雨虹2kzpi83a > 《密碼學(xué)》