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