基于USB和SD接口智能卡的CSP設計
為了方便在Windows 上提供加密服務,Microsoft 提出了一套CSP/Crypto API 的開發模式,它提供了一套加解密和簽名認證的編程接口供應用程序開發人員調用,通過調用這套函數接口,應用程序可以利用軟件或硬件(智能卡)為用戶提供強大的加解密服務。近幾年來,由于智能卡的小巧,方便易用和高安全可靠性使得它已成為主流的安全介質。采用基于智能卡的CSP 能充分發揮智能卡即插即用、總線供電的特點,使安全設備具有可攜帶性和靈活性,能方便地在各種場合進行簽名加密和認證。然而目前每個智能卡廠商都需要開發基于自己智能卡的CSP,如果能提供一套方便的、集成多廠商智能卡的CSP 的解決方案,將大大提高開發效率,節約開發成本,具有很高的應用價值和很好的市場前景。
1 CSP簡介
1.1 關于Microsoft CryptoAPI和CSP
為了提供一些諸如加密/ 解密、簽名/ 認證、隨機數的生成等基本的信息安全服務,一些標準化組織和業界的大廠商提出了各自的一套關于提供這些服務的API,目前有關加密API 的國際標準和規范主要有:Intel CDSA、RSA PKCS#11 和微軟CryptoAPI。其中微軟CryptoAPI 是PKI 推薦使用的加密API[1],它為應用程序的開發者提供了一套完備的Win32 環境下加解密和簽名驗證接口,而CSP(Cryptographic Service Provider)則是真正實現這些加解密和簽名驗證功能的基本模塊。
.jpg)
如圖1 所示,應用程序通過調用CryptoAPI 提供的接口來使用所提供的安全服務,操作系統根據上層的API 調用來選擇合適的SPI,相應的CSP 則通過統一的接口(SPI)來得到上層調用的參數,API 函數的具體實現則由具體對應的CSP提供。其中CSP 的實體是一個DLL 和一個簽名文件,DLL 中包括:加密設備提供函數、密鑰產生和交換函數、數據加密/ 解密函數、散列和數字簽名函數等幾類共24個基本的函數。在函數具體的實現中可以采用軟件實現和基于USB 或SD 接口智能卡的硬件實現方式。本文提出了一套基于USB 和SD 接口智能卡的CSP 設計,應用程序可以通過CSP 在卡中建立公/ 私鑰文件、對稱密鑰文件,并且能夠進行加解密和簽名認證。由于智能卡在不同文件的訪問上可以設置不同的密鑰來規定文件的訪問權限,因此從硬件上保證了密鑰文件的安全存儲。
1.2 關于智能卡
這里所用到的智能卡也稱CPU 卡,卡中包含中央處理器C P U 、E E P R O M 、R A M、R O M,其中R O M 中固化有COS(Chip Operating System)。智能卡對外通信的接口最常見的有應用于PC 上的USB 接口以及用于手持設備上的SD 接口。目前業界應用最廣的智能卡標準是ISO7816,各大智能卡廠商會根據此標準來生產智能卡以及COS。智能卡能和外界進行通信,根據傳入的命令在內部執行并且傳出結果,我們所用到的智能卡能夠在內部生成和保存RSA 的公私鑰對,進行RSA 加解密運算。
在智能卡中有一個文件系統,根據ISO7816-4,智能卡內支持兩種類型的文件:DF(Dedicated File)和E F(Elementary File)。DF 類似于DOS 中目錄文件,其中可以包含DF 和EF;EF 類似于DOS 中的數據文件,是真正存放數據的文件,公私鑰和對稱密鑰文件對屬于EF 文件;在每個智能卡文件系統中有一個根目錄文件MF(Master File),所有的DF 和EF 都存放在此根目錄文件中。EF 存在兩種類型,一種是二進制的EF,另一種是記錄型EF。二進制EF 文件是一種無結構的文件,而記錄型的EF 文件則是按記錄來進行存取的,每條記錄的長度可以在文件創建初指定。各智能卡廠商編寫的COS 對ISO7816 的支持不同,如有的廠商COS不支持記錄文件,文件訪問權限的實現大不相同等等,這就需要各廠商開發針對自己智能卡的CSP,這樣不利于節約開發成本和提高開發效率。本文提出的這套CSP 架構能夠方便地集成不同廠商不同COS 版本的智能卡,從而解決該問題。
1.3 基于USB 和SD 接口智能卡的CSP
目前智能卡的接口主要是USB 接口和SD 接口兩種,前者主要用于PC 機上,支持的操作系統多為各版本的PC Windows 系統(Windows 98/2000/XP);后者主要用于一些手持設備,如智能手機、掌上電腦,而這些手持設備上可以使用W i n -dows CE 操作系統。本文所介紹的CSP 主要是在這兩種操作系統上進行開發的。對于USB 接口智能卡,可以通過PC機上的CSP(基于Windows98/2000/XP)直接對其進行操作;對于SD接口智能卡,有兩種操作方式:一種是在手持設備上開發CSP(基于Windows CE)對其進行操作,另一種方式是通過PC 機上的CSP 和接入PC機的手持設備在底層進行通訊,CSP 把命令通過PC 機發送到手持設備的智能卡中,此時手持設備相當于一臺讀卡器。
2 基于USB和SD接口智能卡體系結構和模塊設計
2.1 CSP 的邏輯結構
我們提出的這套CSP 的設計主要包括三個部分:CSP 的邏輯結構、智能卡中文件組織結構、CSP 的基本命令流模塊。CSP 的基本操作是對密鑰的操作,其中密鑰主要是用于對稱加密的會話密鑰和用于交換和簽名的公/ 私密鑰。密鑰操作主要包括:產生密鑰、銷毀密鑰、導入導出密鑰、用對稱密鑰進行加密解密、用公/ 私密鑰對進行簽名驗證等。
CSP 的邏輯結構如圖2 所示。密鑰由密鑰提供者(KeyProvider) 來提供,密鑰提供者可以分為會話密鑰提供者(Session Key Provider)和公私密鑰提供者(RSA Key Provider),負責具體密鑰的產生、密鑰參數設置、密鑰的操作的實現。密鑰提供者驅動智能卡產生RSA 公/ 私密鑰,并保存在卡內相應的密鑰文件(EF)中,同時智能卡還提供簽名、驗證和隨機數生成等操作,這些操作都是由密鑰提供者根據ISO7816-4 協議在內存中構建相應的命令并發送到智能卡由其執行。相對于會話密鑰,CSP 則可提供軟實現,在內存中來進行操作。
.jpg)
密鑰容器(Key Container)控制密鑰提供者,每一個密鑰容器對于一個特定的應用。對于一個新的應用,CSP 創建一個新的密鑰容器,設置所需的參數,通過控制密鑰提供者來產生特定的密鑰,最后對其進行操作。對于用戶,各個密鑰容器之間是透明的,互不影響互不干涉,統一應用于同一個CSP 中。密鑰容器的創建涉及到在智能卡上建立一個目錄文件(DF),其中有關于該容器的密鑰文件(EF)都放在該目錄文件下。CSP 管理員(CSP Manager)充當一個全局管理者的角色,它是全局唯一的,負責建立和管理各類CSP 上下文環境。每個用戶有自己特定的CSP 應用環境,CSP 上下文則代表一個用戶具體的CSP 應用環境,CSP 管理員負責初始化CSP 的管理環境,主要包括初始化智能卡和設置智能卡管理員密鑰文件。CSP 上下文(CSP Context)相當于一個用戶的應用環境,所有的應用都是在CSP 上下文中完成,CSP 應用環境主要包括該用戶所建立密鑰容器的類型、密鑰提供者的類型和密鑰容器所在的具體位置。CSP 上下文在智能卡中為每個用戶創建該CSP 應用主目錄文件,保存用戶密鑰文件,為每個應用創建密鑰容器,并對其進行管理。
2.2 智能卡中的文件系統結構
對于上面提出的CSP 邏輯結構,在智能卡中應有相應的文件系統結構對其進行支持,對CSP 管理員、CSP 上下文、密鑰容器和密鑰提供者的操作都涉及到智能卡相應的文件操作,在卡中建立特定文件結構來進行密鑰的管理和操作。我們設計的該CSP 智能卡文件系統結構如圖3 所示,其中CSP 管理員初始化卡,建立根目錄(MF),在根目錄下建立管理員密鑰文件。只有擁有合法密鑰的用戶才能擁有管理員權限;為用戶建立CSP 上下文,即在根目錄下面為每一個CSP 上下文建立一個目錄文件(DF),不同的目錄文件對應于不同的CSP上下文,最后在根目錄下創建一個記錄型的EF 文件,該文件每一條記錄對應一個上下文,記錄它所在的目錄ID、CSP上下文名字等信息。CSP 上下文在自己的目錄文件中建立用戶密鑰文件、密鑰容器目錄文件,以及記錄密鑰容器信息的記錄型EF文件。每一個密鑰容器對應于一個目錄文件,在密鑰容器的目錄文件中,密鑰容器建立自己特定的密鑰文件,包括會話密鑰和公/ 私密鑰文件。各密鑰容器目錄相互獨立互不影響。
2.3 CSP 中的命令流
該CSP 設計的兩大部分是CSP 邏輯結構設計和CSP 命令流的設計。CSP 命令流是CSP 的邏輯模塊(CSP Manager,CSP Context,CSP Container,Key Provider)根據ISO7816-4 中命令格式在內存中構建命令并發送到智能卡中,智能卡執行命令后返回結果。該CSP 中對智能卡進行操作的模塊包括:命令構建模塊、命令傳輸模塊、命令解析模塊。CSP 上層邏輯模塊對智能卡操作的過程主要包括:通過命令構建模塊構建要進行操作的命令,命令傳輸模塊調用卡的驅動把命令發送到智能卡中執行,執行后通過命令傳輸模塊得到返回的結果,再由命令解析模塊解析該結果。
.jpg)
這樣設計最大的好處在于決策和執行分開。邏輯模塊決策要執行的命令,由命令流模塊構建和傳輸命令。命令流模塊可以針對不同廠商的智能卡來設計和實現,比如根據每個智能卡廠商COS 對ISO7816-4 的支持不同,分別針對其開發不同的命令構建模塊和命令解析模塊集成到一個CSP 中。邏輯模塊只負責決策要實施的命令,具體命令的構建、傳送、解析對它是透明的。這樣就能在不改變上層邏輯結構模塊的前提下,靠增加命令流模塊方便地集成更多廠商智能卡設備;同時由于命令傳輸模塊和智能卡驅動分離,通過命令傳輸模塊調用不同的驅動把命令發往不同接口的智能卡,這樣該CSP 就能支持基于不同平臺、不同終端、不同廠商的USB 和SD 接口智能卡。
3 結論
開發這樣一套能集成不同廠商智能卡的CSP 不僅能節約開發成本,提高開發效率,而且由于其本身支持SD 接口智能卡,使之能用于手機和Pocket PC 這樣的掌上設備,可以開發出基于其上的功能強大且靈活的應用程序,這些應用程序可以被用于諸如個人金融、證券、保險等行業和領域,應用前景十分廣闊。