当前位置:文档之家› JavaCard简介(中文版)

JavaCard简介(中文版)

1、简介Java Card 3 平台由两个版本组成Classic Edition和Connected Edition:Classic Edition是一个基于 2.2.2版本的前端兼容的演化平台,针对资源有限的设备仅支持applet-based应用。

如果你只对Classic Edition中提供的功能感兴趣的话就可以忽略Connected Edition。

Connected Edition提供了一个显著增强的运行时环境和一个新的虚拟机。

包含了一些新的面向网络的应用,例如提供了针对web应用的Servlet APIs,并且支持一些新的applet功能增强。

一个Connected Edition的应用可能会用到Classic Edition提供的特性,因此这两个版本的规范应用一起使用。

1.1动机Java Card技术使得用Java编程语言编写的程序可以运行在智能卡和其他小的资源紧张的设备上。

开发人员可以用标准的软件开发工具和环境来编译和调试程序,然后把程序转化成能被Java Card支持的格式。

Java Card上的应用程序被称为Applet,或者更明确的称为Java Card Applet 或者Card Applet(为了和浏览器Applets做区分)。

Java Card技术使得用Java语言编写的程序可以在智能卡上运行,然而如此小的设备远不足以支持Java平台的全部功能。

因此,Java Card平台仅仅支持一个被仔细挑选,定制的Java平台属性的的子集。

这个子集使得写的程序在小设备上有更好适应性,并且保持了Java语言的面向对象的特性。

一个简单的途径是定义一个代码可以在所有Java Card环境下移植的Java虚拟机的子集。

结合JVM的子集规定和信息,智能卡提供商可以在Java Card规范上构建自己的工具。

虽然手段是可行的,但有一个严重的缺点,目标平台将会丧失字节码的移植性。

Java平台的规范允许Java的代码在所有Java平台上移植,Java的“写一次,所有地方运行”的属性或许是平台的最重要的特性。

部分Java Card平台创建的工作就是为了把这种代码移植性带到智能卡行业。

在世界上有千百万的不同处理器和配置的智能卡,为支持软件派发所支持的多种代码格式的代价是不能承受的。

这个Java Card的虚拟机规范(版本3.0.1Classic Edition)是提供代码移植性的关键。

理解这个规范做了什么的一个方法是和Java平台的对应副本进行比较。

Java虚拟机规范定义了一个引导和按指令集执行Java类文件的引擎。

类文件是Java体系结构里面核心的部分,并且是代码移植性的支柱。

Java Card的虚拟机规范(版本3.0.1Classic Edition)仍然定义了一个实现了Java Card平台代码移植性的文件格式:CAP文件格式是软件被导入到实现了Java Card虚拟机规范的设备的格式。

1.2The Java Card Virtual MachineJava Card虚拟机的角色在Java Card平台的生产和开发流程下很好理解。

Java Card虚拟机和若干个组件组成一个Java Card系统,一个Converter(转换器),一个终端安装工具,和一个运行在设备上的安装程序。

如下图1-1和1-2。

开发一个Java Card应用和开发其它的Java程序一样:一个开发者写出一个或者多个类文件,应用使用模拟设备环境的模拟器模拟运行,测试和调试,包含应用的类文件被Java Card Coverter 转化成一个CAP文件。

Converter把构成一个Java包的所有类作为输入。

一个包含了一个或者多个非抽象的直接或者非直接的javacard.framework.Applet的子类的包被称作一个应用包(appet package)。

否则被称为一个库包(library package)。

Converter也可以把一个或者多个导出文件(export file)作为输入。

一个导出文件包含了被转化类需要的导入的其它类的名字和链接信息。

当一个应用或者库包被转化,转化器也可以产生这个包的导出文件。

经过转化,CAP文件被拷贝到一个卡片终端,例如一个带有读卡器设备的桌面计算机。

然后一个在终端上的安装工具载入CAP文件并且传输到Java Card设备里。

一个存在于Java Card设备上的安装程序接收CAP文件的内容并且准备好被Java Card虚拟机运行的应用。

虚拟机自己不需要导入或者操作CAP文件,它只需要执行在被安装程序导入的CAP文件中发现的应用的代码。

Java Card虚拟机和安装程序工程的区分使得两者都更小,安装程序可以被实现为一个Java程序并且在Java Card虚拟机的上层执行。

因为Java虚拟机的指令比典型的机器码更稠密,这样做可以降低安装器的大小。

组件性可以使得在一个Java Card虚拟机实现上可以使用不同的安装器。

1.3Java Language Security一个Java虚拟机的基本属性是通过类文件校验实现的强大的安全性。

许多实现了Java Card 平台的设备可能太小不足以支持在自己设备上的校验。

这个考虑使得设计上允许在设备上认证但是并不信赖它。

CAP文件中校验相关的数据被和应用执行的真正数据分开放置。

到允许安全管理更灵活的被实现。

在Java Card设备上有几个提供语言级别安全的选项。

概念上最简单的是在CAP文件下载时和下载后验证文件内容。

这个选项通常在比较大的设备上可行。

其它的选项信赖一些捆绑的属性:安全终端的物理安全,在下载时候的算法校验过程,在下载之前预校验CAP文件。

Java Card平台规范在CAP文件安装和安全规则这儿尽量的少说。

因为智能卡在不同的安全需求的不同系统里作为安全的处理器,有必要允许很多灵活性来适应智能卡发行人和用户。

1.4Java Card Runtime Environment SecurityJava Card平台的标准运行环境叫做JCRE,JCRE由Java Card虚拟机以及Java Card API 的类构成,既然Java Card虚拟机有保证Java语言层安全的责任,JCRE保证附加的运行态的安全。

这部分的附加属性在JCRE规范中。

JCRE最基本的运行态安全特性是用一个应用防火墙把应用隔离开。

应用防火墙阻止一个应用创建的对象被其它的应用访问,阻止了对未授权的实例的属性和方法的访问(访问数组的长度类似)。

应用的隔绝是一个重要的安全属性,但是它需要一个机制来允许应用间在需要内部操作的时候共享对象。

JCRE允许使用共享接口对象(shareable interface object)的概念来进行这样的共享。

这些对象提供了一个应用让它的对象可能被其他应用使用的唯一的方式。

更多的使用共享接口对象的信息参见API手册中javacard.framework.Shareable接口的描述。

一些防火墙相关的属性的描述为共享接口提供了一定的参考。

应用防火墙还避免了对JCRE自身拥有的对象的未授权使用。

JCRE可以使用不在JCAPI中体现的机制使得它的对象可以被应用使用。

JCRE隔离和共享的相关属性可以在JCRE规范中得到体现。

2、A Subset of the Java Virtual Machine2.1 Why a Subset is Needed典型的卡片设备只有1.2K的RAM,16K的非易失性存储(EEPROM or flash)以及32K-48K 的ROM。

2.2 Java Card Platform Language SubsetJava Card平台的Applets用Java语言编写并用Java编译器编译。

Java Card技术应用Java语言的一个子集。

2.2.1 Unsupported Items2.2.1.1 Unsupported FeaturesDynamic Class Loading ,Security Manager ,Finalization ,Threads ,Cloning ,Access Control in Java Packages ,Typesafe Enums ,Enhanced for Loop ,Varargs ,Runtime Visible Metadata (Annotations) ,Assertions.2.2.1.2 Unsupported KeywordsNative, synchronized, transient , volatile ,strictfp , enum ,assert.2.2.1.3 Unsupported Typeschar, double, float, long,arrays of more than one dimension.2.2.1.4 C lasses总之,没有任何的Java语言核心API类在Java Card平台获得完全支持。

ng.package 包中的有些类得到支持而剩下的则不支持,例如不支持String, Thread类,以及像Boolean ,Integer这样的包装类。

SystemClass ng.System不被支持,Java Card平台提供javacard.framework.JCSystem 作为系统功能接口。

2.2.2 Supported Items如果一个语言特性没有被Java Card规范明确声明为不支持,那么它就属于支持子集的一部分,值得注意的支持特性在本节描述。

2.2.2.1 FeaturesPackages,Dynamic Object Creation,Virtual Methods, Interfaces, Exceptions, Generics, Static Import, Runtime Invisible Metadata (Annotations)2.2.2.2 Keywords2.2.2.3 TypesJava的类型boolean, byte, short, int是被支持的,Objects(类的实例和一维数组)也是支持的,数组可以包含被平台支持的原始数据类型,对象和其它数组。

有些java Card实现可能不支持int类型。

2.2.2.4 Classes大部分ng package中的类在java Card平台中不被支持。

下面的ng中的类被有限的支持。

Object同Java语言一样,java Card平台API类继承于ng.Object,类Object中的大部分方法都无法使用,但是Object本身被作为继承系统的根得以保留。

Throwable类Throwable和它的子类得以支持。

相关主题