轉(zhuǎn)載:公鑰、私鑰、USBKey、CSP、數(shù)字證書(shū)和CryptoAPI的簡(jiǎn)介
數(shù)字證書(shū):英文digital certificate,在因特網(wǎng)上,用來(lái)標(biāo)志和證明網(wǎng)絡(luò)通信雙方身份的數(shù)字信息文件。包含一個(gè)公開(kāi)密鑰、名稱以及證書(shū)授權(quán)中心的數(shù)字簽名。
公開(kāi)密鑰:對(duì)外公開(kāi),私鑰則有自己保存,用其中一把密鑰加密,另一把密鑰用于解密。(非對(duì)稱密鑰,典型的算法代表是RSA)
私鑰用來(lái)進(jìn)行解密和簽名,而公鑰則由本人公開(kāi),為一組用戶所共享,用于加密和驗(yàn)證簽名。
在網(wǎng)上查閱了一些例證和示意圖,感覺(jué)對(duì)上述概念的概括比較形象具體。
有兩個(gè)用戶Alice和Bob,Alice想把一段明文通過(guò)雙鑰加密的技術(shù)發(fā)送給Bob,Bob有一對(duì)公鑰和私鑰,那么加密解密的過(guò)程如下:
(1)Bob將他的公開(kāi)密鑰傳送給Alice。
(2)Alice用Bob的公開(kāi)密鑰加密她的消息,然后傳送給Bob。
(3)Bob用他的私人密鑰解密Alice的消息。
上面的過(guò)程可以用下圖表示,Alice使用Bob的公鑰進(jìn)行加密,Bob用自己的私鑰進(jìn)行解密。?
?
圖1 公鑰私鑰工作流程示意圖
總結(jié):公鑰和私鑰是成對(duì)的,他們相互解密。公鑰加密,私鑰解密;私鑰數(shù)字簽名,公鑰驗(yàn)證簽名。
USB Key是一種USB接口的硬件設(shè)備。它內(nèi)置單片機(jī)或智能卡芯片,有一定的存儲(chǔ)空間,可以存儲(chǔ)用戶的私鑰以及數(shù)字證書(shū),利用USB Key內(nèi)置的公鑰算法實(shí)現(xiàn)對(duì)用戶身份的認(rèn)證。由于用戶私鑰保存在密碼鎖中,理論上使用任何方式都無(wú)法讀取,因此保證了用戶認(rèn)證的安全性。USB Key就是指可插拔鑰匙,就是用來(lái)存放你的數(shù)字證書(shū)的。(硬件數(shù)字證書(shū)載體)
我在網(wǎng)上找到了一段話,他對(duì)數(shù)字證書(shū)和USB Key的關(guān)系和工作結(jié)合流程總結(jié)的比較形象,拿來(lái)分享一下:
數(shù)字證書(shū)是怎樣保障網(wǎng)銀交易的安全呢?
第一步,您要先獲得數(shù)字證書(shū)。您需要先開(kāi)通網(wǎng)上銀行并申請(qǐng)數(shù)字證書(shū),獲得下載數(shù)字證書(shū)的密碼信封后,就可以下載證書(shū)了。數(shù)字證書(shū)可以存放到USB key中,也可以存放在電腦的瀏覽器中。這時(shí),就意味著您已經(jīng)擁有了屬于您自己獨(dú)一無(wú)二的數(shù)字證書(shū)了。您也許會(huì)問(wèn),它到底是什么東西,為什么要用USB key呢?USB key是一種既安全,又方便的存儲(chǔ)介質(zhì)。USB key的模樣跟普通的U盤(pán)差不多,不同的是它里面存放了智能芯片。用戶的信息下載到USB key內(nèi),就是獨(dú)一無(wú)二不可復(fù)制的,誰(shuí)要在網(wǎng)上轉(zhuǎn)移賬戶里的資金都必須事先通過(guò)USB key客戶證書(shū)進(jìn)行唯一認(rèn)證,您只要把USB key帶在身邊,即使賬號(hào)、密碼泄露,但拿不到USB key,別人也不能冒充你。
第二步,您可以安全登錄網(wǎng)上銀行。在使用網(wǎng)上銀行時(shí),您需要將USB key插入電腦,并且輸入U(xiǎn)SB key的密碼。這時(shí),在電腦后面的網(wǎng)絡(luò)中,銀行和您的數(shù)字證書(shū)會(huì)相互確認(rèn)對(duì)方的身份。也就是說(shuō)檢查一下銀行的網(wǎng)站是不是真的,而不會(huì)是不法分子搞的假網(wǎng)站,同時(shí)您的身份是否正確,不會(huì)是黑客冒充您。在雙方身份驗(yàn)證真實(shí)后,您和銀行之間會(huì)建立一個(gè)安全的加密通道,這時(shí)您就可以放心地進(jìn)行個(gè)人網(wǎng)上銀行的登陸了。整個(gè)過(guò)程都是自動(dòng)的,只需要幾秒種就可以完成。
第三步,您可以進(jìn)行安全的網(wǎng)銀交易了。經(jīng)過(guò)了您和銀行雙方身份的驗(yàn)證,您對(duì)賬戶進(jìn)行的操作指令都將在一個(gè)加密的安全通道中傳輸,任何人在網(wǎng)絡(luò)上不能對(duì)這個(gè)信息進(jìn)行篡改,也不能從中破獲您的賬戶信息。特別是在您資金劃轉(zhuǎn)交易結(jié)束,系統(tǒng)提示您是否確認(rèn)此操作時(shí),您可能不知道,在您點(diǎn)擊"確定"這個(gè)按鍵的同時(shí),這項(xiàng)交易的操作時(shí)間、操作種類、操作金額等已經(jīng)被您的數(shù)字證書(shū)系統(tǒng)作了電子簽名并保存下來(lái)。這個(gè)被保存的不可改變的簽名,可以在未來(lái)拿出來(lái)核實(shí)當(dāng)時(shí)是否存在這樣一筆交易,為網(wǎng)上交易可能出現(xiàn)的爭(zhēng)議提供了事實(shí)證據(jù)。
最后還要特別提醒您,要保管好您的數(shù)字證書(shū),否則就如同房間的主人丟了防盜門(mén)的鑰匙,或者如同在現(xiàn)實(shí)生活中丟失了身份證一般。假如您不小心丟了數(shù)字證書(shū)或USB Key,請(qǐng)您及時(shí)通知銀行為您重新發(fā)放數(shù)字證書(shū)??傊?,只要您正確地使用網(wǎng)上銀行,你就可以隨時(shí)隨地在虛擬的網(wǎng)絡(luò)世界中,放心自如地管理資金、進(jìn)行交易。
數(shù)字證書(shū)應(yīng)該由誰(shuí)來(lái)發(fā)放?
數(shù)字證書(shū)應(yīng)該由獨(dú)立于用戶和銀行以外的權(quán)威的第三方安全認(rèn)證機(jī)構(gòu)(簡(jiǎn)稱CA)來(lái)發(fā)放。第三方CA為客戶和銀行承擔(dān)了網(wǎng)上信息安全的部分責(zé)任,為客戶和銀行規(guī)避了一定的風(fēng)險(xiǎn)。
比如在出現(xiàn)網(wǎng)上銀行糾紛時(shí),第三方CA可以為使用數(shù)字證書(shū)進(jìn)行網(wǎng)銀交易的客戶、銀行提供證明,以明確雙方的責(zé)任。若銀行越位當(dāng)CA給用戶發(fā)放數(shù)字證書(shū),就意味著銀行既當(dāng)裁判員又當(dāng)運(yùn)動(dòng)員,在發(fā)生糾紛時(shí),就很難保證提供的證明資料的公正性。
目前在網(wǎng)上銀行中使用最多,權(quán)威性最高的認(rèn)證機(jī)構(gòu)是"中國(guó)金融認(rèn)證中心(英文簡(jiǎn)稱CFCA)"發(fā)放的數(shù)字證書(shū)。這是一個(gè)權(quán)威的、可信賴的、公正的第三方安全認(rèn)證機(jī)構(gòu),也是金融行業(yè)唯一的第三方安全認(rèn)證機(jī)構(gòu),絕大部分銀行使用的都是這里發(fā)放的數(shù)字證書(shū)。當(dāng)您在銀行網(wǎng)點(diǎn)申請(qǐng)辦理網(wǎng)上銀行時(shí),可以直接向網(wǎng)點(diǎn)申請(qǐng)CFCA的數(shù)字證書(shū),銀行網(wǎng)點(diǎn)還會(huì)提供給您一份《CFCA數(shù)字證書(shū)責(zé)任書(shū)》和《CFCA數(shù)字證書(shū)服務(wù)承諾書(shū)》,上面還明確承諾了因數(shù)字證書(shū)給您造成損失的賠付金額。
CryptoAPI是什么?
它是Microsoft Windows提供的應(yīng)用程序編程接口。微軟的CryptoAPI是Win32平臺(tái)下為應(yīng)用程序開(kāi)發(fā)者提供的數(shù)據(jù)加密和安全的編碼接口。CryptoAPI函數(shù)集包含了基本的ASN.1的編碼、解碼,散列,數(shù)據(jù)加密和解密,數(shù)字證書(shū)管理等重要的密碼學(xué)應(yīng)用功能。數(shù)據(jù)的加密、解密支持對(duì)稱和非對(duì)稱兩類算法。CryptoAPI是所有微軟的Win32的應(yīng)用程序以及第三方廠商應(yīng)有程序使用的數(shù)據(jù)加密接口。
CryptoAPI 提供了一組函數(shù),這些函數(shù)允許應(yīng)用程序在對(duì)用戶的敏感私鑰數(shù)據(jù)提供保護(hù)時(shí)以靈活的方式對(duì)數(shù)據(jù)進(jìn)行加密或數(shù)字簽名。實(shí)際的加密操作是由稱為加密服務(wù)提供程序 (CSP) 的獨(dú)立模塊執(zhí)行。CryptoAPI體系主要由以下幾部分組成:基本加密函數(shù)、證書(shū)編碼與解碼函數(shù)、證書(shū)存儲(chǔ)函數(shù)、簡(jiǎn)化信息處理函數(shù)、底層信息處理函數(shù)。下午對(duì)這些函數(shù),主要是基本加密函數(shù)做了大致的了解。
CSP是什么?
加密服務(wù)提供者 (Cryptographic Service Provider) 是執(zhí)行身份驗(yàn)證、編碼和加密服務(wù)的程序,基于 Windows 的應(yīng)用程序通過(guò) Microsoft 加密應(yīng)用程序編程接口 (CryptoAPI) 訪問(wèn)該程序。每個(gè) CSP 提供不同的 CryptoAPI 實(shí)現(xiàn)。某些提供更強(qiáng)大的加密算法,而另外一些則使用硬件組件(如智能卡)。生成新證書(shū)的申請(qǐng)時(shí),該申請(qǐng)中的信息先從申請(qǐng)程序發(fā)送到 CryptoAPI。CryptoAPI 向安裝在計(jì)算機(jī)上或計(jì)算機(jī)可以訪問(wèn)的設(shè)備上的 CSP 提供正確的數(shù)據(jù)。如果 CSP 是基于軟件的,則它在計(jì)算機(jī)上生成一個(gè)公鑰和一個(gè)私鑰,這兩個(gè)密鑰通常稱為密鑰對(duì)。如果 CSP 是基于硬件(如智能卡 CSP)的,則它指導(dǎo)一個(gè)硬件生成密鑰對(duì)。密鑰生成后,基于軟件的 CSP 將對(duì)私鑰進(jìn)行加密,從而保護(hù)私鑰的安全。
CSP和CryptoAPI有什么關(guān)系?
CSP由23個(gè)函數(shù)組成,劃分為四類:連接、密鑰產(chǎn)生與交換、數(shù)據(jù)加密以及哈希和數(shù)字簽名。每個(gè)類型函數(shù)相對(duì)比較獨(dú)立,各自實(shí)現(xiàn)不同的功能。
CSP連接:該模塊負(fù)責(zé)與KEY容器的連接與斷開(kāi),同時(shí)還處理CSP相關(guān)屬性設(shè)置與讀取。
?????? 密鑰產(chǎn)生和交換:該模塊負(fù)責(zé)密鑰的產(chǎn)生、密鑰屬性的設(shè)置與讀取,以及密鑰的導(dǎo)入和導(dǎo)出。
數(shù)據(jù)加密:該模塊主要完成:數(shù)據(jù)加密和解密,包括對(duì)稱加密和非對(duì)稱加密算法。
哈希和數(shù)字簽名:該模塊主要完成:簽名驗(yàn)證,哈希的創(chuàng)建、設(shè)置和釋放。
下圖描述了PS CSP的結(jié)構(gòu)以及其在CryptoAPI接口中的位置。?
?圖2 CSP結(jié)構(gòu)圖
?一個(gè)CSP 是實(shí)現(xiàn)所有加密操作的獨(dú)立模塊。在每一個(gè)應(yīng)用程序中至少需要提供一個(gè)CSP來(lái)完成所需的加密操作。如果使用多于一個(gè)以上的CSP,在加密函數(shù)調(diào)用中就要指定所需的CSP。CryptoAPI函數(shù)使用CSP完成數(shù)據(jù)加密、解密以及密鑰的存儲(chǔ)管理、所有的CSP都是相互獨(dú)立的模塊。理論上,CSP應(yīng)該獨(dú)立于特定的應(yīng)用程序,也就是說(shuō)所有的應(yīng)用程序可以使用任何一個(gè)CSP。但是,實(shí)際上有些應(yīng)用程序只能與特定的CSP協(xié)作,CSP與應(yīng)用程序之間的關(guān)系類似于Windows GDI模型。