1、Java 智能卡的安全性摘要:Java 智能卡的应用已日益广泛,由于其中涉及到了身份认证、移动通信和电子支付等敏感信息,所以必须为 Java 智能卡制定完善的安全机制。针对此问题,对Java 智能卡的结构和各种安全机制进行了介绍和探讨,分析了 Java 智能卡的安全性。 关键词:Java 智能卡;事务处理;防火墙 中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2011)24-6015-02 The Security of Java Smart Card WANG Ming-fei (Department of Computer Science and Technolog
2、y, China University of Mining and Technology, Xuzhou 221008, China) Abstract: Now, Java Card are using widely, due to these applets relates to the authentication、 mobile communications、 electronic payment and other sensitive information, so it is necessary to establish completed security mechanisms
3、for Java Smart Card. For this problem, the structure of the Java Smart Card and a variety of security mechanisms are discussed, and analyzed the Java Card security. Key words: Java smart card; transaction; firewall 智能卡(Smart Card)是将集成电路芯片镶嵌在塑料基片中,封装成卡的形式,其外形和磁条卡相似,它里面所包含的集成电路芯片带有微处理器和存储器,具有存储、加密和数据处
4、理的能力,可被看作为微小型计算机,另外一般智能卡都加上了 RFID 模块,可以与外界的读卡器进行非接触式通讯。与目前仍在广泛使用的磁卡相比,智能卡具有安全性高、可靠性强、存储量大等优点。 Java 智能卡是在智能卡技术的基础上发展而来的,是目前世界上三大智能卡领先技术(Java CardTM、 Windows?R Powered Smart Cards、MULTOSTM)之一。Java 智能卡是在智能卡的硬件系统基础之上在卡片内通过软件构建的一个支持 Java 程序下载、安装、运行和卸载的软、硬件系统。它在有限资源的智能卡环境中支持 Java 语言的一个子集,成为 Java 嵌入式的一种新应用
5、。Java 智能卡充分利用了 Java 的平台无关性,使得 Java 技术“一次编写,随处运行”的思想在智能卡上得以实现。国外对 Java 卡的研究较早,并已广泛运用,而我们国内的研究较晚,但发展很快。目前,Java 卡主要运用于身份识别、交通、通信及金融等领域,其中涉及到了身份认证和电子支付等一些敏感和隐私信息,这就给 Java 智能卡的安全性提出了很高的要求。 1 Java 卡概述 Java 智能卡系统由以下几部分组成: 1)智能卡硬件系统,一个典型的 Java Card 硬件设备由一个 8 位或 16 位的运行在 3.7MHz 的中央处理器、1K的 RAM 和多于 16K 的非易失性存储
6、器(EEPROM 或Flash)构成。 2)底层操作系统,完成基本的 I/O 通信、存储、加密等基本操作。 3)Java 智能卡虚拟机(JCVM ) ,是用来支持字节码运行的虚拟机模型,解释执行 Java 语言,以实现智能卡平台Java 语言的硬件无关特性。由于智能卡的有限的空间,JCVM 只支持 Java 语言的一个有限的子集。 4)Java 智能卡类库(API) ,包括 Java 智能卡运行的核心类库和应用扩展类库,为 Applet 的开发提供统一的应用编程接口,是 Java 语言的一个子集。 5)Java 智能卡运行环境(JCRE ) ,包括 Java 智能卡虚拟机、API 类库以及其他
7、的支持服务,如卡内 Applet 间的安全隔离机制和对象共享机制、事务处理、逻辑通道等。 6)Java 智能卡应用(Applet ) ,运行于 Java 卡上的应用程序,如 GSM 应用、电子钱包应用。Java 智能卡可以安装多个 Applet,每个 Applet 被赋予一个唯一的 AID,通过AID,JCRE 可以分别激活或取消激活 Java 智能卡中的各个Applet,并且它们之间互不影响。 2 Java 智能卡的安全机制 由于 Java 智能卡支持多个 Applet 存在于一张智能卡中,并且允许用户自主下载、安装和卸载 Applet。我们从两个角度去考虑 Java 智能卡的安全,一是 A
8、pplet 本身,二是多个 Applet 之间。Applet 本身的安全性,一部分基于 java 语言的安全性和编码结构的安全性,这更多的依靠于软件开发人员的编码能力,我们在此不考虑此因素。下面我们从三个方面来考虑 Java 智能卡的安全机制。 2.1 原子性和事务处理 原子性指事务是一个完整的操作,事务的所有元素作为一个整体进行提交或回滚,如果事务中的任何元素操作失败,则整个事务将失败。智能卡平台的原子性是指在卡片运行过程中,当进行某些永久数据的更新操作,发生错误、中断或掉电等异常时,卡片应该保证这些永久数据的更新操作是一致的,即全做或者完全不做。 事务处理就是逻辑上对一组数据的操作,例如乘
9、坐公交车,将乘车费从卡上扣除。对于事务来说,关键在于如何保证该过程的原子性,即该事务的所有数据更改操作全部完成或者全部不进行,即保持原值。对于智能卡这种安全性要求系数较高的设备来说,完善的事务处理尤为重要。在某些情况下,智能卡用户在使用过程中不小心在运行未结束时移走了卡片或关闭了终端电源等,智能卡就必须保证敏感数据的操作完整性。 Java 智能卡平台的事务处理机制由 JCRE 来完成,其提供了两种等级的事务处理机制:一、JCRE 保证对永久对象的某个成员或某个类成员的更新操作是原子性的;二、JCRE 可以提供一个事务处理模式,在该模式下,Applet 可以将一批要更新的数据放到一个事务中来,J
10、CRE 将会保证此事务中所有更新操作的原子性。 2.2 Applet 防火墙 智能卡支持在一张卡上同时存在多个 Applet,那么Java 智能卡平台就要提供一种机制将 Applet 相隔离,以保证某一个 Applet 或者恶意程序不能随便访问其他 Applet 的对象或域。在 Java 智能卡中,Applet 的隔离是通过 Applet防火墙来实现的。如果一个对象是属于一个被它自己的防火墙所保护的 applet,那么其他的 Applet 要访问这个对象时就必须满足一定的安全规则。JCVM 运行时将会自动进行相关安全校验,以防止不同 Applet 间的非法数据访问。 2.2.1 上下文(Con
11、text) Java 智能卡中的防火墙将 Java 智能卡对象系统分为不同的保护对象区域,称为执行上下文(Context) ,而防火墙则是一个执行上下文和另一个执行上下文之间的界限。每当产生一个应用程序对象实例,系统都为之分配一个执行上下文,且此执行上下文实质上为一组执行上下文,同一Java 包中的所有 Applet 对象实例都共享相同的组执行上下文,在同一组执行上下文中,各 Applet 之间的对象访问是允许的,而访问另一组执行上下文中的对象是被防火墙所禁止的。 Java 智能卡运行环境(JCRE )拥有自己的执行上下文,此执行上下文拥有特殊的访问权限,它可访问任何执行上下文中的应用程序对象
12、,而从 Applet 执行上下文到JCRE 执行上下文是被防火墙禁止的。 2.2.2 上下文切换 通常情况下,对象的访问都是在同一 Applet 内完成的,也就不用进行上下文的切换,只有当不同上下文中的Applet 通过共享接口调用时,上下文切换才会出现。 在一个上下文切换过程中,前一个上下文和对象所有者信息将被压入一个内部的 VM 堆栈中,后面的那一个上下文成为当前激活的上下文,这个被调用的方法将在这个新的上下文中执行,当这个方法调用结束时,JCVM 执行一个恢复上下文的切换,原来的(这个方法调用者的)上下文从堆栈中弹出恢复为当前激活的上下文。上下文的切换是可以嵌套的,嵌套的最大深度依赖于可
13、用的 VM 的堆栈空间大小。 2.3 保证对象间访问的安全机制 Applet 防火墙将一个 Applet 的运行限定在被指定的上下文中,为了允许 Applet 与其它的 Applet 或 JCRE 进行交互,以便一个上下文中的 Applet 可以访问一个属于另一个上下文的对象,Java 卡提供了一些安全的访问机制:一、JCRE 入口点对象,为 JCRE 执行上下文拥有的普通对象,Applet 对象实例通过访问 JCRE 入口点对象的公用方法来完成 Applet 对 JCRE 的访问;二、全局数组,为 JCRE 入口点对象的特殊类型,能被所有 Applet 和 JCRE 执行上下文所共享的全局数
14、组;三、JCRE 特权,为 JCRE 上下文拥有的特殊的访问权限,它可以调用所有 Applet 中的对象的方法或访问对象的实例域,而不受 Applet 防火墙限制;四、共享接口,需要一个对象实例去实现,以用来使其他对象实例通过此共享接口来实现跨上下文间的对象访问。 3 总结 由于 Java 智能卡广泛应用于身份认证和电子支付行业,所以其安全性是必须重点考虑的。Java 智能卡的原子性和事务处理机制,可以使 Applet 的数据不会因误操作或读卡器的不正常中断而受到破坏,在一定程度上保证了数据的安全性;Java 智能卡中的防火墙机制保证了 Applet 的隔离,防止了某一 Applet 或恶意程
15、序对其他 Applet 的敏感信息进行访问或破坏,同时 Java 智能卡也提供了跨上下文的Applet 之间的对象访问安全机制,保证了 Applet 间的必要的相互访问的安全。由于 Java 智能卡的众多优点和其突出的安全性,相信将来 Java 智能卡的应用将会越来越广泛。 参考文献: 1 张大伟,靳伟.Java 智能卡原理与应用开发M.北京:电子工业出版社,2008. 2 周捷,吴东辉,陈章龙.JAVA 卡平台安全性的涉及与实现J.计算机工程与应用,2004,21:114-117. 3 李阿芳.Java 智能卡的安全性研究J.电脑知识与技术,2009,5(22):6204-6205. 4 王晓亮.Java 智能卡 Applet 安全下载机制的研究与实现D.西安:西安电子科技大学,2009. 5 王晓亮,方勇,彭彦. Java 智能卡安全运行时环境的设计J.网络安全 ,2009,2:39-41. 6 程恒.Java 智能卡安全运行环境的设计与实现D.西安:西安电子科技大学,2008. 7 http:/ 8 刘慧.Java 智能卡的安全性分析与研究D.济南:山东大学,2008.