http://www.cn-java.com/www1/?action-viewnews-itemid-363
摘要
Java Card是能运行Java 程序的智能卡。针对这种新的Java平台,Sun公司的JavaSoft部门已经制订了Java Card 2.0 API技术规范,目前,已有若干授权方正在智能卡上实现这种API。要编写与2.0兼容的Java Card 应用程序,开发人员需要从体系结构上了解Java Card的内涵,其内核类的含义,以及如何针对智能卡开发应用程序。 本文将详细讨论Java Card技术,为您,即开发人员,提供 有关智能卡内 Java平台 的系统体系结构、应用编程接口和运行环境的技术指南。( 4,000字)作者:Zhiqun Chen,Rinaldo Di Giorgio专稿
本文将首先简单介绍智能卡,并简要回顾智能卡标准ISO 7816。根据Java Developer (开发人员专栏)以前发表的有关智能卡的文章,本文将首先回答这样一个问题:"什么是Java Card?",并简单介绍Java Card系统体系结构。然后,将集中讨论与Java Card相关的若干问题(包括Java Card的生命周期;Java Card 2.0语言子集和API库类;以及Java Card的安全性)。随后还将讨论Java Card运行环境和Java Card工作原理。最后举例说明Java Card的应用:针对Java Card编写的电子钱包应用程序。
本文中凡提到Java Card时均指Java Card 2.0。
什么是智能卡?
智能卡与信用卡大小相同,可通过嵌入到其塑料基体中硅片上的电子电路来存储和处理信息。智能卡主要分为两类:包含有微处理器并具有读、写和计算功能的智能卡(如小型微电脑)。另一类为没有微处理器的内存卡 ,它只能存储信息。内存卡利用安全逻辑算法控制对存储器的存取。
所有智能卡都包括三类存储器:
永久不变存储器(persistent non-mutable memory);永久可变存储器(persistent mutable memory);和非永久可变存储器(non-persistent mutable memory)。ROM、EEPROM和RAM是目前智能卡的三类存储器中使用最普遍的。永久存储器又称非易失性存储器。在本文中我们将交替使用术语永久存储器和非易失性存储器。
国际标准组织规定的ISO 7816第1-7部分包括覆盖智能卡各个方面的一组标准。ISO 7816包括:
- 物理特性(第1部分)
- 尺寸和触点位置(第2部分)
- 电子信号和传输协议(第3部分)
- 行业间交换指令(第4部分)
- 应用程序标识符(第5部分)
- 行业间数据元素(第6部分)
- 行业间SCQL指令(第7部分)
下图表示智能卡的物理特性,在ISO 7816第1部分中有规定。

Physical Characteristics ---物理特性
Magnetic Stripe ( Back of card ) ---磁条(卡的背面)
Contacts ---触点
Embossing area --- 刻字区
Front of Card ---卡的正面
有关ISO 7816和智能卡的详细情况,请参见"智能卡:入门"。
一般的说,智能卡不包括电源,显示屏,或键盘。它通过其8个触点,利用串行通信接口与外部世界交互。ISO 7816第2部分对智能卡的尺寸和触点位置有详细规定。下图表示智能卡的触点。

Eight Contact Points --- 8个触点
Power Supplier ---电源
Reset ---复位
Check ---检查
Ground ---接地
Optional Contact ---可选触点
Input/Output ---输入/输出
Optional Contacts ---可选触点
智能卡插入可能与另一台计算机相连的卡接收设备(CAD)。卡接收设备又可称作终端、读卡器和IFD (接口设备)。 都具有相同的基本功能,即向智能卡提供电源和建立数据传输连接。
当两台计算机彼此进行通信时,它们交换根据一系列协议构造的数据包。类似地,智能卡也使用自己的数据包---称作APDU (应用协议数据单元)与外部世界对话。APDU包含一条指令或响应信息。在智能卡的世界里 采用的是主 从 模式,而智能卡永远扮演从动的角色。换句话说,智能卡总是在等待来自终端的 命令APDU。随后,它执行APDU规定的动作,并以一个 应答APDU向终端作出回答。智能卡与终端之间互相交换 命令APDU和 应答APDU。
下表分别表示 命令APDU和 应答APDU的格式。ISO 7816第4部分对APDU的结构有专门描述。
命令APDU | ||||||
标题头(必须) | 主体(可选) | |||||
CLA | INS | P1 | P2 | Lc | 数据字段 | Le |
标题 头对被选指令进行编码。它包括4个字段:类(CLA)、指令(INS)、和参数1和2 (P1和P2)。每个字段包含一个字节:
- CLA:类字节。在很多智能卡上,这个字节用来表示应用程序。
- INS:指令字节。这个字节表示指令代码。
- P1-P2:参数字节。这些字节对 命令APDU提供进一步说明。
Lc表示 命令APDU的数据字段的字节数;Le表示以下 应答APDU 的数据字段希望的字节数。
应答APDU | ||
主体(可选) | 尾部(必须) | |
数据字段 | SW1 | SW2 |
状态 字节 SW1和SW2表示 命令APDU在智能卡中的处理状态。