基于智能卡的电子钱包及电子存折的设计与实现
2017-06-12张文友田云
张文友++田云
摘 要: 针对电子钱包及电子存折的实际应用,基于智能卡,利用Java Card技术对卡片文件结构、交易流程、交易命令、写卡片E2PROM位置及次数等多个优化点实施优化方案,提升电子钱包及电子存折卡片的交易速度。通过行业应用开通文件的添加及复合消费的设计,实现了金融与多行业应用结合的智能卡电子钱包及电子存折应用。在Java Card应用程序体系结构卡片端完成电子钱包及电子存折应用程序的设计、开发及测试。测试结果证明,该电子钱包及电子存折在投入市场前的性能、功能等检测项均符合国家银行卡检测中心及住建部检测要求。
关键词: 智能卡; Java Card技术; 电子钱包; 电子存折; 安全性
中图分类号: TN919?34; TP393 文献标识码: A 文章编号: 1004?373X(2017)11?0142?05
Design and implementation of electronic purse and electronic deposit based on smart card
ZHANG Wenyou1, TIAN Yun2
(1. Center of Modern Science and Technology, Chengde Radio and Television University, Chengde 067000, China;
2. Department of Computer, Xinzhou Teachers University, Xinzhou 034000, China)
Abstract: Aiming at the practical application of electronic purse and electronic deposit, the optimization scheme was implemented on the basis of smart card for the card file structure, transaction process, transaction command, E2PROM location of writing card, times and other optimization points by means Java Card technology, which can enhance the transaction speed of electronic purse and electronic deposit. The open file industry application was added and the composite consumption was designed to realize the application of electronic purse and electronic deposit based on intelligent card combining finance and various industries. The application program of electronic purse and electronic deposit was designed, developed and tested in the card terminal of the Java Card application architecture. The test results show that the performance, function and detection items of the electronic purse and electronic deposit before applying to market conform to the detection requirement of National Bank Card Test Center, and Ministry of Housing and Urban?Rural Development.
Keywords: smart card; Java Card technology; electronic purse; electronic deposit; security
0 引 言
磁条卡的发行和普及为使用者带来了诸多便利[1],然而近年来的“盗卡”和卡片“克隆”事件却引发了人们的强烈质疑。针对这一问题,三大国际卡组织制定了新的技术标准即智能卡,以解决银行卡从磁条卡向智能卡迁移的问题。智能卡采用新型智能卡技术,以Java卡为代表的多应用智能卡平台不仅继承了智能卡的诸多优势,更结合了Java语言本身跨平台、可移植等众多特点,较磁条卡而言,在安全性、可靠性、灵活性、高效性、耐用性等诸多方面,智能卡具有明显的优势[2]。电子钱包及电子存折(Electronic Purse And Electronic Deposit,EDEP)作为一种重要的智能卡应用,它的成功实行使智能卡被寄予厚望。因此,对电子钱包及电子存折的研究在方便人们日常生活、减少社会上的现金流通、提升各大银行的整体收益、加快国内外EMV迁移速度等方面都有着现实意义。
1 系统需求分析
根据Java Card应用程序体系结构,本系统从物理结构上可分为三层:系统后端、读取端和卡片端,系统总体结构如图1所示。系统后端主要是银行后台应用系统;读取端由读取端主應用程序及卡片接收设备组成;卡片端包括卡片管理的应用程序(电子钱包及电子存折应用或其他行业应用程序)和支持应用程序的运行环境[3](COS,Java Card虚拟机以及相应的Java Card Framework和API)。其中COS是卡片操作系统的简称;API是应用程序编程接口的简称。
对于本系统而言,卡片端COS的主要功能包括控制卡片与外界的信息交换、管理卡内存储器及在卡片内部完成各种命令的处理[4]。通常,COS要实现与外部信息交换,需要通信管理模块、命令管理模块、安全管理模块及文件管理模块的协作处理。外部信息通过通信管理模块进入COS之后,首先由命令解析模块进行处理,对输入信息内容的可执行性进行判断;其次,如果需要进行安全检查,则交给安全管理模块对它进行信息合法性的检查;最后,COS根据检查结果,凭借其合法且有效的信息,通知文件管理模块对E2PROM执行相应的操作。
电子钱包及电子存折卡片在投入市场使用之前,需要根据实际需求建立相关文件,并在不同文件下写入对应数据[5]。只有完成了个人化,卡片才能进行正常交易。卡片中文件的建立和数据的写入主要依赖于个人化命令及文件结构的设计与实现[6]。本系统卡片端电子钱包及电子存折应用个人化流程,如图2所示。
本系统研究的电子钱包及电子存折应用的核心是在个人化模块及应用维护模块的辅助下实现交易模块的各项交易功能。因为对电子钱包和电子存折而言,相同交易类型的交易流程相同,因此整合电子钱包及電子存折的所有交易类型发现本系统主要的交易流程可包括:交易预处理流程、圈存交易流程、圈提交易流程、取现交易流程、消费交易流程、修改透支限额交易流程、查询余额交易流程、查询交易明细流程以及复合消费交易流程。
应用维护模块的主要功能是协助持卡人对卡片的正常使用进行管理与维护[7]。包括文件数据维护、PIN(个人识别码)维护、卡片应用状态维护、内外认证维护四大功能块。
(1) 持卡人在卡片的使用过程中可通过个人化合法终端向卡片发送记录读、写、更新命令,卡片应用程序对其处理,实现记录数据的读取、写入和更新。
(2) 持卡人也可根据自身需求,修改或重新设置个人码。终端通过向卡片发送PIN修改或重装命令,卡片应用程序对其处理,实现PIN修改或重装。
(3) 持卡人在使用卡片的过程中,如果卡片存在多次与终端进行相互认证时发生错误,卡片上应用程序也会自动锁定当前应用,实现卡片的自锁定,对持卡人信息进行保护。
(4) 内部认证和外部认证都是出于卡片应用安全性考量的辅助功能。本系统通过主控密钥的外部认证来设置应用的后续状态,从而判定持卡人是否具有某种操作的权限。
2 系统设计
2.1 文件结构设计
根据卡片文件逻辑组织结构分析,卡片端电子钱包及电子存折应用可设计为ADFEF=1模式,其中,所对应的ADF文件(EDEP应用文件)应包含文件控制信息(FCI),通过该专用ADF文件可以对树形结构下的EF文件进行访问。本系统电子钱包及电子存折应用卡片内部文件组织结构设计如图3所示。
根据卡片文件结构设计,本系统应用文件的初步实现方案拟为:设计EF文件为一个类,类中包含文件头及文件体。每个类对象通过链表连接,查找时从链表头开始找。对于文件的操作全部放在类中实现,如读写记录和二进制等。
本系统电子钱包及电子存折应用为ADFEF=1模式,本系统电子钱包及电子存折应用卡片内部文件结构设计包括二进制公共应用基本数据文件(短文件标识符SFI:0015)、二进制持卡人基本数据文件(短文件标识符SFI:0016)、循环记录交易明细文件(短文件标识符SFI:0018)、变长记录复合应用扩展文件(短文件标识符SFI:0017)、循环记录复合应用交易明细文件(短文件标识符SFI:0010)以及定长记录密钥文件(短文件标识符 SFI:0000)。短文件标识符是用来象征文件的2 B的符号标识,可通过此标识对文件进行操作和访问。
2.2 应用命令设计
根据本系统总体结构可知,读取端卡片接收设备与卡片的通信是基于特定协议,通过应用协议数据单元(APDU)的传输和交换来实现。智能卡接收来自卡片接收设备中的APDU命令,并将其传送给相应的Java Card Applet。Applet接收传入APDU命令,内部完成分析处理,然后返回一个响应APDU命令。
通过分析设计,本系统卡片端电子钱包及电子存折应用的命令主要包括三部分:个人化命令、基本命令及交易命令。因为卡片和读写器之间的通信是通过应用数据单元(APDU)进行传输,所以各项命令的设计必须符合应用数据单元的固有格式。其中,系统的个人化命令主要包括下列7条专用命令:CREATE FILE命令、WRITE KEY命令、INITIALIZE UPDATE命令、PERSONAL AUTHENTICA TE命令、Install[for Install]命令、APPEND RECORD命令以及DELETE命令。
根据PBOC 2.0规范第1部分及互联互通规范中基本命令描述,本系统电子钱包及电子存折应用基本命令设计,如表1所示。
另外,根据PBOC 2.0规范及互联互通规范交易命令的描述,系统还设计了电子钱包及电子存折的应用交易命令。
2.3 应用类设计
本系统出于电子钱包及电子存折应用的扩展性、安全性和高效性的角度对核心类进行拆分,设计了三个主要的用户自定义类:EDEP类、ClassFileEF类和Constants类。
ClassFileEF类中定义了与文件相关的所有属性,有利于提高系统应用交易和文件查找的性能。Constants类主要用于预定义整个应用开发中需要自定义完成的常量,负责对应用中的常量数据进行统一管理,EDEP类继承Javacard.framework.Applet抽象类,系统的个人化模块、交易模块以及应用维护模块的实现都依赖于EDEP类的设计和实现。
系统类与类之间主要存在依赖和泛化关系。对于APDU,ISO7816,Applet,ISOException,JCSystem,Util,DESKey,KeyBuilder,RandomData,Signature,Cipher等来自Java Card API类库的系统类,可被EDEP,ClassFileEF,Constants等用户自定义类import对应包直接引用。
3 系统实现
通过前期对电子钱包及电子存折应用的功能需求分析、交易流程分析以及对卡片文件结构、应用命令、相关类的设计,在选择了开发过程中会使用的相关技术后,开始启动程序的开发。
ClassFileEF类成员变量和成员方法主要用于EF文件的建立、EF链表中的文件查找和文件内容的读写,对于要求读写权限的文件而言,首先需要通过方法getKey()获取相关密钥,通过外部认证取得文件操作权限。再通过方法API_FindEFByFID()或API_FindEFbySFI()实现文件查找。当用户需要读取相关文件下对应记录时,通过文件查找方法选择对应文件,确保当前文件层次后,可通过方法AppendRecord(),readRecord()和getRecord()对相关记录进行操作。当然,以上操作的前提必须是在该类构造器方法ClassFileEF()中完成相应变量的初始化后进行。
EDEP类是整个应用开发的核心。在具体的实现过程中重写了父类Applet中的install()方法和process()方法。当JCRE接收到安装命令之后,调用EDEP的install()方法,通过一个新的EDEP对象完成对象的初始化,并调用register()方法完成注冊,告诉JCRE实例已成功安装,并可以对这个应用进行选择或执行其他命令,此时卡片的生命周期进入被选择状态,当JCRE接收到选择命令之后,调用EDEP的process()方法,通过此方法完成业务以及命令分支处理。在命令分支处理之前,程序首先得判断一下卡片和应用的锁定情况,如果出现异常,则根据具体接收命令的INS返回不同的状态码。在卡片和锁定检查中没有抛出异常后,程序继续执行命令分支处理。本系统通过switch?case语句完成命令的分支和相应功能的选择调用。根据命令设计部分,程序用22个分支完成了process()方法的实现。并且为了提高代码的重用性,不同case语句调用的命令处理方法仅处理其私有业务,对于公共业务的处理则通过再调用通用功能方法的方式实现。
个人化模块实现主要依赖于ClassFileEF类和EDEP类。交易模块的实现紧紧依赖于 EDEP类的实现, 交易功能的实现主要是通过EDEP 类中与交易相关的成员方法之间的互相调用完成。应用维护模块主要负责电子钱包和电子存折中不涉及资金划转的其他维护类功能。文件数据维护、PIN(个人识别码)维护、卡片应用状态维护及内外认证维护功能的实现是保障卡片进行正常交易的前提。其中,应用维护模块的实现也主要依赖于EDEP类的实现,其中各项功能的实现同样是通过EDEP类中相关成员方法的互相调用来完成。
4 系统测试
本系统借助专用测试工具TestCard编写相关测试脚本对系统应用进行测试。首先,对于本系统电子钱包及电子存折应用而言,需要将编译后工程目录bin文件夹中的class文件转换成CommonCap.cap和EDEP.cap两个cap文件。通过上述cap包的转换工作,生成一个可以下载并同时安装进智能卡的特定cap文件。在安装和下载之前,必须通过平台的GP或者VGP认证,保障安装的cap文件的合法性[8]。成功执行上述步骤后,开始进行各项测试。
为了保证系统应用的质量,本系统在系统测试环节严格执行测试方案的撰写。按照电子钱包及电子存折应用的技术规范要求,本系统应用测试内容如表2所示。
系统严格按照测试方案对电子钱包及电子存折应用进行全面的系统测试。应用最具参考价值的复合消费交易进行分析,通过图表方式对其功能及性能的测试结果进行简要说明。
(1) 复合消费功能测试
对Java Card应用功能测试而言,首先需要完成卡片的个人化,即发卡。个人化操作主要是通过私有个人化命令建立应用的文件结构,并通过数据写入命令完成对应文件下相关数据的写入。本系统的个人化脚本通过文件正常测试后建立,个人化脚本编写完成后改动通常不会很大,其他功能测试脚本可通过脚本语言直接对其调用。按照复合消费流程编写正常及异常复合消费测试脚本后,利用测试工具进行功能测试。本文选择一异地复合消费交易测试脚本进行测试,复合消费测试结果如图4所示。对于本系统测试工具,“√”代表测试通过。
(2) 复合消费性能测试
通过对复合消费各命令执行时间的统计可知,本系统电子钱包及电子存折应用复合消费性能数据约为230 ms,各命令执行时间如表3所示。
相对于检测机构300 ms的检测指标而言,本系统性能数据远远超出,这也证实了本系统应用在文件结构、命令、交易流程等多项可优化点的设计及实现方案是成功的。
5 结 论
本文基于智能卡,利用Java Card技术,侧重于应用扩展性、安全性和高效性的角度在Java Card应用程序体系结构卡片端完成电子钱包及电子存折应用程序的设计、开发及测试。通过行业应用开通文件的添加及复合消费的设计,实现了金融与多行业应用结合的智能卡电子钱包及电子存折应用。在安全性方面,该应用通过国际DES和国密SM双重加密算法来保障电子钱包及电子存折卡片的安全性。另外,通过对卡片文件结构、交易流程、交易命令、写卡片E2PROM位置等进行优化,实现了设计要求,提升了电子钱包及电子存折卡片的交易速度。
参考文献
[1] 中国人民银行.JR/T 0025.1?2010 中国金融集成电路(IC)卡规范第1部分:电子钱包/电子存折应用卡片规范[S].北京:中国人民银行,2010.
[2] 王飞宇,李翔宇,乌力吉,等.接触式智能卡的嵌入式系统攻击平台设计[J].计算机测量与控制,2012,20(9):2513?2515.
[3] 夏文栋,林凯.融合NFC的3G智能卡系统[J].计算机工程,2011,37(2):229?231.
[4] 乌力吉,李贺鑫,任燕婷,等.智能卡功耗分析平台设计与实现[J].清华大学学报(自然科学版),2012(10):1409?1414.
[5] 胡先智,梁艳.电子钱包支付系统设计与应用[J].信息与电脑,2011(9):64.
[6] 陶勇刚.电子钱包的安全管理方法及服务终端、电子钱包系统:中国,CN103188212A[P].2013?07?03.
[7] 周媛媛.银行IC智能卡密钥管理系统的设计与实现[D].大连:大连理工大学,2012.
[8] 姬闻起.改进的Java智能卡联合攻击防御方法研究与实现[D].武汉:华中科技大学,2013.