| 
| 
| J2EE概述 |  
| 时间:2014-05-04 10:14:28  来源:不详  作者:佚名 |  
| | Java的技术,因为 com Enterprise Java、 Embedd
 上的要求有限,并且受限於
 所妥协。Java Card也是基
 在如同smart card晶片般大
 平台。
 
 | puting resource的不同,而区 ed Java与 Java Card等。若是
 硬体资源大小(如呼叫器),所
 於硬体与应用的 求所开发的技
 小的有限资源下执行。所以,目
 
 
 | 分为不同性质的Java平台,如 以Embedded Java来说,因为功能
 以在硬体与Java执行环境上必须有
 术,目的是使得 Java的技术能够
 前Java Card可以说是最小的Java
 
 
 | 
 | Java Card是Java 平台 有严格硬体限制的环境。Ja
 为了将Java平台的特性以及
 
 | 中最小的 subset,其设定的执 va Card的问世,一方面是为了
 Java Card 的好处带到smart ca
 
 | 行环境为smart card上的晶片或是 推展Java的应用层次,一方面也是
 rd上,这些好处主要有:
 
 | 
 | Platform-Indep enden 在不同卡片的JCAE( Java
 来达到跨平台的能力。
 
 | t:使得 Java Card applets ( Card Application Environment
 
 
 | 在Java Card上执行的程式)能够 )上执行,即透过Java VM 的机制
 
 
 | 
 | Multi-Applicat ion Capable:在同 applets ,并且也能够透过 download的
 ,使得卡的使用能够更有弹性。
 
 | 一个Java Card 中能够存放多个 Java Card 方式来下载必要的applets 而达到一卡多用途的好处
 
 
 | 
 | Compatible with Existing Smart C ( Smart Card标准)以及工业界标准如
 
 | ard Standards: Java Card能与国№ 标准ISO 7816 Europay/Master Card/Visa (EMV)相容。
 
 | 
 | 所以,在未来Java Car 用,如身份识别、医疗资讯
 於一张卡上,使得这些随身
 
 | d不但能够取代今日Smart Card 记录、电子钱包、门禁管控等,
 的软体能够更小更实用。
 
 | 的功能,更能够发展出多样化的应 甚至能将许多不同的应用程式集合
 
 
 | 
 | JavaCard现行的版本有2.0与2.1版, 年刚释出。
 
 | 其中2.0版是在1997 年底所释出,而2.1 版则是在今 
 
 | 
 | 如图1所示Java Card实№运作的模式,主要分为二个部分。 | 
 
 | 第一个部分就是 Java 中的Card Reader来传输、
 则可以执行applet程式,使
 部分则是图1右方的 Termin
 。
 
 | Card这一端,配合CAD(Card Ac 读取Card中的资料,并且供给 C
 得一些敏感的资料与行为能够安
 al端,负责提供服务程式及操作
 
 
 | ceptance Device ),也就是图1 ard所 的电源。而JavaCard本身
 全执行而不受外部程式影响。第二
 介面,并透过CAD 与JavaCard沟通
 
 
 | 
 | 另外,在图1中所表示 是 terminal与Java Card沟
 Command APDU,主要适用来
 
 
 | 的 APDU(Application Protocol 通的格式与协定。由terminal
 下达指令以及传输资料给Java C
 
 
 | Data Units)即双箭头的部分,则 端传送给Java Card 的APDU称为
 ard。图2即Command APDU的格式。
 
 
 | 
 
 | CLA - Class Byte,用於识别applet | 
 | INS - Instruction Byte ,下达给applet之指令 | 
 | 例如,terminal要 CLA=0x80)时, Command A
 
 | 下达两个byte相加的加法指令( PDU的写法可能为:
 
 | INS= 0x01)给applet( 
 
 | 
 
 | 而当Java Card applet接收到此一指 terminal端所下达的指令来执行,并将D
 
 | 令时则会先判断 CLA byte是否为 0x80,接著再根据 ata Field依指令性质取出两个独立的byte来相加。
 
 | 
 | 而由Java Card端回传给terminal端 式。
 
 | 的 APDU则称为 Response APDU,图3则为此APDU之格 
 
 | 
 
 | 所以,利用上述的加法 value(16-bit integer),
 
 | 为例,Java Card applet执行後 则 Response APDU的表示法可能
 
 | 所return的值若为 short 为:
 
 | 
 
 | 其中Data Field为一sh 0x9000 )即"success"或是
 
 | ort integer(以两个bytes表示 "no error"的意思。
 
 | ),而SW1与SW2所表示的意义( 
 
 | 
 | 根据图1的运作模式,若以电子钱包 applet ,负责提款、付帐与维护帐目,
 Terminal)的Card Reader中,透过提款
 知Java Card 上的applet将这笔款项存入
 就成为一个行动的卡片钱包。若我们 要
 同的逻辑来扣除款项。所以,在诸如此类
 来达到消费的目的。不同於一般信用卡的
 手续与携带零钱的麻烦。
 
 | 为例,我们一开始会在Java Card上 install一个 当我们 要提款时,必须Java Card放入提款机(
 机的服务程式与介面来提出我们 要的款项,并且通
 Java Card 的帐目中。如此我们所持有的Java Card
 消费的话(如搭公车、网路购物等),就可以透过相
 的消费行为里,我们就可以透过这种简单的读卡动作
 是,我们不但能做小额的消费,也省去了付帐的繁杂
 
 
 | 
 | Java Card有如一部具 environment的 求,其最
 
 | 体而微的电脑,其硬体的规格主 小的规格要求为:
 
 | 要是在於维护Java Card runtime 
 
 | 
 | 512 bytes RAM:主要 
 | 用於存放程式执行时的 stack、 
 | 暂存资料以及做为I/O的缓冲区。 
 | 
 | 24 KB ROM :主要用於存放系统的程 native functions 等。
 
 | 式以及 Runtime Environment,如 JVM、applets、 
 
 | 
 | 8 KB EEPROM:用於储 放之处。
 
 | 存我们所下载至 Java Card的 a 
 
 | pplets,并且做为 object heap存 
 
 | 
 | 8-bit processor: Java Card必须 
 | 至少支援8位元的处理器。 
 | 
 | 在上述的硬体架构中, 的软体架构则具有OS、 nat
 构在此JCRE上的应用程式(
 软体架构相仿,图5即为Jav
 
 | 基本上我们可以将Java Card想 ive functions 、JCRE(Java Ca
 Java Card applets),事实上J
 a Card之软体架构。
 
 | 像为一部PC的缩影,而Java Card rd Runtime Environment)以及架
 ava Card的软体架构也是与今日的
 
 
 | 
 
 | 在此软体架构中,最底 的作业系统。而在上面两层
 们所谓的JCRE,主要负责执
 Industry Add-on Classes
 提供属於自己的服务程式。
 
 | 层的OS and Native Functions Java Card Interpreter与Java
 行Java Card applets以及提供
 则是 service provider 所提供
 
 
 | 是负责低阶的处理工作,如同今日 Card APIs and Framework就是我
 applet执行所 要的环境。而
 的classes,使得企业与公司能够
 
 
 | 
 | Java Card的最上层就是所谓的Java 以执行多个Java Card applets,但是要
 Multi-thread,所以一次只能执行一个ap
 隔。尽管如此,在Java Card的设计之中
 让applet implement javacard.framewor
 resource。
 
 | Card applets,就如图5-1所示,一个 Java Card可 特别注意,Java Card 的执行环境并无支援
 plet,并且 applet与applet之间也有firewall的阻
 亦有让不同的 applets相互沟通的机制,我们只 要
 k.Shareable interface就能够分享applet 的
 
 
 | 
 | 因为受限於体积与 res Java Card执行环境的支援
 
 | ource,所以 Java Card在执行 现况,其他详细内容请参考 ref
 
 | 环境上的支援是相当有限的,表即 erences。
 
 | 
 
 | Java Ring又名 Java-Powered iButt Java Ring只是Java Card的另外一种型态
 戒指之上,成为一个Java Ring。
 
 | on,是Dallas Semiconductor公司的产品,事实上 ,Dallas公司将它制作成为钮扣的形状,进而镶嵌在
 
 
 | 
 | 因为Java Ring是沿袭Java Card的规 Java Card的原有的硬体架构下加强了其
 面。
 
 | 格,所以在软体的架构上是相同的。而 Java Ring在 原有的结构,并且发展出与Java Card不同的应用层
 
 
 | 
 | Java Card的2.1版总共 
 | 分为四个 packages,而其内容 
 | 与重要的物件分述如下: 
 | 
 | javacard.lang packag 有的Java物件皆继承其下。
 
 | e:提供 Java language重要的c 
 
 | lasses,如 Object物件,因为所 
 
 | 
 | Object class - root of class hierarchy | 
 | Throwable class - 为所有 error及 exception
 
 | exception 的superclass,这亦表示Java Card支援 
 
 | 
 | javacard.frame work package :是 Java Card applet基本的物件与工具。
 
 | Java Card API 主要的core package,提供了实做 
 
 | 
 | IOS7816 abstract int 
 | erface - 提供了ISO7816所使用 
 | 的常数值 
 | 
 | PIN abstract interfa 证 PIN是否为validate 等
 
 | ce - 使其 subclass能透过此一 功能
 
 | 介面能够做check PIN number及验 
 
 | 
 | Shareable abstract i 互相沟通的功能
 
 | nterface - 使得不同的applets 
 
 | 能够透过implement此介面来达到 
 
 | 
 | AID class - AID(Appl ,使得JCRE能够透过一个AI
 
 | ication Identifier)是用来唯 D table来识别或选择我们所要
 
 | 一表示Java Card applet的number 执行的applet
 
 | 
 | APDU class - 是属於 传送 terminal端的指令与
 
 | JCRE的物件,是藉由maintain一 回传applet执行的结果与状态的
 
 | 个 byte array buffer 来接收与 标准格式
 
 | 
 | Applet class - 每一个 Java Card implement时要特别注意几个methods,如
 AID下达 select或deselect 此applet的
 register 则是applet下载至 Java Card
 册完成,并且被 terminal所select 时,
 process method来处理并负责回传结果
 
 | applet 都必须继承在此 class之下。其中在 select、 deselect是当 terminal端跟据 applet的
 指令时,由JCRE来启动的 methods。而 install与
 安装并向 JCRE注册之methods 。等到applet安装注
 所有下达的 APDU command接会交由applet的
 
 
 | 
 | JCSystem class - 负 的管理
 
 | 责管理 applet与Java Card 的 
 
 | 系统资源,如AID 与Transaction 
 
 | 
 | OwnerPIN class - 继 提供相关check与 update等
 
 | 承自PIN interface,负责 main methods
 
 | tain卡片持有人的PIN number,并 
 
 | 
 | Util class - 是一个提供常用工具 
 | 的class ,如byte array copy与compare等 
 | 
 | javacard.secur ity p interface与class 如下:
 
 | ackage:提供安全机制与物件的 
 
 | package,其中几个重要的 
 
 | 
 | Key abstract interface - 是 DESK 介面
 
 | ey、 PrivateKey、 PublicKey等 interface的共同 
 
 | 
 | KeyBuilde r class - 
 | 是一个 create各种安全的 key 
 | 的factory 
 | 
 | MessageDi gest class 
 | - 是一个可以将message做数位 
 | 签章之object 
 | 
 | javacardx.cryp to package:其中 制,而此package 仅包含了一个 interfa
 
 | 包含了关於加密与安全的物件,并且有美国的出口限 ce与一个 abstract class:
 
 | 
 | Cipher abstract clas 
 | s - 使得在Java Card中的资讯 
 | 得以加密保护 
 | 
 | package samples.HelloWorld; | 
 | import javacard.framework.*; //i 
 | moprt必要的package 
 | 
 | public class HelloWorld extends Applet | 
 | //此echoBytes array为"HelloWorld"的16进位表示法 | 
 | private static final byte ec 
 | hoBytes[] = { 
 | 
 | 0x48, 0x65, 0x6 
 | c, 0x6c, 0x6f, 0x57, 0x6f, 0 
 | x72, 0x6c, 0x64}; 
 | 
 | protected HelloWorld(APDU apdu) | 
 | { //在applet initiate时向JCRE注册 | 
 | /*当applet下载至Java Card时,则 
 | 会启动install method来安装applet,并传入 
 | 
 | public static void install( 
 | byte[] bArray, short bOffset, byte bLength ) 
 | 
 | HelloWorld applets new HelloWo 
 | rld(null); 
 | 
 | public void process(APDU apd 
 | u) throws ISOException 
 | 
 | byte buffer[] = apdu.getBuffer(); | 
 | //将echoBytes,及"HelloWorld"by 
 | te自串copy至APDU的buffer 
 | 
 | Util.arrayCopyNon 
 | Atomic(echoBytes, (short)0, 
 | buffer, 
 | 
 | (short)0, (shor 
 | t)echoBytes.length); 
 | 
 | //将APDU buffer的资料设为"写出",并直接传送出去 | 
 | apdu.setOutgoingAndSend((short) 
 | 0, (short)echoBytes.length); 
 | 
 | 以上是一个 HelloWorld的例子用来 此 HelloWorld范例程式的执行,是预设
 处理此APDU,而是直接将"HelloWorld"的
 
 | 介绍基本的Java Card applet的implement 方式。而 由terminal端传来 Command APDU後,此applet并不
 讯息以APDU的方式直接回传给 terminal端。
 
 | 
 
 
 |  |  |  |