Java Card应用程序体系结构概述

来源:百度文库 编辑:神马文学网 时间:2024/04/26 23:18:13
Java Card Technology概述
高鸿gaohong@neusoft.com
前言:Java Card 技术是把Java编程语言的一个子集同一个优化的运行时环境结合在一起的技术。这种优化是专门针对小存储量的嵌入式设备的,例如智能卡。 Java Card 技术的目标是让那些资源受限的智能卡等设备受益于Java语言开发的软件。本文主要介绍Java Card应用程序的体系结构以及与Java Card Applet的通信方式。
Java Card技术是专门为那些内存和计算能力比J2ME设备更为受限的智能卡和其它设备提供的一个平台。图1是Java Card和J2ME平台的对照。它为应用程序提供了一个安全的运行环境。它允许多个应用程序同时在一个卡片上运行,并且可以对已发放到用户手中的卡片进行更新。用Java编写的应用程序可以安全的运行在不同提供商的卡片上。
从上图可以看出,CDC和CLDC配置以及它们相关的简表是J2ME平台的一部分,而Java Card是一个单独创建来用于智能卡环境的平台。
在目前的版本中(2.2.1),Java Card技术的规范包括一些三部分:
1.Java Card Virtual Machine规范:该规范定义了Java语言的一个子集和适用于智能卡的虚拟机。
2.Java Card Runtime Environment规范:该规范更进一步定义了基于Java的智能卡的运行时行为。
3.Java Card API规范:该规范定义了为智能卡应用程序量身定制的核心框架以及各种包和类。
一个典型的Java Card设备有一个8或16位的运行在3.7MHz的中央处理器,带有1K的RAM和多于16K的非易失性存储器(可编程只读存储器或者闪存)。高性能的智能卡带有单独的处理器和加密芯片,以及用于加密的内存,并且有一些还带有32位的中央处理器。
Sun还提供了Java Card开发工具箱(JCDK) ,可在以下站点获取:
http://java.sun.com/products/javacard/。它包含了Java Card运行时环境(JCRE)和Java Card虚拟机(JVVM)的引用实现,以及其它帮助开发Java Card小应用程序的工具。
一个Java Card应用程序的结构如图2所示。
从图中可以看出,Java Card应用程序并不是孤立的,而是包含卡端、读取端和后端程序等元素。
下面将分别描述各个组成元素。
后端应用程序及系统
后端应用程序提供了支持卡上Java Applet的服务。 例如,一个后端应用程序利用卡片上的证书可以提供与安全系统的连接,从而提供强大的安全性。在一个电子付款系统中,后端应用程序可以提供到信用卡及其他交易信息的访问。
读卡器端主应用程序
主应用程序驻留于例如个人计算机、电子付款终端、手机或者一个安全子系统中。它处理用户、Java Card Applet和供应商的后端应用程序之间的通信。
传统的读取端应用程序是使用C语言编写的。近来J2ME技术的广泛使用使得用Java语言来实现主应用程序成为可能;例如,它可以在一台支持MIDP和安全信赖服务应用编程接口(Security and Trust Services API)的手机上运行。
卡片接受设备(CAD)
卡片接受设备(CAD)是处于主应用程序和Java Card设备之间的接口设备。一个CAD为卡片提供电源,而且可以与之进行电子或者射频通信。一个CAD可能是一个使用串行端口连接于台式计算机的读卡器,或者可能被集成到例如饭店或商场内的电子付款终端。CAD可以在主应用程序和卡片之间传递命令APDU(Application Protocol Data Unit,简称APDU)以及响应APDU。一些CAD有用于输入个人识别号码(PIN)的键盘,有的可能还有显示屏。
卡片端应用程序
Java Card平台是一个多应用程序环境。在图2中我们可以看到,卡片上可能存在一个或多个Java Card Applet,还有相应的支持软件——卡片的操作系统和Java Card运行时环境(JCRE)。JCRE由Java Card虚拟机、Java Card Framework和API以及一些扩展的API组成。
所有的Java Card Applet都需要扩展Applet基本类,并且必须实现install()和process()方法;JCRE在安装Applet的时候调用其install()方法,并且在每次有命令APDU进入的时候调用其process()方法。
下面将描述主应用程序和Java Card Applet之间的通信方式。
二者之间的通信有两种方式。第一是使用基本的消息传递模型;第二是使用基于Java Card的远程方法调用(JCRMI)该方法是J2SE RMI分布式对象模型的一个子集。下面分别并主要阐述这两种方式。
消息传递模型是所以Java Card通信的基础。它的核心就是应用程序协议数据单元(APDU),就如图2所示,它是CAD和Java Card框架之间交换的一个逻辑数据包。Java Card框架接收任何来自CAD中转的命令APDU并将其前传给相应的Applet。当Applet处理完命令APDU后将返回一个响应APDU。APDU的格式遵从ISO/IEC 7816-3和7816-4。图3是使用消息传递的模型。
读卡器和卡之间的通信通常基于下面两种连接协议的一种,面向字节的T = 0方式,或者面向数据块的T = 1方式。还可能会用到被称为T = USB和T = RF的替换协议。
下面简要叙述命令APDU和响应APDU。
命令APDU的格式通常如图4所示:
一个命令APDU包含一个必需的头的和一个可选的体。其中:
²       CLA(1字节):这个必需的字段识别指令的一个特定应用程序类。有效的CLA值在ISO 7816 - 4规范中定义。
²       INS(1字节):这个必需的字段指明CLA字段中标示的指令类中的一个特定的指令。ISO 7816 - 4标准指定用于访问卡上的数据的基本指令。附加功能已经在这个标准中的其它地方说明,其中一些是安全功能。只有当使用一个相应的CLA字节值时,才可以根据标准定义自己的特定应用程序的INS值。
²       P1(1字节):这个必需的字段定义指令参数1。可以使用这个字段来检验INS字段,或者用于输入数据。
²       P2(1字节):这个必需的字段定义指令参数。可以使用这个字段来检验INS字段,或者用于输入数据。
²      Lc(1字节):这个可选的字段指定数据字段的字节数。
²       Data Field(可变的,由Lc指定字节数):包含了命令数据。
²       Le(1字节):这个可选的字段指定在期望响应的数据字段中的最大字节数。
响应APDU格式通常如图5所示:
²       和一个APDU命令相似,响应APDU有可选择的和必要的字段:
Data Field:(可变长度,由命令APDU中的Le确定):这个可选择的字段包含小应用程序返回的数据。
²       SW1(1字节):这个必要的字段是状态字1。
²       SW2(1字节):这个必要的字段是状态字2。
这些状态字的值在ISO 7816 - 4规范中定义。
第二种方式是Java Card RMI(JCRMI)通讯模型,它依赖于J2SE RMI分布式对象模型的一个子集。在RMI模型中,一个服务器应用程序创建并生成可访问的远程对象.客户应用程序要获得到远程对象的远程引用,然后调用它们的远程方法。在JCRMI中,Java Card Applet是服务器,而主应用程序(Host Application)是客户端。
JCRMI由类RMIService提供,并放在扩展程序包javacardx.rmi中。JCRMI消息被封装到传递给RMIService方法的APDU对象中。换句话说,JCRMI提供了一个基于APDU消息传递模型的分布式对象模型机制。通过这个机制,服务器和客户端可以来回传送方法信息、参数和返回值。
由于接触的时间不长,研究的也不够深刻,所以以上文字显得有些粗枝大叶。大家可以在以下站点获得相关的参考:http://java.sun.com/products/javacard/