免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Java Card

Java Card

---(文/吳宗錫)
一、前言

Java的技術(shù),因為 computing resource的不同,而區(qū)分為不同性質(zhì)的Java平臺,如 Enterprise Java、 Embedded Java與 Java Card等。若是以Embedded Java來說,因為功能上的要求有限,并且受限於硬體資源大?。ㄈ绾艚衅鳎?,所以在硬體與Java執(zhí)行環(huán)境上必須有所妥協(xié)。Java Card也是基於硬體與應(yīng)用的 求所開發(fā)的技術(shù),目的是使得 Java的技術(shù)能夠在如同smart card晶片般大小的有限資源下執(zhí)行。所以,目前Java Card可以說是最小的Java平臺。

二、簡介

Java Card是Java 平臺中最小的 subset,其設(shè)定的執(zhí)行環(huán)境為smart card上的晶片或是有嚴格硬體限制的環(huán)境。Java Card的問世,一方面是為了推展Java的應(yīng)用層次,一方面也是為了將Java平臺的特性以及Java Card 的好處帶到smart card上,這些好處主要有:

  • Platform-Indep endent:使得 Java Card applets (在Java Card上執(zhí)行的程式)能夠在不同卡片的JCAE( Java Card Application Environment)上執(zhí)行,即透過Java VM 的機制來達到跨平臺的能力。
  • Multi-Applicat ion Capable:在同一個Java Card 中能夠存放多個 Java Card applets ,并且也能夠透過 download的方式來下載必要的applets 而達到一卡多用途的好處,使得卡的使用能夠更有彈性。
  • Compatible with Existing Smart Card Standards: Java Card能與國№ 標準ISO 7816( Smart Card標準)以及工業(yè)界標準如 Europay/Master Card/Visa (EMV)相容。

所以,在未來Java Card不但能夠取代今日Smart Card的功能,更能夠發(fā)展出多樣化的應(yīng)用,如身份識別、醫(yī)療資訊記錄、電子錢包、門禁管控等,甚至能將許多不同的應(yīng)用程式集合於一張卡上,使得這些隨身的軟體能夠更小更實用。

JavaCard現(xiàn)行的版本有2.0與2.1版,其中2.0版是在1997 年底所釋出,而2.1 版則是在今年剛釋出。

三、運作邏輯

如圖3-1所示Java Card實№運作的模式,主要分為二個部分。

圖3-1、 JavaCard運作模式圖

第一個部分就是 Java Card這一端,配合CAD(Card Acceptance Device ),也就是圖3-1中的Card Reader來傳輸、讀取Card中的資料,并且供給 Card所 的電源。而JavaCard本身則可以執(zhí)行applet程式,使得一些敏感的資料與行為能夠安全執(zhí)行而不受外部程式影響。第二部分則是圖3-1右方的 Terminal端,負責提供服務(wù)程式及操作介面,并透過CAD 與JavaCard溝通。

另外,在圖3-1中所表示的 APDU(Application Protocol Data Units)即雙箭頭的部分,則是 terminal與Java Card溝通的格式與協(xié)定。由terminal 端傳送給Java Card 的APDU稱為Command APDU,主要適用來下達指令以及傳輸資料給Java Card。圖二即Command APDU的格式。

圖二、 Command APDU格式

其欄位所表示的意義分別為:

  • CLA - Class Byte,用於識別applet
  • INS - Instruction Byte ,下達給applet之指令
  • P1 - 第一個指令參數(shù)
  • P2 - 第二個指令參數(shù)
  • Lc - Data Field之長度
  • Data Field - 資料欄位
  • Le - 回傳資料之長度

例如,terminal要下達兩個byte相加的加法指令(INS= 0x01)給applet( CLA=0x80)時, Command APDU的寫法可能為:

而當Java Card applet接收到此一指令時則會先判斷 CLA byte是否為 0x80,接著再根據(jù) terminal端所下達的指令來執(zhí)行,并將Data Field依指令性質(zhì)取出兩個獨立的byte來相加。

而由Java Card端回傳給terminal端的 APDU則稱為 Response APDU,圖 3-3則為此APDU之格式。

其欄位所表示的意義分別為:

  • Data Field - return之資料欄位
  • SW1 - 執(zhí)行狀態(tài)參數(shù)1
  • SW2 - 執(zhí)行狀態(tài)參數(shù)2

所以,利用上述的加法為例,Java Card applet執(zhí)行後所return的值若為 short value(16-bit integer),則 Response APDU的表示法可能為:

其中Data Field為一short integer(以兩個bytes表示),而SW1與SW2所表示的意義(0x9000 )即"success"或是 "no error"的意思。

根據(jù)圖3-1的運作模式,若以電子錢包為例,我們一開始會在Java Card上 install一個applet ,負責提款、付帳與維護帳目,當我們 要提款時,必須Java Card放入提款機(Terminal)的Card Reader中,透過提款機的服務(wù)程式與介面來提出我們 要的款項,并且通知Java Card 上的applet將這筆款項存入Java Card 的帳目中。如此我們所持有的Java Card就成為一個行動的卡片錢包。若我們 要消費的話(如搭公車、網(wǎng)路購物等),就可以透過相同的邏輯來扣除款項。所以,在諸如此類的消費行為里,我們就可以透過這種簡單的讀卡動作來達到消費的目的。不同於一般信用卡的是,我們不但能做小額的消費,也省去了付帳的繁雜手續(xù)與攜帶零錢的麻煩。

四、Java Card硬體需求

Java Card有如一部具體而微的電腦,其硬體的規(guī)格主要是在於維護Java Card runtime environment的 求,其最小的規(guī)格要求為:

  • 512 bytes RAM:主要用於存放程式執(zhí)行時的 stack、暫存資料以及做為I/O的緩沖區(qū)。
  • 24 KB ROM :主要用於存放系統(tǒng)的程式以及 Runtime Environment,如 JVM、applets、 native functions 等。
  • 8 KB EEPROM:用於儲存我們所下載至 Java Card的 applets,并且做為 object heap存放之處。
  • 8-bit processor: Java Card必須至少支援8位元的處理器。
五、Java Card軟體架構(gòu)

在上述的硬體架構(gòu)中,基本上我們可以將Java Card想像為一部PC的縮影,而Java Card的軟體架構(gòu)則具有OS、 native functions 、JCRE(Java Card Runtime Environment)以及架構(gòu)在此JCRE上的應(yīng)用程式(Java Card applets),事實上Java Card的軟體架構(gòu)也是與今日的軟體架構(gòu)相仿,圖5-1即為Java Card之軟體架構(gòu)。

圖5-1 Java Card之軟體架構(gòu)圖

在此軟體架構(gòu)中,最底層的OS and Native Functions 是負責低階的處理工作,如同今日的作業(yè)系統(tǒng)。而在上面兩層Java Card Interpreter與Java Card APIs and Framework就是我們所謂的JCRE,主要負責執(zhí)行Java Card applets以及提供 applet執(zhí)行所 要的環(huán)境。而 Industry Add-on Classes則是 service provider 所提供的classes,使得企業(yè)與公司能夠提供屬於自己的服務(wù)程式。

Java Card的最上層就是所謂的Java Card applets,就如圖5-1所示,一個 Java Card可以執(zhí)行多個Java Card applets,但是要特別注意,Java Card 的執(zhí)行環(huán)境并無支援Multi-thread,所以一次只能執(zhí)行一個applet,并且 applet與applet之間也有firewall的阻隔。盡管如此,在Java Card的設(shè)計之中亦有讓不同的 applets相互溝通的機制,我們只 要讓applet implement javacard.framewor k.Shareable interface就能夠分享applet 的 resource。

因為受限於體積與 resource,所以 Java Card在執(zhí)行環(huán)境上的支援是相當有限的,表5-1即 Java Card執(zhí)行環(huán)境的支援現(xiàn)況,其他詳細內(nèi)容請參考 references。

表5-1 Java Card執(zhí)行環(huán)境之支援
支援 不支援
boolean、byte、 short、int float、double、 long、char、 Strings
Dynamic Object Creation Dynamic Class Loading
Arrays Security Manager
Virtual mehtods Garbage Collectioin & Finalization
Dynamic allocation Threads
Packages Cloning
Exceptions Multi-dimentional arrays
Interfaces  
六、Java Ring

Java Ring又名 Java-Powered iButton,是Dallas Semiconductor公司的產(chǎn)品,事實上 Java Ring只是Java Card的另外一種型態(tài),Dallas公司將它制作成為鈕扣的形狀,進而鑲嵌在戒指之上,成為一個Java Ring。

因為Java Ring是沿襲Java Card的規(guī)格,所以在軟體的架構(gòu)上是相同的。而 Java Ring在Java Card的原有的硬體架構(gòu)下加強了其原有的結(jié)構(gòu),并且發(fā)展出與Java Card不同的應(yīng)用層面。詳細的資料請參考[3] 。

七、Java Card API

Java Card的2.1版總共分為四個 packages,而其內(nèi)容與重要的物件分述如下:

  • javacard.lang package:提供 Java language重要的classes,如 Object物件,因為所有的Java物件皆繼承其下。
    • Object class - root of class hierarchy
    • Throwable class - 為所有 error及exception 的superclass,這亦表示Java Card支援exception
  • javacard.frame work package :是Java Card API 主要的core package,提供了實做Java Card applet基本的物件與工具。
    • IOS7816 abstract interface - 提供了ISO7816所使用的常數(shù)值
    • PIN abstract interface - 使其 subclass能透過此一介面能夠做check PIN number及驗證 PIN是否為validate 等功能
    • Shareable abstract interface - 使得不同的applets能夠透過implement此介面來達到互相溝通的功能
    • AID class - AID(Application Identifier)是用來唯一表示Java Card applet的number,使得JCRE能夠透過一個AID table來識別或選擇我們所要執(zhí)行的applet
    • APDU class - 是屬於 JCRE的物件,是藉由maintain一個 byte array buffer 來接收與傳送 terminal端的指令與回傳applet執(zhí)行的結(jié)果與狀態(tài)的標準格式
    • Applet class - 每一個 Java Card applet 都必須繼承在此 class之下。其中在 implement時要特別注意幾個methods,如select、 deselect是當 terminal端跟據(jù) applet的AID下達 select或deselect 此applet的指令時,由JCRE來啟動的 methods。而 install與register 則是applet下載至 Java Card安裝并向 JCRE注冊之methods 。等到applet安裝注冊完成,并且被 terminal所select 時,所有下達的 APDU command接會交由applet的 process method來處理并負責回傳結(jié)果
    • JCSystem class - 負責管理 applet與Java Card 的系統(tǒng)資源,如AID 與Transaction的管理
    • OwnerPIN class - 繼承自PIN interface,負責 maintain卡片持有人的PIN number,并提供相關(guān)check與 update等methods
    • Util class - 是一個提供常用工具的class ,如byte array copy與compare等
  • javacard.secur ity package:提供安全機制與物件的package,其中幾個重要的 interface與class 如下:
    • Key abstract interface - 是 DESKey、 PrivateKey、 PublicKey等 interface的共同介面
    • KeyBuilde r class - 是一個 create各種安全的 key的factory
    • MessageDi gest class - 是一個可以將message做數(shù)位簽章之object
  • javacardx.cryp to package:其中包含了關(guān)於加密與安全的物件,并且有美國的出口限制,而此package 僅包含了一個 interface與一個 abstract class:
    • Cipher abstract class - 使得在Java Card中的資訊得以加密保護
八、范例

程式8-1 HelloWorld applet

//一applet必須要屬於一packagepackage samples.HelloWorld;		import javacard.framework.*;	//imoprt必要的packagepublic class HelloWorld extends Applet{   //此echoBytes array為"HelloWorld"的16進位表示法    private static final byte echoBytes[] = {    	0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64};//applet constructor    protected HelloWorld(APDU apdu)    {	//在applet initiate時向JCRE注冊        register();    }/*當applet下載至Java Card時,則會啟動install method來安裝applet,并傳入applet install所要的參數(shù)*/    public static void install( byte[] bArray, short bOffset, byte bLength )    {	//initiate 	HelloWorld applets  new HelloWorld(null);    }    public void process(APDU apdu) throws ISOException    { //處理terminal端的APDU指令      byte buffer[] = apdu.getBuffer();	//取得APDU之buffer	//將echoBytes,及"HelloWorld"byte自串copy至APDU的buffer  	Util.arrayCopyNonAtomic(echoBytes, (short)0, buffer,      (short)0, (short)echoBytes.length);//將APDU buffer的資料設(shè)為"寫出",并直接傳送出去	apdu.setOutgoingAndSend((short)0, (short)echoBytes.length);    }}

 

 

以上是一個 HelloWorld的例子(程式8-1)用來介紹基本的Java Card applet的implement 方式。而此 HelloWorld范例程式的執(zhí)行,是預設(shè)由terminal端傳來 Command APDU後,此applet并不處理此APDU,而是直接將"HelloWorld"的訊息以APDU的方式直接回傳給 terminal端。

九、參考資料
[1] "Java Card 2.0 Reference Implementation," htt p://www.javasoft. com.
[2] "Java Card 2.1 Reference Implementation," htt p://www.javasoft. com
[3] http://ibutton.com.tw/
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1527106

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
(JavaCard)JavaCard222VM Spec(JavaCard 2.2.2 虛...
JAVASCRIPT調(diào)用JAVA
專業(yè)知識---asp中如何使用applet
Java的字節(jié)碼和ABAP load的比較
《Java 程序設(shè)計》模擬試題
java簡單helloworld
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服