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