數字證書的存儲和IC卡、USB Key的安全性
文章出處:http://hz-huyue.com 作者:中國一卡通網 收編 人氣: 發表時間:2011年09月28日
數字證書的產生、分發和存儲
首先,讓我們來回顧一下數字證書產生和分發的簡要過程。一個網上用戶怎樣才能得到一張數字證書呢?①他先要向RA提出注冊申請。②用戶的申請經RA審批通過后,RA向CA提交注冊建立請求。③CA建立對于該用戶的注冊,并將注冊建立結果返回給RA。④RA將注冊結果通知用戶。注冊結果中包含了兩組數字,分別稱為“參考號”和“授權碼”。⑤用戶方的軟件生成一對公鑰和私鑰。⑥用戶向CA提出證書請求。這個請求信息中還包含了用戶的公鑰和用戶的可甄別名等信息,這些信息在CA創建證書時要用到。⑦CA創建該用戶的數字證書。⑧通過適當方式將證書分發給用戶。
CA將證書分發給用戶的途徑有多種。第一種途徑是帶外分發(Out-of-band Distribution),即離線方式。例如,在北京國稅的證書項目中,密鑰對是由軟件運營商代替客戶生成,證書也是由運營商代替客戶從CA下載,然后把私鑰和下載的證書一起儲存在軟盤里,再交給用戶的。這樣做的好處是免去了用戶上網下載證書的麻煩。第二種途徑是帶內分發(In-band distribution),即用戶從網上下載數字證書到自己的電腦中。下載時,用戶要向CA出示“參考號”和“授權碼”,以向CA證明自己的身份。這樣做成本較低,但對使用計算機不太熟悉的用戶來說,可能在下載時會碰到一些麻煩。除了以上兩種方式外,CA還把證書集中放置在公共的數據庫中公布,用戶可以隨用隨查詢隨調用。
數字證書和私鑰儲存的介質有多種,可以存儲在計算機硬盤、軟盤、智能卡或USB key里。
需要澄清的概念
一、關于私鑰的唯一性
嚴格地講,私鑰既然是世上唯一且只由主體本身持有,它就必須由主體的計算機程序來生成。因為如果在別處生成將會有被拷貝的機會。然而在實際應用上并非如此,出于某些特殊需要(例如,如果只有一份私鑰,單位的加密文件就會因為離職員工帶走私鑰而無法解密。)加密用的公/私鑰對會要求在可信的第三方儲存其備份。這樣,加密用的私鑰可能并不唯一。然而簽名用的私鑰則必須保持唯一,否則就無法保證被簽名信息的不可否認性。
在生成用戶的密鑰對時,用于加密的公/私鑰對可以由CA、RA產生,也可以在用戶終端的機器上用專用的程序(如瀏覽器程序或認證軟件)來產生。用于數字簽名的密鑰對原則上只能由用戶終端的程序自行產生,才能保證私鑰信息的私密性以及通信信息的不可否認性。
有人可能會產生疑問:在北京國稅的證書項目中,加密和簽名的密鑰對都是由軟件運營商代替客戶生成的,這是否破壞了上述的私鑰唯一性原則呢?答案是否定的。這時候,私鑰的唯一性要依靠法律合同的保證以及操作過程中相應制度的約束,使得不可否認性得到支持。出于這種機制,我們仍然可以認為,用戶的簽名私鑰是唯一的。
二、證書,私鑰,到底保護哪一個?
我們常常聽到有人說:“保管好你的軟盤,保管好你的KEY,不要讓別人盜用你的證書。”有些教科書上也這樣講。應該說,這句話是有毛病的。數字證書可以在網上公開,并不怕別人盜用和篡改。因為證書的盜用者在沒有掌握相應的私鑰的情況下,盜用別人的證書既不能完成加密通信,又不能實現數字簽名,沒有任何實際用處。而且,由于有CA對證書內容進行了數字簽名,在網上公開的證書也不怕黑客篡改。我們說,更該得到保護的是儲存在介質中的私鑰。如果黑客同時盜走了證書和私鑰,危險就會降臨。
為什么說USB key安全性好
不同的存儲介質,安全性是不同的。如果證書和私鑰儲存在計算機的硬盤里,計算機一旦受到黑客攻擊,(例如被埋置了木馬程序)證書和私鑰就可能被盜用。
使用軟盤或存儲型IC卡來保存證書和私鑰,安全性要比硬盤好一些,因為這兩種介質僅僅在使用時才與電腦相連,用完后即被拔下,證書和私鑰被竊取的可能性有所降低。但是黑客還是有機會,由于軟盤和存儲型IC卡不具備計算能力,在進行加密運算時,用戶的私鑰必須被調出軟盤或IC卡進入外部的電腦,在這個過程中就會造成一定的安全隱患。
使用智能卡(含CPU的IC卡)儲存數字證書和私鑰是更為安全的方式。為什么這樣說呢?原來智能卡具有一定的計算機的功能,芯片中的CPU就是一臺小小的計算機。
產生公私密鑰對的程序(指令集)是智能卡生產者燒制在芯片中的ROM中的,密碼算法程序也是燒制在ROM中。公私密鑰對在智能卡中生成后,公鑰可以導出到卡外,而私鑰則存儲于芯片中的密鑰區,不允許外部訪問。
智能卡中密鑰文件存儲在E2PROM之中。對密鑰文件的讀寫和修改都必須由卡內的程序調用。從卡接口的外面,沒有任何一條命令能夠對密鑰區的內容進行讀出、修改、更新和刪除、。除非設計和編寫卡操作系統(COS)的人自己在COS上留了后門,只有他才知道如何從外部調出密鑰區的內容。但我們可以排除黑客與COS設計者相勾結的這種幾率極小的可能性。
在加密和簽名的運算過程中,外部計算機中的應用軟件使用智能卡API調用的方式,輸入參數、數據和命令,啟動智能卡內部的數字簽名運算、密碼運算等,并獲得返回結果。由于智能卡內部的CPU可以完成這些操作,全過程中私鑰可以不出智能卡介質,黑客的攻擊程序沒有機會去截獲私鑰,因此這就比證書和私鑰放在軟盤或硬盤上要安全得多。
從物理上講,對智能卡芯片中的內容作整體拷貝也是幾乎不可能的。雖然聽說有人能夠從智能卡芯片在操作過程中發生的微弱的電磁場變化,或者I/O口上反映出的微弱的電平變化中分析出芯片中的代碼。但現在國際上對智能卡生產商的技術要求很高,要求上述的指標要低到不能夠被測出來。國際上能夠生產智能卡的公司只有少數幾家,他們都采用了種種安全措施,確保智能卡內部的數據不能用物理方法從外部拷貝。
USB Key和智能卡除了I/O物理接口不一樣以外,內部結構和技術是完全一樣的,其安全性也一樣。只不過智能卡需要通過讀卡器接到電腦的串行接口上,而USB Key通過電腦的通用串行總線(USB)接口直接與電腦相接。另外,USB接口的通信速度要遠遠高于串行接口的通信速度?,F在出品的電腦已經把USB接口作為標準配置,而使用智能卡則需要加配讀卡器。出于以上原因,各家CA都把USB Key作為首選的證書和私鑰存儲介質而加以推廣。美中不足的是目前USB Key的成本還略顯昂貴,各家銀行在推行USB Key介質的證書時,要加收50至80元的成本費。
仍需注意的問題
這里需要指出的是,有些號稱智能卡的產品實際上只是不含CPU的存儲型IC卡,它僅僅具有存儲功能。上文已經介紹過,存儲型IC卡的安全性與軟盤相仿,對于這兩種不同類型的IC卡,用戶需要甄別清楚。
第二個問題是,盡管智能卡在設計和生產過程中,對安全機制給以了充分的考慮和保證,然而,由于人為因素,也可能帶來安全隱患。例如智能卡上提供一個閃存(flash)隨機存儲區域,是供寫入一般用戶數據或增加卡片功能的程序之用的。敏感的數據和程序不允許寫在閃存區,必須寫在安全存儲區。制作智能卡時,安全區要通過硬件方法做掩模處理。硬件的掩模處理費工費時成本高,一般需要3個月。有些卡商為了降低成本縮短工期迎合客戶要求,將應該放在安全區中的敏感數據和程序放在閃存區中,閃存區里的內容是可以從卡片外部進行讀寫的,這就造成了可能被黑客侵入的安全隱患。這就要求我們對合作的IC卡廠商的工藝流程也要仔細審查。
另外,為了防止USB key 不慎丟失而可能被他人盜用,不少證書應用系統在使用過程中還設置了口令認證機制。如口令輸入得不對,即使掌握了USB key,也不能登錄進入應用系統。這種雙因素認證機制可以使USB key更加安全可靠,值得提倡。