PBOC2.0新型金融IC卡读卡器的设计与开发
扫描二维码
随时随地手机看文章
摘要:为解决传统读卡器功能单一、不能独立完成金融交易的问题,选择超低功耗而且价格低廉的单片机完成硬件平台的设计;并在芯片内部编程实现金融交易,开发出一套功能丰富、成本低、使用便利的金融IC卡读卡器产品。超低功耗读卡器采用USB接口通信,在读卡器内部实现金融交易能很好地提升金融交易的安全性,同时提高了金融应用开发的工作效率和硬件资源的利用率。
关键词:PBOC2.0规范;金融IC卡;金融交易;MSP430F5510;模块化设计
引言
PBOC2.0规范是国内金融IC卡产业的基础性规范,内容丰富,可以满足我国银行卡应对国际IC卡迁移的需要。它既满足国内银行卡高安全和多应用的实际需求,也为跨行业合作提供了良好的基础架构。银行磁条卡存储空间小、无运算能力,而金融IC卡具备多应用加载的平台,可丰富银行卡产品系列,成为商业银行业务创新的重要技术手段。
在PBOC2.0规范指导下的金融IC卡的发展为金融IC卡读卡器的发展了带来了机遇,设计和开发使用方便、效率高和有着高可移植性的新型金融IC卡读卡器必将促进国家金融IC的应用发展。
1 硬件设计
在读卡器MCU的选择上,为减少读卡器的功耗,并降低器件上的成本,选择TI公司的超低功耗单片机MSP430F5510。其提供的丰富外设I/O接口使读卡器实现各种功能,并自带全速USB2.0(12 Mbps)特性,也方便了USB接口开发及HID通信协议的实现。MSP430F5510引脚图如图1所示。
MCU选择RGZ48PIN的封装形式,使得读卡器设计小巧,48引脚能为开发提供足够的I/O口。高频率晶振XT2IN引脚外接4 MHz晶振,能为IC卡提供稳定的时钟源。
1.1 MCU与IC卡座接口设计
MCU与IC卡卡座的接口电路如图2所示。IC卡座的V_IC与电源模块的输入引脚相连,IC_CLK与MCU的高频晶振(XT2IN)相连,为IC卡工作提供稳定的时钟源。IC卡数据的输入/输出通过IC_IO与MCU的I/O口进行连接,MCU通过I/O口控制与IC卡的数据交互,并通过IC_DET检测IC卡的插入和拔出,通过Reset引脚对IC卡进行复位。
1.2 MCU与USB接口设计
USB接口与MCU的接口电路如图3所示。
USB接口的电源通过二极管D1接到MCU的电源供电部分,为MCU的正常工作提供电源。USB的Data+、Data-引脚分别接MCU的DP、DM引脚,MCU上的PUR引脚与DP引脚间接一个1.4 kΩ上拉电阻,完成MCU的两个引脚DP和DM差分信号的输入。
2 软件设计与开发
读卡器内部软件主要由3部分组成,分别为ISO7816协议的实现、USB接口协议HID的实现、金融交易在读卡器内部的实现。ISO7816协议的实现主要参考ISO7816规范,详细的实现过程这里不再详细叙述。由于MSP430F5510自带全速USB2.0(12Mbps),可参照HID协议完成底层固件HID协议的开发。下面详细叙述金融交易在读卡器内部的实现。
为使得软件开发具有条理性,考虑将金融交易部划分为以下4个模块:指令功能模块、安全认证模块、协助功能模块、独立交易功能模块。各模块之间可以相互辅助,实现金融交易的功能。
2.1 指令功能模块
这个模块也可以称为基础功能模块,设计此模块能解决从PBOC2.0规范中抽象出各金融IC卡指令的问题。在模块内部实现PBOC2.0规范中所述的交易指令:选择、读记录、取数据对象、应用初始化、应用锁定、应用解锁、外部认证、生成应用密文、内部认证、PIN修改/解锁、设置数据、修改记录、验证。
这些指令的实现能方便具体交易的调用,使得其他模块不再具体考虑指令调用的细节。
2.2 安全认证模块
此模块的设计可解决交易过程中涉及到的安全认证,单片机内部可以实现RSA算法、3DES算法、哈希算法SHA-1。针对完成PBOC2.0规范中的脱机数据认证,软实现各种安全认证算法能很好地节省硬件成本,使得开发具有相对的独立性。
2.3 协助功能模块
协助功能模块可作为工具模块,为其他模块提供服务。在模块内部实现对IC卡指令返回的数据的解析、PDOL(处理选项数据对象列表)、DDOL(动态数据认证数据对象列表)、CDOL(卡片风险管理数据对象列表)等数据对象的组包。
IC卡指令返回的数据实质上就是一个有格式的长字符串,这个字符串数据都有相应的模板格式,但不同的指令返回的数据模板不同。而且模板中包含的TLV(Tag、Length、Value)数据结构也各不相同,模板中还可能再包含模板。对于模板中有单一TLV数据结构不带模块结构的数据,可以通过先解析Tag,接着解析长度,再解析数据内容的方式,取得某个Tag对应的Value值。即便是一个字符串由多个TLV结构的数据对象组成,这种方法也可以完成对TLV结构的解析以及对单个Tag对应值的确定。
但是对于有多个模块结构的数据对象进行解析时,就需要先解析模板,确定该TLV的数据对象在哪个模板中,然后从长数据串中截取出这个模板对应的数据,然后再在这个模板中进行TLV数据的解析。
具体在设计中,采用如上所述的分析方法实现两种不同的TLV解析功能,一种可以直接解析只有TLV结构字符串的函数;另外一种则可以针对有多个模板的字符串进行解析。
2.4 独立交易功能模块
在上面三个功能模块的基础上实现金融交易,这里主要设计实现了以下金融交易:读取IC 卡信息、读取IC交易日志、写卡脚本、生成ARQC(授权应用密文)、ECC(电子现金)交易。下面详述各交易的实现。
2.4.1 读取IC卡信息
读取IC卡信息,可借助指令功能模块中的选择指令选择IC卡应用个人化环境(PSE),然后利用协助功能模块的解析函数,解析出卡片中的应用标识符AID,再通过选择指令选择AID,解析出PDOL(处理选项数据对象列表)。PDOL实质上是一个模板,表明了处理选项数据对象中应当包含哪些数据对象。解析出 PDOL,利用上述协助功能模块中的组PDOL对象功能函数便可以形成处理选项数据对象。在应用初始化指令中将这个数据对象发送给卡片,卡片接收到后,会根据处理选项数据对象作出交易的判断,在返回的数据中带回来交易中需要读取的交易记录,然后根据卡片返回到AFL(应用文件定位器)。遍历读取相应的记录、解析相应的记录,就可以找到需要的IC卡个人信息。
以上方法不是唯一读取IC卡的方法,对于常用持卡人信息的读取,也可以选择读取IC卡前两几条记录,从中分析得到IC卡持卡人的个人信息。这种方法读取速度快,但是对于持卡人信息不在前几条记录中的卡片,则会发牛读取不到信息的错误。为避免此种错误的发生,设计中采用如上遍历读取记录的方法。
2.4.2 读取IC卡交易日志
金融IC卡对于圈存、ECC交易,在卡片中会有相应的日志记录。IC卡交易日志以文件的形式保存在IC中,最多能保存十条交易日志,而且第一条是最近的交易日志。在交易过程中通过读IC卡日志能判断出最近几笔交易的详细情况,交易日志的读取通过指令模块中的Select指令选取PSE,然后解析出 AID。选择AID后,解析出日志入口标签的值,从而找到日志对应的SFL(短文件标识符)以及交易日志中的记录个数。逐条读取SFL下的记录,就可以得到完整的交易日志。然后再使用Get Data指令读取日志格式标签的值,便可以对照日志格式解析交易日志,得出每笔交易的详细信息。
以上为最全面的IC日志读取方法,在实现中为节省程序运行时间,一般在选择AID后直接读取SFL为0x0B,在该文件下从第1条记录读取到第10条记录。这种方法也能将交易日志完整的读取出来,而且还节省了时间。读卡器在内部实现中采用了这种方法。
2.4.3 写卡脚本
卡片脚本是发卡行对卡片进行认证过后,认为此卡片为合法卡片后,返回的可以修改IC卡记录内容的命令。写卡脚本命令执行之前首先需要对发卡行返回的密文数据进行外部认证,实质上是卡片在验证发卡行的真伪。发卡行验证通过,便可以通过产生密文指令向卡片发送表示允许进行交易,卡片收到后会产生允许交易的密文,产生TC(交易证书)。TC需要保存,结算的时候或者联机中在脚本执行结果中返回给服务器,TL值的产生,说明了卡片承认了这笔交易,服务器清算的时候验证TC证书。如果TC证书验证通过,后台服务就会把这笔消费人账。由于产生密文的指令可以产生3种应用密文形式,分别为:TC、ARQC(授权请求密文)、AAC(应用认证密文),在产生密文的指令中需要指明为产生TC的指令,而且需要组建CDOL2(卡片风险管理数据对象列表2)的数据。CDOL2的结构同PDOL结构,会指定卡片风险管理数据对象需要哪些数据元,CDOL2在读记录中读取,利用协助功能模板组建CDOL2对象数据。卡片接收产生应用密文指令后,如果返回正确,则可以顺利执行写卡指令,写卡指令执行正确后,整个交易结束。此时如果交易正常,在IC卡的交易日志中应能查到最近的这次交易。
2.4.4 生成ARQC
ARQC(授权应用密文)在交易中有长片产生的一种密文,这个密文送到后台服务器,后台服务器会通过验证这个应用密文的正确与否来确定IC卡的真伪。ARQC通过发送产生应用密文来得到,在产生应用密文的指令中,密文类型要选择为ARQC,通过读记录、解析记录、组建CDOL1(风险管理数据对象列表1)得到风险管理数据对象1。卡片接收指令后,会返回所需的ARQC。应用密文指令发送之前需要去完成选择PSE、选择AID、应用初始化和读记录的工作。
2.4.5 ECC交易
ECC(电子现金)交易是接触式IC卡的一种脱机消费方式。由于交易是在脱机的情况下进行的,所以交易中不涉及联机的认证过程。在选择PSE、选择AID后的GPO(应用初始化)指令中,利用PDOL指明支持电子现金,然后再读取需要的IC卡记录,得到相关的认证数据,包括IC卡公钥证书、发卡行公钥证书、认证中心公钥索引、发卡行公钥余项、IC卡公钥余项、IC卡公钥指数、发卡行公钥指数。记录读取完毕后,需要先进行DDA(动态数据认证)认证,通过后再发送产生应用密文(产生TC)的指令,指令执行正确后再发送外部认证指令。指令执行正确,交易则开始对相关交易数据的保存以及终端风险管理进行处理。以上任何一条指令执行中如果发生错误,交易即终止。
结语
本文在超低功耗单片机MSP430F5510的基础上设计和实现了一款功能丰富的IC卡读卡器。利用MSF430F5510自带的全速USB硬件资源实现了HID协议,使得读卡器可以实现无驱动的使用,方便了读卡器的使用。金融交易在芯片内部的实现,也可以使得这款读卡器能作为其他产品的一个模块,因为其内部实现了相应的RSA算法、3DES算法、哈希算法SHA-1,同时也实现了牛成ARQC、写卡、读取IC卡信息、读交易口志、ECC交易。这些交融交易在读卡器内部的实现,能减少外部应用对金融交易的重复开发,节省资源,同时也大大提高了工作效率。此款读卡器往实际的应用中有很好的使用效果。