Java Card應(yīng)用程序體系結(jié)構(gòu)概述Java Card Technology概述
前言:Java Card 技術(shù)是把Java編程語(yǔ)言的一個(gè)子集同一個(gè)優(yōu)化的運(yùn)行時(shí)環(huán)境結(jié)合在一起的技術(shù)。這種優(yōu)化是專門針對(duì)小存儲(chǔ)量的嵌入式設(shè)備的,例如智能卡。 Java Card 技術(shù)的目標(biāo)是讓那些資源受限的智能卡等設(shè)備受益于Java語(yǔ)言開發(fā)的軟件。本文主要介紹Java Card應(yīng)用程序的體系結(jié)構(gòu)以及與Java Card Applet的通信方式。
Java Card技術(shù)是專門為那些內(nèi)存和計(jì)算能力比J2ME設(shè)備更為受限的智能卡和其它設(shè)備提供的一個(gè)平臺(tái)。圖1是Java Card和J2ME平臺(tái)的對(duì)照。它為應(yīng)用程序提供了一個(gè)安全的運(yùn)行環(huán)境。它允許多個(gè)應(yīng)用程序同時(shí)在一個(gè)卡片上運(yùn)行,并且可以對(duì)已發(fā)放到用戶手中的卡片進(jìn)行更新。用Java編寫的應(yīng)用程序可以安全的運(yùn)行在不同提供商的卡片上。
從上圖可以看出,CDC和CLDC配置以及它們相關(guān)的簡(jiǎn)表是J2ME平臺(tái)的一部分,而Java Card是一個(gè)單獨(dú)創(chuàng)建來(lái)用于智能卡環(huán)境的平臺(tái)。
在目前的版本中(2.2.1),Java Card技術(shù)的規(guī)范包括一些三部分:
1.Java Card Virtual Machine規(guī)范:該規(guī)范定義了Java語(yǔ)言的一個(gè)子集和適用于智能卡的虛擬機(jī)。
2.Java Card Runtime Environment規(guī)范:該規(guī)范更進(jìn)一步定義了基于Java的智能卡的運(yùn)行時(shí)行為。
3.Java Card API規(guī)范:該規(guī)范定義了為智能卡應(yīng)用程序量身定制的核心框架以及各種包和類。
一個(gè)典型的Java Card設(shè)備有一個(gè)8或16位的運(yùn)行在3.7MHz的中央處理器,帶有1K的RAM和多于16K的非易失性存儲(chǔ)器(可編程只讀存儲(chǔ)器或者閃存)。高性能的智能卡帶有單獨(dú)的處理器和加密芯片,以及用于加密的內(nèi)存,并且有一些還帶有32位的中央處理器。
Sun還提供了Java Card開發(fā)工具箱(JCDK) ,可在以下站點(diǎn)獲取:
http://java./products/javacard/。它包含了Java Card運(yùn)行時(shí)環(huán)境(JCRE)和Java Card虛擬機(jī)(JVVM)的引用實(shí)現(xiàn),以及其它幫助開發(fā)Java Card小應(yīng)用程序的工具。
一個(gè)Java Card應(yīng)用程序的結(jié)構(gòu)如圖2所示。
從圖中可以看出,Java Card應(yīng)用程序并不是孤立的,而是包含卡端、讀取端和后端程序等元素。
下面將分別描述各個(gè)組成元素。
后端應(yīng)用程序及系統(tǒng)
后端應(yīng)用程序提供了支持卡上Java Applet的服務(wù)。 例如,一個(gè)后端應(yīng)用程序利用卡片上的證書可以提供與安全系統(tǒng)的連接,從而提供強(qiáng)大的安全性。在一個(gè)電子付款系統(tǒng)中,后端應(yīng)用程序可以提供到信用卡及其他交易信息的訪問。
讀卡器端主應(yīng)用程序
主應(yīng)用程序駐留于例如個(gè)人計(jì)算機(jī)、電子付款終端、手機(jī)或者一個(gè)安全子系統(tǒng)中。它處理用戶、Java Card Applet和供應(yīng)商的后端應(yīng)用程序之間的通信。
傳統(tǒng)的讀取端應(yīng)用程序是使用C語(yǔ)言編寫的。近來(lái)J2ME技術(shù)的廣泛使用使得用Java語(yǔ)言來(lái)實(shí)現(xiàn)主應(yīng)用程序成為可能;例如,它可以在一臺(tái)支持MIDP和安全信賴服務(wù)應(yīng)用編程接口(Security and Trust Services API)的手機(jī)上運(yùn)行。
卡片接受設(shè)備(CAD)
卡片接受設(shè)備(CAD)是處于主應(yīng)用程序和Java Card設(shè)備之間的接口設(shè)備。一個(gè)CAD為卡片提供電源,而且可以與之進(jìn)行電子或者射頻通信。一個(gè)CAD可能是一個(gè)使用串行端口連接于臺(tái)式計(jì)算機(jī)的讀卡器,或者可能被集成到例如飯店或商場(chǎng)內(nèi)的電子付款終端。CAD可以在主應(yīng)用程序和卡片之間傳遞命令APDU(Application Protocol Data Unit,簡(jiǎn)稱APDU)以及響應(yīng)APDU。一些CAD有用于輸入個(gè)人識(shí)別號(hào)碼(PIN)的鍵盤,有的可能還有顯示屏。
卡片端應(yīng)用程序
Java Card平臺(tái)是一個(gè)多應(yīng)用程序環(huán)境。在圖2中我們可以看到,卡片上可能存在一個(gè)或多個(gè)Java Card Applet,還有相應(yīng)的支持軟件——卡片的操作系統(tǒng)和Java Card運(yùn)行時(shí)環(huán)境(JCRE)。JCRE由Java Card虛擬機(jī)、Java Card Framework和API以及一些擴(kuò)展的API組成。
下面將描述主應(yīng)用程序和Java Card Applet之間的通信方式。
二者之間的通信有兩種方式。第一是使用基本的消息傳遞模型;第二是使用基于Java Card的遠(yuǎn)程方法調(diào)用(JCRMI)該方法是J2SE RMI分布式對(duì)象模型的一個(gè)子集。下面分別并主要闡述這兩種方式。
消息傳遞模型是所以Java Card通信的基礎(chǔ)。它的核心就是應(yīng)用程序協(xié)議數(shù)據(jù)單元(APDU),就如圖2所示,它是CAD和Java Card框架之間交換的一個(gè)邏輯數(shù)據(jù)包。Java Card框架接收任何來(lái)自CAD中轉(zhuǎn)的命令APDU并將其前傳給相應(yīng)的Applet。當(dāng)Applet處理完命令APDU后將返回一個(gè)響應(yīng)APDU。APDU的格式遵從ISO/IEC 7816-3和7816-4。圖3是使用消息傳遞的模型。
讀卡器和卡之間的通信通?;谙旅鎯煞N連接協(xié)議的一種,面向字節(jié)的T = 0方式,或者面向數(shù)據(jù)塊的T = 1方式。還可能會(huì)用到被稱為T = USB和T = RF的替換協(xié)議。
下面簡(jiǎn)要敘述命令APDU和響應(yīng)APDU。
命令APDU的格式通常如圖4所示:
一個(gè)命令APDU包含一個(gè)必需的頭的和一個(gè)可選的體。其中:
² CLA(1字節(jié)):這個(gè)必需的字段識(shí)別指令的一個(gè)特定應(yīng)用程序類。有效的CLA值在ISO 7816 - 4規(guī)范中定義。
² INS(1字節(jié)):這個(gè)必需的字段指明CLA字段中標(biāo)示的指令類中的一個(gè)特定的指令。ISO 7816 - 4標(biāo)準(zhǔn)指定用于訪問卡上的數(shù)據(jù)的基本指令。附加功能已經(jīng)在這個(gè)標(biāo)準(zhǔn)中的其它地方說明,其中一些是安全功能。只有當(dāng)使用一個(gè)相應(yīng)的CLA字節(jié)值時(shí),才可以根據(jù)標(biāo)準(zhǔn)定義自己的特定應(yīng)用程序的INS值。
² P1(1字節(jié)):這個(gè)必需的字段定義指令參數(shù)1??梢允褂眠@個(gè)字段來(lái)檢驗(yàn)INS字段,或者用于輸入數(shù)據(jù)。
² P2(1字節(jié)):這個(gè)必需的字段定義指令參數(shù)。可以使用這個(gè)字段來(lái)檢驗(yàn)INS字段,或者用于輸入數(shù)據(jù)。
² Lc(1字節(jié)):這個(gè)可選的字段指定數(shù)據(jù)字段的字節(jié)數(shù)。
² Data Field(可變的,由Lc指定字節(jié)數(shù)):包含了命令數(shù)據(jù)。
² Le(1字節(jié)):這個(gè)可選的字段指定在期望響應(yīng)的數(shù)據(jù)字段中的最大字節(jié)數(shù)。
響應(yīng)APDU格式通常如圖5所示:
² 和一個(gè)APDU命令相似,響應(yīng)APDU有可選擇的和必要的字段: ² SW1(1字節(jié)):這個(gè)必要的字段是狀態(tài)字1。 ² SW2(1字節(jié)):這個(gè)必要的字段是狀態(tài)字2。 這些狀態(tài)字的值在ISO 7816 - 4規(guī)范中定義。 由于接觸的時(shí)間不長(zhǎng),研究的也不夠深刻,所以以上文字顯得有些粗枝大葉。大家可以在以下站點(diǎn)獲得相關(guān)的參考:http://java./products/javacard/ |
|
|
來(lái)自: bluecrystal > 《java card》