您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > JavaCard应用程序开发
JavaCard应用程序开发三部曲来源:天极网内容简介:JavaCard技术适用于智能卡和其他高度专业化设备的Java平台,这些设备的内存和处理能力都比J2ME设备的要求更加苛刻。智能卡在个人信息安全方面有很大用处。它们可用于添加验证和安全访问到需要高级别安全的信息系统。保存在智能卡上的信息是便携的。使用JavaCard技术,你可能随身携带保存在一个小型并且安全的媒介上的重要并且敏感的个人信息,比如你的病历、信用卡号或者电子现金余额。注:本教程来源于互联网,版权归原作者和出版商所有,仅供个人学习、参考之用,请勿保存、转载发布、以及用于商业用途,请支持正版。JavaCard应用程序开发三部曲Java爱好者、什么是智能卡?智能卡不是新鲜事物。它们在二十年前在欧洲就以记忆卡片的形式推出了,用于保存关键的电话信息,以减少盗打付费电话的可能。智能卡技术是ISO国际标准组织的连接技术委员会1(JTC1)和国际电子委员会(IEC)定义并控制的一种行业标准。1987年推出的ISO/IEC7816国际标准系列在2003年推出了它的最新的升级版本,定义了智能卡的各个方面,包括物理特征、物理接触界面、电子信号和传输协议、命令、安全体系、应用程序标识符和公用数据元素等。智能卡是一个包含嵌入集成电路(IC)的塑料卡片,类似于一张信用卡。当用作SIM卡时,这个塑料卡片很小,正好能放入手机中。智能卡设计时就极注重高度安全性,窜改一点点内容都会导致毁坏它包含的信息。在智能卡使用的某些领域,它们只是仅仅提供受保护的非易失性存储。更高级的智能卡还有微处理器和内存,用于安全的处理和储存,并且可以用于使用公共密钥或者共享密钥算法的安全应用程序。智能卡上的非易失性存储是最宝贵的资源,可用于保存秘钥和数字证书。一些智能卡有单独的加密协处理器,支持象RSA、AEC和(3)DES这样的算法。智能卡不包含电池,只有在和读卡机连接的时候才被激活。当它被连接时,在执行一个复位序列之后,卡片处于非激活状态,等待接收来自客户端(主机)应用程序的命令请求。智能卡可以分为可接触和非可接触。可接触智能卡通过读卡器和智能卡的8个触点物理接触来通讯并工作,而非可接触智能卡依靠在小于2英尺的一般距离之内的射频信号通讯。非接触智能卡的射频通信基于类似于用于保存反盗窃和记录清单的射频标识符(RFID)标记的技术。图1描述了可接触和非可接触智能卡:JavaCard应用程序开发三部曲Java爱好者技术还存在除了智能卡之外的其它的形态,例如智能按钮和USB令牌,这两种如图2所示。这些的功能和智能卡差不多,例如用于验证用户或者传送敏感信息。智能按钮包含一块电池而且是基于可接触模式,而USB令牌则可以直接插入个人计算机的USB端口,而不需要任何可接触或者非可接触读卡器。这两种类型的JavaCard具有与智能卡相同的编程能力并且具有防篡改能力。JavaCard应用程序开发三部曲Java爱好者://java.sun.com/products/javacard/smartcards.htm获取更详细的信息。2、JavaCard规范多年以前,Sun微系统公司实现了智能卡和类似的资源约束设备的潜能,并且定义了一组Java技术子集规范来为它们创建应用程序,JavaCard小应用程序。支持这些规范的设备称为JavaCard平台。在一个JavaCard平台上,来自不同的供应商的多个应用程序可以安全地共存。一个典型的JavaCard设备有一个8或16位的运行在3.7MHz的中央处理器,带有1K的RAM和多于16K的非易失性存储器(可编程只读存储器或者闪存)。高性能的智能卡带有单独的处理器和加密芯片,以及用于加密的内存,并且有一些还带有32位的中央处理器。JavaCard技术规范目前是2.2版,由三部分组成:·JavaCard虚拟机规范,定义了用于智能卡的Java程序语言的一个子集和虚拟机。·JavaCard运行时环境规范,进一步定义了用于基于Java的智能卡的运行期行为。·JavaCard应用编程接口规范,定义了用于智能卡应用程序核心框架和扩展Java程序包和JavaCard应用程序开发三部曲Java爱好者类。Sun还提供了JavaCard开发工具箱(JCDK),包含了JavaCard运行期环境和JavaCard虚拟机的引用实现,和其它帮助开发JavaCard小应用程序的工具。本文的第二部分将详细讲述JCDK。JavaCard技术和J2ME平台让我们比较一下JavaCard和J2ME平台技术:图.JavaCard技术和J2ME平台CDC和CLDC配置以及它们相关的简表是J2ME平台的一部分,而JavaCard是一个单独创建来用于智能卡环境的平台。JavaCard应用程序开发三部曲Java爱好者、元素完整的JavaCard应用程序由一个后端应用程序和系统、一个主机(卡外)应用程序、一个接口设备(读卡器)和卡上小应用程序、用户证书和支持软件组成。所有的这些元素共同组成一个安全的端到端应用程序:图1.JavaCard应用程序的体系结构一个典型的JavaCard应用程序不是孤立的,而是包含卡端、读取端和后端元素。让我们更详细的讲述一下每个元素。后端应用程序和系统后端应用程序提供了支持卡上Java小应用程序的服务。例如,一个后端应用程序可以提供到安全系统和卡上的证书的连接,提供强大的安全性。在一个电子付款系统中,后端应用程序可以提供到信用卡及其他付款信息的访问。JavaCard应用程序开发三部曲Java爱好者读取端主应用程序主应用程序存在于一个例如个人计算机这样的台式机或者终端、电子付款终端、手机或者一个安全子系统中。主应用程序处理用户、JavaCard小应用程序和供应商的后端应用程序之间的通讯。传统的读取端应用程序是使用C编写的。近来J2ME技术的广泛普及有望使用Java实现主应用程序;例如,它可以在一台支持MIDP和安全信赖服务应用编程接口(SecurityandTrustServicesAPI)手机上运行。智能卡供应商一般不仅提供开发工具箱,而且提供支持读取端应用程序和JavaCard小应用程序的应用程序编程接口。例如OpenCardFramework,就是一个基于Java的应用程序编程接口集,隐藏了来自不同供应商的读取器的一些细节,并且提供了JavaCard远程方法调用分布式对象模型和安全信任服务应用编程接口(SATSA),我在本文后面一部分讨论它们。读取端卡片接受设备卡片接受设备(CAD)是处于主应用程序和JavaCard设备之间的接口设备。一个CAD为卡片提供电力,以及与之进行电子或者射频通信。一个CAD可能是一个使用串行端口附于台式计算机的读卡器,或者可能被整合到终端内,例如饭店或者加油站内的电子付款终端。接口设备从主应用程序到卡片转送应用程序协议数据单元(ApplicationProtocolDataUnit,简称APDU)命令(在后面讨论),并且从卡片向主应用程序转送响应。一些CAD有用于输入个人识别号码的键盘,有的可能还有显示屏。卡片端小应用程序和环境JavaCard平台是一个多应用程序环境。在图4中我们可以看到,卡片上可能存在一个或多个JavaCard小应用程序,还有支持软件--卡片的操作系统和JavaCard运行时环境(JCRE)一起。JCRE由JavaCard虚拟机、JavaCardFramework和应用程序编程接口以及一些扩展应用程序编程接口组成。JavaCard应用程序开发三部曲Java爱好者基本类,并且必须实现install()和process()方法;JCRE在安装小应用程序的时候调用install(),并且在每次有一个进入的用于小应用程序的APDU的时候调用process()。JavaCard小应用程序在被装载的时候实例化,并且在断电的时候保持运行。JavaCard小应用程序起一个服务器的作用,并且是无源的。在一张卡片被加电以后,每个小应用程序都保持非运行的状态直到它被选择,在此时可能会做初始化。小应用程序只有在一个APDU被发送给它以后才被激活。一个小应用程序如何激活(被选择)在一个JavaCard小应用程序的生命周期一节中描述。与JavaCard小应用程序通讯(访问智能卡)你可以使用两种模型中的任何一种来在一个主应用程序和一个JavaCard小应用程序之间通信。第一个模型是基本消息传送模型,第二种是基于JavaCard远程方法调用(JCRMI),这是J2SERMI分布式对象模型的一个子集。此外,SATSA通过一个基于更加抽象的应用编程接口的普通连接框架(GenericConnectionFramework,简称GCF)应用编程接口,让你要么使用消息传递要么使用JCRMI来访问智能卡。4、消息传递模型图1中说明的消息传递模型是所有JavaCard通信的基础。它的核心就是应用程序协议数据单元(APDU),CAD和JavaCard框架之间交换的一个逻辑数据包。JavaCard框架接收任何CAD发送进来的APDU命令并且传送到相应的小应用程序中。小应用程序处理APDU命令,然后返回一个响应APDU。那些APDU遵守国际标准规格ISO/IEC7816-3和7816-4。JavaCard应用程序开发三部曲Java爱好者使用消息传递模型通讯读卡器和卡之间的通信通常基于下面两种连接协议的一种,面向字节的T=0,或者面向数据块的T=1。还可能会用到被称为T=USB和T=RF的替换协议。JCREAPDU类向应用程序隐藏了一些协议细节,但不是全部,因为T=0协议相当的复杂。⒈APDU命令一个APDU命令的结构由它的第一个字节的值控制,大部分情况下看上去如下所示:图2、APDU命令一个APDU命令有一个必须有的头和一个可选的体,包含:·CLA(1字节):这个必要的字段识别指令的一个特定应用程序类。有效的CLA值在ISO7816JavaCard应用程序开发三部曲Java爱好者规范中定义:表格1、ISO7816CLA值CLA值指令类0x0n,0x1nISO7816-4卡指令,比如文件存取和安全操作20to0x7F保留0x8nor0x9n你可以用作你的特定的应用程序指令的ISO/IEC7816-4格式,根据标准解释'X'0xAn特定的应用程序或者供应商的指令B0toCF你可以用作特定应用程序的ISO/IEC7816-4格式D0toFE特定的应用程序或者供应商的指令FF保留给协议类型选择·理论上,你可以使用所有的CLA值0x80或者更高值来用于特定应用程序指令,但是在许多现在的JavaCard实现中,只有黑体显示的是实际认可的。·INS(1字节):这个必需的字段指明CLA字段中标示的指令类中的一个特定指令。ISO7816-4标准指定用于访问卡上的数据的基本指令,当它根据在像标准中定义的卡上的文件系统那样结构化的时候。附加功能已经在这个标准中的其它地方说明,其中一些是安全功能。表2中是一个ISO7816指令的列表。只有当使用一个相应的CLA字节值时,你才可以根据标准定义你自己的特定应用程序的INS值,。表格2、
本文标题:JavaCard应用程序开发
链接地址:https://www.777doc.com/doc-4233626 .html