您的位置:首页 > 编程语言 > Java开发

Java卡环境介绍

2015-06-21 16:35 316 查看
Java
Card

目录(?)[+]


和其他Java平台的区别

Java卡环境和其他的Java环境(例如J2ME)相比,区别在于硬件限制以及和通常的交互式应用完全不同的生命周期(无论是在开发还是在执行方面)。此外,Java卡还需要和ISO-7816标准兼容。

Java卡主要支持下列主要特性:

只支持3个小的原始数据类型(boolean、byte、short)
整型(int)为可选支持的数据类型
一维数组
Java包、类、接口、异常
面向对象特性

相应的,其主要不支持的Java特性有:

所有大的原始数据类型(long、double、float)
char类型和strings(string类)
多维数组
动态类装载(整个System类都不可用)
安全管理
垃圾回收
序列化
对象复制
多线程

另一个差别是对标准库的支持。由于卡环境的特殊性,标准库需要完全重写。一个标准JCRE所支持的系统库为:

java.lang package:这个包是对应Java 2平台上的包的子集,只支持很少的几个类,并且都极力精简过。Objcet类只支持默认构造器和等价的方法。该包中的其他类包括Throwable和Exception,还有九个子类,包括NullPointerException。
javacard.framework package:这个包提供了Java Card applets的核心功能(例如,JCSystem类是其他Java平台上System类的替代)。该包中最常用到的类是Applet类,每个应用都必须继承自这个类。还有APDU、PIN类等。
javacard.security 和 javacardx.crypto package:这两个包用来对卡应用进行加密服务,但并不提供具体实现(这是由JCRE厂商提供的)。

还有一个很重要的区别是包和应用的命名规定需要符合ISO-7816标准。这种命名约定需要应用和包都通过一个应用标识序列AID来识别。前5个字节代表公司id,由ISO外部权威分配,一个可变的字节数(0-11)由公司内部定义产品名。


Java Card Runtime Environment


Java Card Applet 生命周期

首先,应用是利用电脑上的软件开发出来的,开发人员可以利用一些IDE、调试器、模拟器等工具帮助开发。最后会得到最终的CAP文件,JCRE进入初始化阶段。虚拟机被初始化,所有的JCRE支持对象被创建。这个阶段在整个卡的生命周期里只出现一次。

另一个阶段是applet的安装。当applet被安装后,JCRE会按照安装的代码里预定义的去创建applet实例,还有用来存储数据的其他对象。这些对象被创建在EEPROM存储空间里。这是Java Card Applet其中一个很有趣的特性:能够动态加载。绝大多数之前的智能卡软件在卡初始化的时候就在ROM里了。这个applet安装阶段可以多次执行。


Java Card 生命周期

当我们将智能卡插入ATM或者其他设备的时候,卡被激活,里面的代码得以执行。这样的设备被成为卡接受设备(card acceptance devices, CADs)。从卡在这样的一个设备里被激活一直到事务终止并取出的一段时间被成为一个CAD会话。

在一个CAD会话的最后,当卡上去电后,JCRE只是处于暂停状态。由于EEPROM这类持久性存储的存在,使得整个计算状态得以保存。只有临时对象(为了安全或性能原因而在RAM中创建的)会被永久性的删除。在下一次上电的时候,会开始一个新的CAD会话,JCRE解释器会被重置到主循环的最开始。

CAD会话期间,卡内程序从休眠状态转为开始运行。通常,它主要的活动就是通过CAD硬件支持和主机应用进行通信。这个I/O过程即为应用协议数据单元(Application Protocal Data Unit, APDU)I/O。APDUs是applets和主机应用间低层次的数据包交换,可以同时包含数据和命令,由当前安装的applet处理,最终返回一个APDU相应到主机应用。

解释器提供的一个很重要的特性是操作和事务的原子性。简单的操作,例如修改一个类实例的域,JCRE会确保其原子性(操作后的状态将只能是修改为一个新值或者回复到前一个值)。开发人员可以通过一个API来封装一些操作到一个事务中去。为了防止在事务执行过程中失败,所有已经执行的操作将会回滚,恢复到事务开始前的状态。


Various Actors

Java卡虚拟机(JCVM)和通常的Java虚拟机(JVM)不同,它被分为两部分:卡内部分(解释器)和卡外部分(转换器)。

转换器(converter)可以将java的.class文件转换为卡内可执行文件CAP文件。同时,转换器还会生成输出文件EXP文件,包含对CAP文件的描述。EXP文件类似C头文件,并且只会被转换器内部用于链接和验证。

转换器将class文件转成一个紧凑的优化的格式用以在受限的环境下运行。同时还会检查其是否符合Java卡语言规范。若输入的class文件中用到了long型的变量则会抛出错误。

CAP文件类型是一个兼容的JAR格式(即符合标准ZIP格式),但是可以用通过紧凑的数据结构和有限的间接ZIP格式来使其占用最小的尺寸。CAP文件的概念类似于其他Java平台上的JAR文件,是一种标准的Java程序分发手段。

解释器在智能卡内,使得一个普通智能卡可以支持Java卡平台。它执行字节码,分配空间给创建的Java对象(不支持垃圾回收),并确保运行安全。

Applet的部署需要安装器(installer),它和卡外安装软件一同在一个CAD会话期间下载和安装CAP文件。

作者:fish

转载:http://www.dreamingfish123.info/?p=818
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: