根據"私鑰永遠不出KEY"的定律,在實際密碼應用中基本上都是使用硬件設備作為私鑰證書的載體。今天介紹一下主流的幾種密碼安全設備和應用結合模式。
USB Key
USB Key的中文大名是智能密碼鑰,它是一種USB接口的硬件設備,内置芯片,有一定的存儲空間,可以存儲證書和私鑰。凡是使用私鑰進行的運算,都是在USB Key中完成。USB Key可随身攜帶,在需要使用時才接入電腦,進一步降低了私鑰外洩的風險。再加上通用性強,價格親民(硬件價格一般在幾十元左右),因此是使用最為廣泛的密碼安全工具之一。USB Key最常見的應用場景就是網銀了,前幾年幾大銀行采購的USB Key數量是以億計的,有設備廠商就是因此而上市。
雖然從外觀上看,USB Key和U盤沒有什麼區别。但其實兩者有本質的不同。從技術上講,你可以把USB Key看成一種小型的專用的計算機,它有自己的CPU、存儲和操作系統。USB Key的CPU一般相當于計算機上的8位CPU,存儲在64K-256K左右,操作系統就是COS(Chip Operating System芯片操作系統),硬件内置算法。USB Key的存儲主要用來存放證書和私鑰,也可以存放一些重要的用戶數據。有些USB Key産品還采用FLASH存儲芯片(既然經常被人當作U盤,那我就向U盤看齊),存儲空間可以做到幾個G。不過出于安全考慮,證書和私鑰一般不會放在FLASH存儲空間,另外,FLASH存儲的發熱會影響CPU芯片的運算。所以這種産品沒有成為市場上的主流。
用到USB Key的地方主要是數字簽名和私鑰解密。在需要數字簽名時,業務系統将明文送到USB Key内部,由USB Key中的私鑰對明文的摘要值進行加密;在需要解密時,業務系統将密文送到USB Key内部,由USB Key中的私鑰對密文進行解密。由于USB Key的私鑰還有口令保護,所以在界面上會彈出對話框,要求用戶輸入口令。用戶輸入正确口令後,USB Key的硬件使用私鑰完成運算,并将結果返回給業務系統。
上述流程看起來沒什麼問題,事實上USB Key也一直這樣用着。但就像前面說的,密碼需要正确使用以及完善的體系才能發揮的安全作用。而在上面的流程裡,USB Key内部沒有問題,但業務系統和USB Key的交互過程是有漏洞存在的。以數字簽名為例,攻擊者首先可以篡改業務系統向USB Key傳遞的明文,造成被USB Key實際簽名的數據和用戶認為被簽名的數據不一緻。比如在網銀系統裡,用戶在頁面上選擇轉賬1000元,而攻擊者将金額篡改成10000元再發給USB Key簽名。網銀系統得到簽名結果并驗證通過後,會按照10000元進行轉賬。其次,由于簽名時用戶是在計算機上的業務系統中輸入口令,因此存在口令被截獲的風險,過程請見下圖。
針對第一個漏洞,可以在USB Key設備上增加一塊顯示屏,顯示被簽名的明文,用戶在簽名前再确認。比如在網銀系統裡,用戶就可以确認USB Key收到的轉賬金額和頁面上選擇的轉賬金額是否一緻。針對輸入口令的被截獲的漏洞,可以在USB Key上安裝物理按鍵,實現口令在設備上的直接輸入,而不再經過計算機。改造後流程如下。
事實上,上述USB Key的漏洞最早就是在網銀應用中被發現的。後來各大銀行紛紛推出的二代、三代網銀設備,就是對原來的USB Key的改造升級。大家有興趣可以對比一下自己使用的網銀USB Key,看看有什麼變化。而在非網銀領域,出于成本考慮,基本還是使用普通的USB Key設備。
從開發的角度講,如果USB Key存儲的是RSA證書,那應用系統可基于CryptoAPI/CSP體系實現設備完全透明,也就是說應用系統不需要調用USB Key的任何接口,甚至不需要知道有沒有USB Key,隻需通過标準的CryptoAPI接口,就可以使用Key中的私鑰和證書,這一點在前面已經介紹過。如果應用系統使用的是裝有國密算法證書的USB Key,則無法使用CryptoAPI/CSP體系,而需要調用标準的國密庫接口。不過現在支持國密算法的USB Key都支持标準的國密庫接口,也就是說應用系統隻要開發一次,也可以使用多種國密算法USB Key。當然,由于Windows的CSP體系不支持國密算法,應用系統還必須指明要使用的是哪一種或幾種USB Key,做不到完全透明。另外,如果想使用USB Key存取重要的業務數據,情況就反過來了:對于支持國密算法證書的USB Key,國密庫接口裡包括讀寫數據的标準接口,對接一次即可;但如果是使用RSA算法證書的USB Key,由于CryptoAPI/CSP體系不包括數據讀寫,應用系統隻能調用設備的原生接口,而且由于接口不同,每種設備都要對接開發一次。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!