JavaCard应用程序开发.pdf
《JavaCard应用程序开发.pdf》由会员分享,可在线阅读,更多相关《JavaCard应用程序开发.pdf(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 JavaCard 应用程序开发应用程序开发 三部曲三部曲 来源:来源:天极网 内容简介:内容简介:Java Card 技术适用于智能卡和其他高度专业化设备的 Java 平台,这些设备的内存和处理能力都比 J2ME 设备的要求更加苛刻。智能卡在个人信息安全方面有很大用处。它们可用于添加验证和安全访问到需要高级别安全的信息系统。保存在智能卡上的信息是便携的。使用 Java Card 技术,你可能随身携带保存在一个小型并且安全的媒介上的重要并且敏感的个人信息,比如你的病历、信用卡号或者电子现金余额。注:注:本教程来源于互联网,版权归原作者和出版商所有,仅供个人学习、参考之用,请勿保存、转载发布、以
2、及用于商业用途,请支持正版。JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 1基础篇基础篇 1、什么是智能卡?智能卡不是新鲜事物。它们在二十年前在欧洲就以记忆卡片的形式推出了,用于保存关键的电话信息,以减少盗打付费电话的可能。智能卡技术是ISO国际标准组织的连接技术委员会1(JTC1)和国际电子委员会(IEC)定义并控制的一种行业标准。1987 年推出的 ISO/IEC 7816 国际标准系列在 2003 年推出了它的最新的升级版本,定义了智能卡的各个方面,包括物理特征、物理接触界面、电子信号和传输协议、命令、安全体系
3、、应用程序标识符和公用数据元素等。智能卡是一个包含嵌入集成电路(IC)的塑料卡片,类似于一张信用卡。当用作 SIM 卡时,这个塑料卡片很小,正好能放入手机中。智能卡设计时就极注重高度安全性,窜改一点点内容都会导致毁坏它包含的信息。在智能卡使用的某些领域,它们只是仅仅提供受保护的非易失性存储。更高级的智能卡还有微处理器和内存,用于安全的处理和储存,并且可以用于使用公共密钥或者共享密钥算法的安全应用程序。智能卡上的非易失性存储是最宝贵的资源,可用于保存秘钥和数字证书。一些智能卡有单独的加密协处理器,支持象 RSA、AEC 和(3)DES 这样的算法。智能卡不包含电池,只有在和读卡机连接的时候才被激
4、活。当它被连接时,在执行一个复位序列之后,卡片处于非激活状态,等待接收来自客户端(主机)应用程序的命令请求。智能卡可以分为可接触和非可接触。可接触智能卡通过读卡器和智能卡的 8 个触点物理接触来通讯并工作,而非可接触智能卡依靠在小于 2 英尺的一般距离之内的射频信号通讯。非接触智能卡的射频通信基于类似于用于保存反盗窃和记录清单的射频标识符(RFID)标记的技术。图 1 描述了可接触和非可接触智能卡:JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 2 图 1a.接触式智能卡 图 1b.非接触式智能卡 Java Card
5、技术还存在除了智能卡之外的其它的形态,例如智能按钮和 USB 令牌,这两种如图2 所示。这些的功能和智能卡差不多,例如用于验证用户或者传送敏感信息。智能按钮包含一块电池而且是基于可接触模式,而 USB 令牌则可以直接插入个人计算机的 USB 端口,而不需要任何可接触或者非可接触读卡器。这两种类型的 Java Card 具有与智能卡相同的编程能力并且具有防篡改能力。JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 3 图 2a.带有 Java 功能的智能纽扣 图 2b.带有 Java 功能的 USB 令牌 请参阅 What
6、 is a Smart Card?http:/ 获取更详细的信息。2、JavaCard 规范 多年以前,Sun 微系统公司实现了智能卡和类似的资源约束设备的潜能,并且定义了一组 Java技术子集规范来为它们创建应用程序,Java Card 小应用程序。支持这些规范的设备称为 Java Card平台。在一个 Java Card 平台上,来自不同的供应商的多个应用程序可以安全地共存。一个典型的 Java Card 设备有一个 8 或 16 位的运行在 3.7MHz 的中央处理器,带有 1K 的 RAM和多于 16K 的非易失性存储器(可编程只读存储器或者闪存)。高性能的智能卡带有单独的处理器和加密
7、芯片,以及用于加密的内存,并且有一些还带有 32 位的中央处理器。Java Card 技术规范目前是 2.2 版,由三部分组成:Java Card 虚拟机规范,定义了用于智能卡的 Java 程序语言的一个子集和虚拟机。Java Card 运行时环境规范,进一步定义了用于基于 Java 的智能卡的运行期行为。Java Card 应用编程接口规范,定义了用于智能卡应用程序核心框架和扩展 Java 程序包和JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 4类。Sun 还提供了 Java Card 开发工具箱(JCDK)htt
8、p:/ Card 运行期环境和 Java Card 虚拟机的引用实现,和其它帮助开发 Java Card 小应用程序的工具。本文的第二部分将详细讲述 JCDK。Java Card 技术和 J2ME 平台 让我们比较一下 Java Card 和 J2ME 平台技术:图.Java Card 技术和 J2ME 平台 CDC 和 CLDC 配置以及它们相关的简表是 J2ME 平台的一部分,而 Java Card 是一个单独创建来用于智能卡环境的平台。JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 53、元素 完整的 Java
9、Card 应用程序由一个后端应用程序和系统、一个主机(卡外)应用程序、一个接口设备(读卡器)和卡上小应用程序、用户证书和支持软件组成。所有的这些元素共同组成一个安全的端到端应用程序:图 1.Java Card 应用程序的体系结构 一个典型的 Java Card 应用程序不是孤立的,而是包含卡端、读取端和后端元素。让我们更详细的讲述一下每个元素。后端应用程序和系统后端应用程序和系统 后端应用程序提供了支持卡上 Java 小应用程序的服务。例如,一个后端应用程序可以提供到安全系统和卡上的证书的连接,提供强大的安全性。在一个电子付款系统中,后端应用程序可以提供到信用卡及其他付款信息的访问。JavaC
10、ard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 6 读取端主应用程序读取端主应用程序 主应用程序存在于一个例如个人计算机这样的台式机或者终端、电子付款终端、手机或者一个安全子系统中。主应用程序处理用户、Java Card 小应用程序和供应商的后端应用程序之间的通讯。传统的读取端应用程序是使用 C 编写的。近来 J2ME 技术的广泛普及有望使用 Java 实现主应用程序;例如,它可以在一台支持 MIDP 和安全信赖服务应用编程接口(Security and Trust Services API)手机上运行。智能卡供应商一般不仅提供
11、开发工具箱,而且提供支持读取端应用程序和 Java Card 小应用程序的应用程序编程接口。例如 OpenCard Framework http:/www.opencard.org/,就是一个基于 Java 的应用程序编程接口集,隐藏了来自不同供应商的读取器的一些细节,并且提供了 Java Card 远程方法调用分布式对象模型和安全信任服务应用编程接口(SATSA),我在本文后面一部分讨论它们。读取端卡片接受设备读取端卡片接受设备 卡片接受设备(CAD)是处于主应用程序和 Java Card 设备之间的接口设备。一个 CAD 为卡片提供电力,以及与之进行电子或者射频通信。一个 CAD 可能是一
12、个使用串行端口附于台式计算机的读卡器,或者可能被整合到终端内,例如饭店或者加油站内的电子付款终端。接口设备从主应用程序到卡片转送应用程序协议数据单元(Application Protocol Data Unit,简称 APDU)命令(在后面讨论),并且从卡片向主应用程序转送响应。一些 CAD 有用于输入个人识别号码的键盘,有的可能还有显示屏。卡片端小应用程序和环境卡片端小应用程序和环境 Java Card 平台是一个多应用程序环境。在图中我们可以看到,卡片上可能存在一个或多个Java Card 小应用程序,还有支持软件-卡片的操作系统和 Java Card 运行时环境(JCRE)一起。JCRE
13、 由 Java Card 虚拟机、Java Card Framework 和应用程序编程接口以及一些扩展应用程序编程接口组成。JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 7 所有的Java Card小应用程序扩展Applet基本类,并且必须实现install()和process()方法;JCRE在安装小应用程序的时候调用 install(),并且在每次有一个进入的用于小应用程序的 APDU 的时候调用 process()。Java Card 小应用程序在被装载的时候实例化,并且在断电的时候保持运行。Java Car
14、d 小应用程序起一个服务器的作用,并且是无源的。在一张卡片被加电以后,每个小应用程序都保持非运行的状态直到它被选择,在此时可能会做初始化。小应用程序只有在一个 APDU 被发送给它以后才被激活。一个小应用程序如何激活(被选择)在一个 Java Card 小应用程序的生命周期一节中描述。与与 Java Card 小应用程序通讯(访问智能卡)小应用程序通讯(访问智能卡)你可以使用两种模型中的任何一种来在一个主应用程序和一个 Java Card 小应用程序之间通信。第一个模型是基本消息传送模型,第二种是基于 Java Card 远程方法调用(JCRMI),这是 J2SE RMI 分布式对象模型的一个
15、子集。此外,SATSA 通过一个基于更加抽象的应用编程接口的普通连接框架(Generic Connection Framework,简称 GCF)应用编程接口,让你要么使用消息传递要么使用 JCRMI 来访问智能卡。4、消息传递模型 图 1 中说明的消息传递模型是所有 Java Card 通信的基础。它的核心就是应用程序协议数据单元(APDU),CAD 和 Java Card 框架之间交换的一个逻辑数据包。JavaCard 框架接收任何 CAD发送进来的 APDU 命令并且传送到相应的小应用程序中。小应用程序处理 APDU 命令,然后返回一个响应 APDU。那些 APDU 遵守国际标准规格 I
16、SO/IEC 7816-3 和 7816-4。JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 8 图 1 使用消息传递模型通讯 读卡器和卡之间的通信通常基于下面两种连接协议的一种,面向字节的 T=0,或者面向数据块的 T=1。还可能会用到被称为 T=USB 和 T=RF 的替换协议。JCRE APDU 类向应用程序隐藏了一些协议细节,但不是全部,因为 T=0 协议相当的复杂。APDU 命令 一个 APDU 命令的结构由它的第一个字节的值控制,大部分情况下看上去如下所示:图 2、APDU 命令 一个 APDU 命令有一个
17、必须有的头和一个可选的体,包含:CLA(1 字节):这个必要的字段识别指令的一个特定应用程序类。有效的 CLA 值在 ISO 7816 JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 9-4 规范中定义:表格 1、ISO 7816 CLA 值 CLA 值 指令类 0 x0n,0 x1n ISO 7816-4 卡指令,比如文件存取和安全操作 20 to 0 x7F 保留 0 x8n or 0 x9n 你可以用作你的特定的应用程序指令的 ISO/IEC 7816-4 格式,根据标准解释 X 0 xAn 特定的应用程序或者供
18、应商的指令 B0 to CF 你可以用作特定应用程序的 ISO/IEC 7816-4 格式 D0 to FE 特定的应用程序或者供应商的指令 FF 保留给协议类型选择 理论上,你可以使用所有的 CLA 值 0 x80 或者更高值来用于特定应用程序指令,但是在许多现在的 Java Card 实现中,只有黑体显示的是实际认可的。INS(1 字节):这个必需的字段指明 CLA 字段中标示的指令类中的一个特定指令。ISO 7816-4 标准指定用于访问卡上的数据的基本指令,当它根据在像标准中定义的卡上的文件系统那样结构化的时候。附加功能已经在这个标准中的其它地方说明,其中一些是安全功能。表 2 中是一
19、个 ISO 7816 指令的列表。只有当使用一个相应的 CLA 字节值时,你才可以根据标准定义你自己的特定应用程序的 INS 值,。表格 2、当 CLA=0 x时的 ISO 7816-4 INS 值 INS 值 命令描述 0E Erase Binary 20 Verify JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 1070 Manage Channel 82 External Authenticate 84 Get Challenge 88 Internal Authenticate A4 Select File
20、 B0 Read Binary B2 Read Record(s)C0 Get Response C2 Envelope CA Get Data D0 Write Binary D2 Write Record D6 Update Binary DA Put Data DC Update Record E2 Append Record P1(1 字节):这个必需的字段定义指令参数 1。你可以使用这个字段来检验 INS 字段,或者用于输入数据。P2(1 字节):这个必需的字段定义指令参数你可以使用这个字段来检验 INS 字段,或者用于输入数据。Lc(1 字节):这个可选的字段是命令的数据字段的字节
21、数。数据字段(可变的,字节 Lc 数):这个可选的字段保存命令数据。JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 11 Le(1 字节):这个可选的字段指定在期望响应的数据字段中的极限字节数。取决于命令数据的存在与否以及相应是否必须,命令 APDU 有四种变化。只有在你使用协议 T=0 时,你才需要关心这些变化:图 3、APDU 命令的四个可能的结构 一个典型的应用程序将以不同的结构方式使用不同的 APDU 命令。2、响应 APDU 响应 APDU 的格式很简单的:图 4、响应 APDU JavaCard 应用程序开
22、发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 12 和一个 APDU 命令相似,响应 APDU 有可选择的和必要的字段:数据字段(可变长度,由 APDU 命令中的 Le 确定):这个可选择的字段包含小应用程序返回的数据。SW1(1 字节):这个必要的字段是状态字 1。SW2(1 字节):这个必要的字段是状态字 2。这些状态字的值在 ISO 7816-4 规范中定义:图 5、响应状态码 Java Card 框架应用编程接口中的 ISO7816 Java 接口定义了许多常数来帮助规范返回错误代码。3、过程 APDU 每当有一个进入的 APDU 用于
23、所选择的小应用程序,JCRE 就调用小应用程序的 process()方法,把进入的 APDU 作为一个参数传送。这个小应用程序必须解析 APDU 命令,处理数据、生成一个响应 APDU,然后把控制权返回给 JCRE。RMI(JCRMI)通讯模型 第二种通信模型依靠 J2SE RMI 分布式对象模型的一个子集。在 RMI 模型中,一个服务器应用程序创建并生成可访问的远程对象,并且一个客户应用程序获JavaCard 应用程序开发三部曲应用程序开发三部曲 Java 爱好者 http:/www.JavaFan.NET 制作 13得到远程对象的远程引用,然后调用它们的远程方法。在 JCRMI 中,Jav
24、a Card 小应用程序是服务器,而主应用程序是客户端。JCRMI 由类 RMIService 提供到扩展程序包 javacardx.rmi 中。JCRMI 消息被封装到传入RMIService 方法的 APDU 对象中,换句话说,JCRMI 提供了一个基于 APDU 消息传递模型的分布式对象模型机制,通过这个机制服务器和客户端通信,来回传送方法信息、参数和返回值。5、虚拟机技术 Java Card 虚拟机(JCVM)规范定义了 Java 程序设计语言的一个子集和一个用于智能卡的兼容Java 的虚拟机,包括二进制数据表示和文件格式,以及 JCVM 指令集。用于 Java Card 平台的虚拟机
25、是两部分实现,一部分在卡外,一部分运行在卡本身。卡上的 Java Card 虚拟机解释字节码、管理类和对象等等。外部 Java 虚拟机部分是一个开发工具,一般称为 Java Card 转换工具,装载、检验和进一步地准备卡片小应用程序 Java 类,用于在卡上执行。转换工具输出的是一个 Converted Applet(CAP)文件,这是一个包含一个 Java 程序包中所有类的文件。转换程序检验类是否遵循 Java Card 规范。JCVM 只支持 Java 程序设计语言的一个有限的子集,然而它保留了许多熟悉的特性,包括对象、继承、程序包、动态对象创建、虚拟方法、接口和异常。JCVM 规范放弃了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaCard 应用程序 开发
限制150内