基于UML建模語言的開放式智能卡應用模型
文章出處:http://www.nyfzw.net 作者:邵 華,王恒奎,王東琳 人氣: 發表時間:2011年10月09日
1 概述
1.1開放式智能卡概述
隨著Internet在電子商務和人類生活中占有越來越重要的地位,人們對認證和安全交易的要求也越來越高。智能卡具有體積小、輕便易攜帶、可以自行存儲和處理數據并執行加密解密操作等優點,與網絡服務的結合還使它成為一個可以方便地存儲用戶密鑰和下載保密數據的設備。
智能卡中包含CPU、RAM、EEPROM、ROM和I/O,如同一部規模較小的電腦。智能卡的軟件結構由操作系統、虛擬機、智能卡應用模型及其具體應用服務程序所構成,如圖1所示。
在此結構中,最底層的操作系統負責底層硬件的管理;虛擬機這一層隱藏了不同的操作系統平臺,解釋執行用類匯編語言表示的應用程序;開放式智能卡應用模型定義了一整套編程接口類,提供應用程序需要的統一的應用環境;應用程序提供具體的智能卡服務。
1.2 開放式智能卡應用模型概述
當今智能卡的功能及其終端(讀卡設備)由于制造商的不同而種類繁多,使得智能卡的應用程序很難在不同智能卡開發平臺(智能卡的終端,智能卡操作系統和編程環境)之間移植;另外開發智能卡所使用的編程語言比較低級,開發困難、成本高。
開放式智能卡模型的提出滿足了智能卡應用開發的不同部分的需要,使得這些部分可以分別由應用程序開發者、智能卡發行商、智能卡開發者、智能卡終端開發者來完成,并都可以獨立開發并兼容使用。應用程序開發者希望開發的智能卡應用程序能夠在不同發行商發行的卡上運行,相應的智能卡發行商也希望能夠采用不同應用程序開發者提供的應用程序,自由地選擇操作系統而能適用于所有應用程序,任意地選擇卡終端提供者所提供的裝置和硬件驅動。開放式智能卡應用模型使得每個角色不需要隨著任何其它部件的更新而改變,每個角色所完成的功能獨立而協同。
2 基于UML的開放式智能卡應用模型
本文描述了一種位于智能卡應用程序和智能卡平臺之間的中間層,即開放式智能卡應用模型(Open Card Framework)來解決以上這些問題。目的是為了:
(1) 高層APIs(Application Program Interfaces)標準化:智能卡及其終端是通過交換命令對APDU(Application Protocol Data Unit)來完成各種各樣的功能,而對于不同的智能卡終端交互的機制是不同的,模型必須提供標準接口隱藏這些機制的復雜性。
(2)智能卡終端透明。智能卡的終端各式各樣(如POS機,指紋錄入設備),模型應盡可能隱藏設備的具體特征,并透明地提供它們的功能。
(3) 智能卡操作系統透明。一定的命令集完成一定的任務,智能卡操作系統將這些命令集包裝起來,只提供給應用程序相應的接口。不同的操作系統提供的接口是不同的,框架應隱藏這些接口的不同。
(4) 智能卡的發行商透明。智能卡的發行商決定了智能卡上所裝載的應用程序及其組織,框架同樣要隱藏這些管理和組織的細節。
(5) 可擴展性:中間層必須能夠滿足未來的技術發展需要。
開放式智能卡應用模型是基于智能卡應用的面向對象框架,是給智能卡開發者提供的統一框架,它符合ISO7816相關標準的特點使得開放式智能卡應用模型可以適用于任何智能卡種類[4]。
開放式智能卡應用模型將應用系統的任務按照它們的共性和個性分成兩個部分,分別是智能卡終端組件(Card Terminal Package)和智能卡服務組件(Card Service Package).UML是一種能夠將應用程序中的信息用標準的圖形元素直觀顯示的建模語言,它是面向對象分析與設計的一種標準表示,本文通過UML對開放式智能卡應用模型建立相關模型。下面將用UML具體解釋它們的任務及其內部關系。
2.1 智能卡終端組件的建模
智能卡終端組件包含所有與智能卡終端相關的類,是由智能卡終端開發商提供的。主要任務是提供對智能卡物理終端的訪問,并可動態地添加和刪除智能卡終端。下面介紹這個組件中主要的類及它們之間的關系:
類CardTerminal:從各種智能卡終端抽象出來可被繼承的類,由其對應的CardTerminalFactory生產得到。
類CardTerminalRegistry:這個類只有唯一一個實例,管理應用系統中安裝的所有智能卡終端,可對CardTerminal進行實例注冊、注銷等操作。
類CardTerminalFactory:同特定的工廠生產一定的產品一樣,不同的智能卡終端制造商提供具體的CardTerminalFactory子類,由這些子類生產對應的CardTerminal實例。
類SlotChannel:向插入插槽的智能卡發送和接收APDU命令對的通道。
運用abstract factory和singleton模式[1]構建開放式智能卡應用模型的終端組件。框架中所有CardTerminal實例都要在CardTerminalRegistry 的唯一實例中注冊, 然后由CardTerminalRegistry決定用哪家制造商提供的CardTerminal 實例,用UML表示的智能卡終端組件靜態類圖如圖2所示。
在開放式智能卡應用模型中,智能卡插入讀卡器或移除的動作觸發外部應用系統獲得對象CardTerminal,此對象利用CardID(與插入的智能卡一一對應的)表示所插入的智能卡,并通過對象SlotChannel與智能卡傳遞APDU。相關的靜態類圖用UML表示如圖3所示。
2.2 智能卡服務組件的建模
智能卡所提供的服務是通過外部應用和智能卡之間的交互(交換APDU命令對)來完成的。在開放式智能卡應用模型中,這些命令集被集成在卡上的服務中,外部應用只需通過標準的APIs來訪問這些服務即可。這個框架還應具有可擴展性,能夠添加新的服務模塊。下面介紹這個組件中主要的類及其關系:
類CardService:這是一個抽象類,其意義是卡上的服務,它的子類通過包裝一系列APDUs來提供具體的服務內容。如子類FileSystemCardService是為了完成訪問智能卡的文件系統的任務。
類CardServiceFactory:同類CardTerminalFactory功能相似,應用服務商提供自己的CardServiceFactory代表其自身, 由CardServiceFactory產生它們各種服務即一些CardService實例。
類CardServiceRegistry:管理卡上的所有CardService對象,包括不同應用服務商提供的服務。
類CardServiceSheduler:為服務所需的通信安排通道,給CardService對象提供一個邏輯通道發送接收命令對來完成任務。
類SmartCard:外部系統通過它訪問開放式智能卡應用模型來完成智能卡服務。
類似CardTerminal部件,CardServiceRegistry對象管理卡上所有的服務。當應用程序對插入的智能卡要求一個特定的服務如電子錢包服務,CardServiceRegistry詢問所注冊的所有CardServiceFactory子類是否能為這張智能卡提供需要的服務,一旦某個CardServiceFactory子類如PurseServiceFactory說明它能提供電子錢包服務PurseService,于是子類PurseServiceFactory生產出服務實例PurseService。這個部件的靜態類圖如圖4所示。
CardServiceScheduler為具體的服務實例和智能卡一一對應的SmartCard實例安排邏輯通道CardChannel,進行APDU的交換。一旦完成任務它就釋放這個CardChannel實例,以便將其提供給別的服務。這些動作都是由智能卡插入讀卡終端或移除觸發的事件CardTerminalEvent引起的,其靜態類圖如圖5。
2.3 智能卡的應用服務
在開放式智能卡模型中還需要建立一些重要的應用服務,對于大多數智能卡來說這些服務是必需的。
類CardManagementCardService是為了在能夠在一張智能卡上裝載、運行、管理多個應用程序,它是類CardSevice的子類。
類FileSystemCardService提供了一系列接口來訪問操作
系統中的文件系統。
類SignatureCardService進行安全管理,用來完成持卡人的身份認證、文件訪問權限控制、安全報文傳輸、數據加密和解密等任務。
其它應用程序也可以利用以上這些類完成相應的服務。外部應用智能卡服務的系統都是通過在2.2節中提到的類SmartCard訪問整個應用模型。我們給出一個服務應用實例化過程,表現出對象之間是如何配合完成功能。假設外部應用需要一個A CardService對象,整個動態過程用UML的動態Collabartion框圖表示如圖6所示。
3 總結
開放式智能卡的應用框架的提出給應用程序開發者、智能卡和智能卡終端投資商等帶來了極大的方便。使得智能卡的應用實現了從“一對一”到“多對多”的轉換,并為開放式智能卡應用構造了一個統一標準結構。
(1) 對于遵循開放式智能卡應用框架應用程序,可以適用于任何一張開放式智能卡,應用程序不需重復開發,開發費用大大減少。
(2) 對于遵循開放式智能卡應用框架開發的智能卡,不僅可裝載不同組織提供的多個應用程序,且一旦運用環境變化,可方便地裝載和卸載來更換卡上的應用程序。
本文描述的開放式智能卡應用框架滿足了應用程序的開放性和獨立性,不需要像傳統式智能卡的應用程序都是為操作系統和芯片量身定做。