李智聪, 凌力
(复旦大学 通信科学与工程系, 上海 200433)
智能卡(Smart Card)是内嵌集成电路芯片的卡片的通称,广泛应用于金融、电信、公安、交通、税务、电子政务等领域[1]。传统的Native卡的操作系统(Chip Operating System,COS)和硬件平台紧密相关,应用的开发和底层COS密不可分。由Sun公司主导的Java智能卡则与之不同,卡片具有通用的API接口,应用的开发与硬件平台无关,通用性更好。虽然国内市场仍然是Native卡占据主导地位,但在国外,Java智能卡已经广泛应用于用户身份识别、交通、数字内容发行、通讯以及金融等领域。下文将对Java Card技术进行详细的探讨,并着重分析Java Card技术在移动支付领域的潜在应用优势。
Java Card是基于Java语言的智能卡技术,在传统的智能卡平台上实现了一个Java程序安装和运行的软硬件环境,与传统的智能卡相比,Java智能卡具有以下的优点:
(1)平台无关性。符合Java Card规范的Java Card应用程序可以运行在不同的芯片设计或者不同制造商的智能卡上。
(2)多应用支持和动态性[2,3]。同一服务提供商或者不同服务提供商的多个应用可以安全地运行在同一张卡上,并且在片发行后,支持应用的动态下载、更新和删除,更具多用途性和灵活性。
(3)开放性和通用性。Java Card技术规范兼容ISO 7816、EMV等智能卡国际标准和GP(Global Platform)、ETSI(European Telecommunications Standards Institute)等工业规范。
(4)安全性[4]。既继承了Java语言的安全特性,又具备如事务、防火墙、字节码验证、分离的Java虚拟机等Java Card平台独有的安全特性,在Java Card 3平台中,安全性又得到了进一步的加强。
1.1 Java Card平台的系统结构
1.1.1 Java Card硬件系统
主要包括智能卡CPU与各种协处理器、存储器(ROM、RAM、EEPROM)和IO模块,硬件的各项指标需要符合ISO/IEC 7816国际标准。
1.1.2 Java Card片上操作系统
COS与智能卡硬件系统紧密耦合,不同的硬件平台COS差异很大,与一般意义的微机操作系统有很大区别,COS解决的基本问题包括:对外部通信命令的接收和处理、存储管理、平台硬件驱动管理等。
1.1.3 本地方法模块
本地方法模块由与硬件相关的语言编写,负责底层通信协议实现以及存储管理等硬件相关的功能,为上层应用使用硬件资源提供接口。
1.1.4 Java Card运行时环境
Java Card运行时环境(Java Card Runtime Environment,JCRE)由Java Card虚拟机(Java Card Virtual Machine,JCVM)、Java Card框架(Java Card Framework)、Java Card应用程序编程接口(Java Card API)、企业专用的扩展类库等模块构成。JCRE实际上等同于Java Card的操作系统,对卡内系统服务进行封装,对外提供统一的应用接口。
1.1.5 Java Card Applet
Applet是运行在Java Card平台上的小应用程序,为用户提供服务,JCRE通过AID(Application Identifier)识别并管理Applet,Applet的生命周期包括install、select、process、deselect和uninstall,如图1所示。
图1 Java智能卡的系统结构
Sun公司定义了一系列的Java Card技术规范,将Java技术应用于智能卡及其它可用资源有限(存储资源和计算能力)的设备。Java Card技术规范的最新版本是3.0.5,包括3部分:Java Card虚拟机规范、Java Card运行环境规范和Java Card API规范。Java Card 3平台包含两个不同的版本,分别是Classic版本和Connected版本,Classic版本是Java Card 2平台的改进版本,兼容Java Card 2平台,而Connected版本是面向高端智能卡应用的,如图2所示。
图2 Java Card 3平台的技术架构
2.1 JCRE规范
JCRE规范[5]由Java Card虚拟机、Java Card API(包括企业专用的扩展)和系统服务等组成。JCRE规范定义了Java Card虚拟机生命周期、Applet生命周期、Applet隔离和对象共享、事务和原子性、远程方法调用、API调用、Java虚拟机以及Applet的安装与卸载等相关内容。JCRE建立在底层硬件和片上操作系统之上,负责卡片资源的管理、网络通信、Applet的执行、卡内系统和Applet的安全,同时封装系统服务,对外提供与平台无关的接口。
2.2 JCVM规范
JCVM规范[6]定义了Java编程语言的子集和用于智能卡的Java虚拟机,包括二进制数据表示、文件格式以及JCVM指令集。Java Card平台的虚拟机实现分为两部分:卡外虚拟机和卡上虚拟机。卡上的Java虚拟机负责解释字节码、管理类和对象等工作。卡外虚拟机是一个开发工具,也称为Java Card转换器工具,负责加载、验证和准备Java类,为Applet在卡上运行做准备。JCVM使得用Java编写的应用程序可以运行在不同的智能卡平台上,实现了“一次编写,到处运行”。
2.3 Java Card API规范
Java Card API规范[7]定义了传统Java编程语言API的小型子集,甚至比J2ME的CLDC(Connected, Limited Device Configuration)子集还要小,除此之外,Java Card框架定义了Java Card平台的核心类以便专门支持Java Card开发。由于智能卡的存储资源和计算能力比较有限,所以Java Card并不支持Java的全部功能。
Java Card 3平台的Connected版本为高端智能卡开发提供高级功能,如多线程、并发、丰富的连接功能、支持ISO 7816-4协议的接触式和ISO 14443协议的非接触式高速IO。Connected版本中的Java虚拟机基于在智能手机中广泛使用的J2ME的CLDC(Connected Limited Device Configuration)虚拟机,具备更丰富的Java语言特性,能提供更安全的执行环境。
3.1 增强的Java虚拟机
Java Card 3平台的Connected版本增强了Java虚拟机的功能和性能,并且实现了部分了J2SE平台的最新功能。Connected版本支持多线程、卡上字节码验证、自动垃圾回收、更多的数据类型(Char、Long、String)、多维数组、基本的包装类(Boolean、Integer)、字符串操作类(StringTokenizer、StringBuffer、StringBuilder)、多线程支持类(Thread)、I/O类(Reader、Writer、Stream)、容器类(Vector、HashTable、Iterator)、日期时间使用类(Calendar、Date、TimeZone)、本地化和国际化支持类(Locale、ResourceBundle)等Classic版本不具备的特性[8]。而且还具备泛型、注解、断言、循环增强、可变参数、静态导入等J2SE技术的高级特性。
3.2 增强的编程模型
Java Card 3平台的Connected版本提供更接近主流Java编程环境的编程体验,支持如下的Web应用开发、持久化、多线程等新功能[9]:
(1)Web应用。Web应用由卡上的Web应用容器管理,Web应用通过HTTP或者HTTPS协议与卡外客户端通信,Web应用容器可并发处理HTTP请求。Java Card 3平台实现了servlet、filter、listener、静态资源(如html文件、图片)、Web应用程序部署描述符(Web Application Deployment Descriptor)等基本Web应用组件,融合了Web服务架构。
(2)扩展的Applet应用模型。Applet是扩展的Applet应用模型中处理APDU命令的组件,一个扩展的Applet应用可包含多个Applet。扩展的Applet应用由卡上Applet容器管理。与Classic版本的Applet应用模型不同,在扩展的Applet应用模型中,源码可包含多个类包,可以调用Connected版本的类库,可以多线程并发处理APDU命令。
(3)多线程。Java Card虚拟机支持应用的多线程和并发执行,并提供J2SE中的部分多线程API,前面提到的Web应用和扩展的Applet应用模型的以及异步的事件通知模型等都是多线程执行环境。
(4)持久化。存储空间分为易失性内存(如DRAM)和非易失性内存(如ROM、EEPROM和flash),分别存放生命周期短的瞬态对象和生命周期长的持久化对象,JCVM通过对象可达性分析策略控制瞬态对象向持久化对象转换。
(5)增强的事务。Connected版本的事务机制除了具备原子性、一致性和持久性等一般特性外,还支持并发事务、内嵌事务、注解事务等新特征。
(6)可重复的任务。允许Web应用和扩展的Applet应用在独立的线程中注册并运行周期性的任务,这些任务可在平台重启时自动重新执行。
(7)增强的内部应用间通信。除了原有的共享接口机制(Shareable Interface Mechanism)外,还包括基于共享接口对象的服务机制和事件通知机制两种扩展的应用间通信机制。
(8)丰富的网络通信功能。卡上的应用不仅可以为卡外客户端提供服务,还可以作为客户端访问网络服务。网络连接功能由通用连接框架(Generic Connection Framework)提供,支持TCP、UDP、TLS、HTTP、HTTPS协议,如图3所示。
图3 Java Card 3平台连接层及协议栈
Java Card技术是Sun公司通过与来自金融机构、通信运营商、智能卡制造商、半导体生产商、软件开发等智能卡行业相关领域的专家广泛合作,基于J2SE技术开发而来。Java Card平台已广泛应用于各个行业,经受了真实世界的安全考验。Java Card平台是唯一一个经过所有主要金融支付协会安全评估的平台,且通过了美国国防部和美国国家安全局这样的政府机构的安全评估并已实现兼容FIPS 140-1标准[10]。
4.1 Java编程语言的安全性
与其它专有的智能卡片上操作系统相比,Java Card技术具备面向对象、作用域管理机制、契约式编程、强类型、严格的Java字节码规范、不支持指针、数组边界检查、透明的内存分配和管理机制等一些Java语言的安全特性,这些特性体现了Java Card技术在编程语言层面的安全性。
4.2 Java Card平台的安全特性
JCRE通过以下一些重要的机制为Java Card平台上的应用运行和管理提供安全保护:
(1)事务和原子性。JCRE对程序的执行提供事务操作,对于一个事务中的多次数据更新操作,如果事务成功完成,则所有更新被执行,否则,所有更新被撤销。即使发生断电或程序错误,原子性也能确保数据完整性和状态一致性。
(2)Applet防火墙 。Java Card平台通过Applet防火墙为同一个智能卡上的Applet提供隔离的安全执行环境,Applet防火墙机制为Applet的执行提供了透明的私有内存,保护了Applet中的数据安全,Applet的执行错误或者恶意行为并不影响智能卡上的其它Applet,如图4所示。
图4 Java Card防火墙和数据共享
(3)代码隔离和包访问控制。通过类装载器委托机制,实现不同的命名空间,保证一个应用的代码不影响其它应用的代码,并且不被其它应用覆盖或者直接访问。此外还能防止系统类被用户代码覆盖,支持标准的Jar包封装机制,防止已加载的包被覆盖或者扩展。
(4)分离的Java虚拟机架构。Java Card平台的分离虚拟机架构是Java Card平台独有的,在保证安全的前提下,减少了下载到卡上的Applet大小和降低了卡上运行时环境对内存的要求。卡外虚拟机负责类的连接、引用解析、源码的转换和安全校验,卡上虚拟机负责Java字节码的解析执行。卡外虚拟机确保了Applet的可执行代码的格式正确性和数据完整性,卡上虚拟机保证了程序运行时的安全性。
(5)安全和加密类。Java Card平台的安全和加密包允许类似于J2SE的安全类加载器的应用程序管理,可实现Applet的安全下载和校验。安全和加密包支持对称密钥算法、非对称密钥算法、密钥接口、签名的生成和验证、信息摘要、随机数据生成以及PIN管理等。
(6)独立的应用命名空间。支持统一的命名机制(Unified Naming Scheme),对Java Card 3平台上的应用及其资源唯一命名,应用由URI(Uniform Resource Identifier)标识,应用的资源路径相对于应用的URI。独立的应用命名空间更利于多应用的安全发布与管理。
(7)完善的安全策略。Java Card平台支持基于权限和基于角色的安全策略,根据应用类型划分不同的安全域,支持多重的用户验证和授权,兼容如GlobalPlatform的卡应用管理框架。
(8)网络安全。通过安全通信协议(SSL、TLS、HTTPS)、加密服务和认证授权等方式保证实现点对点的安全通信。Web应用还可以指定专用的安全端口和特定的安全策略。
(9)可扩展的加密框架。Java Card 3平台的实现者为每种加密服务提供多种算法及实现,开发人员可以选择最合适的加密算法及实现,例如可以选择特定的提供者的加密算法实现。
在移动互联网时代,移动支付已经融入到人们生活的方方面面,Apple Pay的面世极大地推动了NFC移动支付的发展。随着移动支付行业的发展,更安全可靠、功能更丰富、使用更便捷的支付体验是随之而来的需求,如何整合多样化的服务,完善支付生态圈是移动支付服务提供者需要考虑的问题。我们可以考虑利用Java Card技术实现NFC移动支付,帮助提升支付服务的质量。
目前在NFC移动支付的实现方案中,一般由安全单元为用户信息和交易数据提供加密保护,安全单元通常内置于智能手机硬件平台中,应用起来不够灵活,可扩展性差,而且安全单元没有统一的开发规范,支付应用通用性差。我们可以考虑将安全单元集成到手机SIM卡上,并在SIM卡上运行Java Card平台,使传统的SIM卡成为一个Java智能卡,在提供常规的手机通信功能的同时,实现移动支付功能。基于可插拔的Java智能SIM卡的移动支付方案具备以下一些优势:
(1)灵活性好。SIM卡是手机可拆卸部分,可以自由地更换,降低了支付应用对具体手机平台的依赖,应用起来更灵活;可以在不更换手机的情况下,对支付应用的硬件进行升级;支付应用可在符合标准的不同Java智能卡平台中移植,通用性更强。
(2)安全性高。Java智能卡不仅具备一般智能卡的硬件层面的安全保护,而且还进一步在软件层面为支付应用的运行提供安全保护。Java Card平台的安全特性为支付应用的整个生命周期提供更多的保护,而且应用的易开发性好,能很好地适应移动支付领域的快速发展。
(3)更快的执行速度。Java Card平台的多线程和并发特点,可以提高移动支付应用处理任务的能力,可以在不影响响应时间的情况下,应用更复杂的加密算法,执行多重的认证,增强支付安全性。
(4)更丰富的网络通信功能。相比于传统SIM卡的OTA技术[11],Java智能卡支持加密通信、点对点通信,兼容成熟的Web技术,更能满足移动互联网时代对终端网络连接性的要求。除了通过移动终端的加密和认证保护支付流程,还可以通过网络连接云端服务器,进行动态的加密和多重认证,进一步提高支付操作的安全性。而且Java智能卡可直接进行点对点通信,无需借助移动终端,从而降低移动终端的安全漏洞对支付应用的威胁。
(5)动态管理。在发卡后,仍可通过网络对卡上的应用执行漏洞修复、更新升级等操作。使用过程中出现的问题和威胁可及时地报告云端服务器,由云端服务器进行分析并处理,以应对不断变化的安全挑战。
(6)多服务融合。不同服务提供商的应用可在通过授权和验证后安装到卡片上,支付应用可以为这些应用提供充值、缴费、支付等服务,在Java智能卡的安全环境中,搭建一个以支付功能为基础的多功能支付生态圈,促进多服务融合,打通线上线下支付领域,为用户提供更加智能、更加多样化的金融服务,如图5所示。
本文主要分析了Java Card的技术特点,并探讨了Java Card技术应用于NFC移动支付的潜在优势。在移动支付多服务融合、高安全性的发展趋势下,Java Card技术作为一项开放、安全的智能卡技术,应用于NFC移动支付,能发挥其在功能和性能方面的优势,为用户提供高质量的支付服务。本文对于Java Card技术的应用只是作了简要的分析,更具体的研究工作还有待深入。
图5 Java智能SIM卡应用示意图
[1] Raja Naeem Akram, Konstantinos Markantonakis. Smart cards: State-of-the-art to future directions[C]//IEEE International Symposium on Signal Processing and Information Technology, 2013:12-15.
[2] 董威. 多应用智能卡新技术研究[D]. 北京:北京邮电大学,2008.
[3] 柴洪峰. 智能卡多应用操作系统的发展趋势及研究[J]. 计算机应用与软件,2012,29(2):199-205.
[4] Mohammad R Eletriby, Mohamed Sobh, Ayman M, et al. High Performance Java Card Operating System[C]//2014 Eighth International Conference on Software Security and Reliability (SERE), 2014:30-39.
[5] Sun Microsystems, Inc.Specifications for the Java Card 3 Platform Version 3.0.5, Classic Edition[P]. 2015.
[6] Sun Microsystems, Inc. Java Card 3 Platform Virtual Machine Specification, Classic Edition Version 3.0.5[P]. 2015.
[7] Sun Microsystems, Inc. Java Card Platform Security White Paper[P]. 2001.
[8] Sun Microsystems, Inc. Java Card 3 Platform Virtual Machine Specification, Connected Edition Version 3.0.1[P]. 2009.
[9] Sun Microsystems, Inc. Java Card 3 Platform Runtime Environment Specification, Connected Edition Version 3.0.1[P]. 2009.
[10] Sun Microsystems, Inc. Java Card 3 Platform White paper[P]. 2008.
[11] 基于OTA技术的手机钱包的安全机制研究[D]. 成都:成都理工大学,2014.