白翠翠,夏春蕾,戴曙光
(上海理工大学光电信息与计算机工程学院,上海200093)
射频识别[1](以下简称RFID)技术(又称电子标签)是一项利用射频信号通过空间耦合(交变磁场或电磁场)实现无接触信息传递并通过所传递的信息达到识别的目的技术。与传统的条码或磁条识别技术相比,RFID技术具有非接触、精度高、作用距离远、可动态识别多个数据及应用环境适应性较好等优点,在工业自动化、仓储管理和门禁控制等众多领域得到广泛的应用与发展。
本文基于MF RC500设计了一种非接触式CPU卡读写器,该读写器能够对非接触式CPU卡进行物理层和协议层操作,该系统既可以在实际应用场合中作为通用CPU卡读写器使用也可以作为非接触式CPU卡的测试工具。
典型的RFID系统主要由阅读器、电子标签、RFID中间件和应用系统软件4部分构成,一般把中间件和应用软件统称为应用系统。RFID系统的工作原理[2]是:由阅读器通过发射天线发送特定频率的射频信号,当电子标签进入有效的工作区域时产生感应电流,从而获得能量被激活,使得电子标签将自身编码信息通过内置射频天线发送出去;阅读器的接收天线接收到从标签发送来的调制信号,经天线调节器传送到阅读器信号处理模块,经解调和解码后将有效信息送至后台主机系统进行相关处理;主机系统根据逻辑运算识别该标签的身份,针对不同设定做出相应的处理和控制,最终发出指令信号控制阅读器完成不同的读写任务。
CPU卡也称智能卡,卡内集成电路带有微处理CPU、存储单元(包括随机存储器RAM、电可擦除存储器E2PROM、程序存储器R0M)以及芯片操作系统(Chip Operating System,COS[3])。装有 COS 的CPU卡不仅具有数据存储功能,同时具有命令处理和数据安全保护等功能。CPU卡芯片相当于芯片内装置了一个微处理器,其功能大致与一台微型计算机相同。在生活中,人们常使用的集成电路卡(IC卡)上的金属片就是CPU芯片。由于CPU卡具有存储空间大、处理能力强、信息存储安全、支持一卡多用以及读取速度快等优点,已经被广泛用于金融、交警、保险和政府行业等诸多领域,并通过国家密码委和中国人民银行的认证。就外型而言,CPU卡与普通IC卡、射频卡无明显差别,但是使用性能、安全性却有巨大提升,这主要源于CPU卡内含有随机数发生器、3DES加码算法、硬件DES和3DES加密算法等,并配合操作系统就可以达到金融级别的安全等级。
MF RC500[4]是一款 13.56 MHz 的高集成度非接触读写芯片,集成了13.56 MHz下的各种被动式非接触通信方法和协议,支持ISO/IEC 14443A标准信号的预处理。其数据处理部分可处理符合ISO/IEC 14443协议的数据帧和错误检测(CRC和奇偶校验),支持快速CRYPTO1[5]加密算法,用于 Mifare经典产品的(如Mifare标准1 K和4 K产品)的安全认证。良好的并行接口可直接与各种8位微处理器相接,保证了读写器设计的高效便捷性。
非接触式CPU卡读写器硬件部分如图1所示。主要包括P89LPC932主控制器、MF RC500高集成度读写模块、电源模块、看门狗及复位电路、LED显示模块、蜂鸣器驱动模块、天线匹配电路和串口通信模块等。
图1 读写器硬件电路组成
系统的工作机制是:读卡器与PC成功建立通信时,蜂鸣器启动一次。PC机传达应用系统控制指令给MCU,微控制器接收到命令后根据指示通过SPI通信方式控制读写模块驱动天线对CPU卡进行相关操作,然后根据从卡中取得的数据控制发光二极管进行声光提示,同时MCU把用户数据或错误信息通过串行接口通信传给PC进行处理。
软件设计分为PC机端应用软件和读写器软件2部分,接口函数分为通用函数和命令函数2类。上位机软件实现的功能是:通过串行通信的方式向读写器发送命令,并等待读写器返回操作结果或读得的数据。读写器软件实现的功能是:等待上位机发送的命令,一旦上位机由命令发来,通过串口接收并识别该命令,然后根据不同的命令执行响应的操作,完成(或操作失败)后将操作结果或从IC卡读得的数据通过串口发送会上位机。
读写器程序用来响应上位机命令,完成对CPU卡的控制,然后将操作的结果或读的数据回送给上位机。使用 C51编制、模块化设计,主程序流程如下。
图2 读写器主程序流程图
主程序中的最后一步是一个反复循环,MCU在接收到一个来自上位机的命令,返回处理结果后,继续等待上位机发来的下一个命令并进行处理,如此不断循环。
智能卡操作系统包含了安全报文[5]传送的概念。安全报文传送的目的是保证数据的机密性、完整性和对发送方的验证,数据的机密性通过数据域的加密来得到保证。数据完整性和对发送方的认证通过使用报文鉴别码MAC[6]来实现。智能卡操作系统接受并处理来至读卡器的命令。CPU卡与终端之间使用命令与应答的通信机制,即终端把命令送到CPU卡,CPU卡接收并处理后发送响应给终端。这种机制包括2种应用协议数据单元(APDU):命令应用数据单元与响应应用数据单元。因此,读写器软件设计其实就是用程序实现这样的通信机制。
下面对此通信机制的2种应用协议数据单元进行阐述:
①命令APDU。命令APDU格式如表1所示。
表1 命令头格式
命令头的内容如表2所示。
表2 命令头内容
命令体中的各项是可选的。其中Data表示命令和响应中的数据域;Lc表示命令数据域中Data的长度。Le是期望中的应答APDU数据字段的最大字节数。当Le=0时,表示请求送回最大的应答数据字节数,如Le为1字节长度,则最大数据字节数为256。
②应答APDU。应答APDU由数据和状态字组成,格式如表3所示。
表3 应答APDU格式
其中,返回数据域是可选的,SW1和SW2是返回的状态字,即卡片执行命令的返回代码。如对命令的处理失败,则由SW1和SW2指明错误情况。
根据上述应用协议,在keil编译器下编写了如下应用协议数据单元信息交换函数:
∥接收命令,返回响应信息
上位机程序通过串行通信的方式向读写器发送命令并接收返回数据。上位机软件中与串行通讯有关的部分采Windows API函数中与串行通讯相关的函数编写。
4.3.1 函数类表
考虑到用户编制应用软件的需要,编写以下的C接口函数,如表4和表5所示,同时给出它们的功能描述和简单说明。
表4 通用函数
表5 专用函数
4.3.2 上位机测试程序设计
关于测试软件操作CPU卡的说明:对于用读写器操作CPU卡而言一般用2个命令就可以实现:第1个是CPU卡复位,这个命令是对CPU卡上电并得到卡片的初始信息,复位成功后就可以进行指令操作。指令操作是发送COS手册上的命令到CPU卡并从CPU卡获得返回信息。对于读写器而言,就是建立一个卡片和用户的通道。在通道上传输数据要根据自己卡片的COS手册、文件结构、密钥体系和要实现的功能来决定。
测试过程:发送数据,在命令数据空格输如:0084000008-取随机数指令(其他指令请参阅相应的COS手册)00A40000023f00-取主文件指令,点击“发送命令”,返回相应数据。
关键代码如下:
按上述思想设计的非接触式CPU卡读写器已经在上位机测试软件得到了验证,证明该方案是合理可行的。该系统提供了丰富的接口函数,用户可以编写专用的测试应用软件,满足不同的测试需求。在本设计方案上可以做模块级的扩充使功能和性能达到更高的要求,比如可以将RS232接口更换成USB2.0接口,使通讯速率大幅提高;可更换ARM7之类速度、功能更快更强大的处理器,不仅可以提高与IC卡的通信效率,控制功能也可以有所增强;可以添加7816模块将其升级为双界面读写器,丰富了系统的功能,避免了资源浪费。
[1]刘铮,章兢.非接触式IC卡中的射频识别技术[J].信息技术,2002(4):22-24.
[2]康东,石喜勤,李勇鹏.射频识别(RFID)核心技术与典型应用开发案例[M].北京:人民邮电出版社,2008.
[3]车平跃.智能卡操作系统内核的研究与实现[D].北京:北京邮电大学,2010.
[4]PHILIPS Seniconductors.Mifare MF RC 500 Highly Integrated ISO 14443A Reader IC[R],January 2001.
[5]International Standard ISO/IEC 7816, Identification cards.Integrated Circuit(s)cards with contacts,Part 4:Interindustry Commands for Interchange[S],1997.
[6]张之津,李胜广,薛艺泽.智能卡安全与设计[M].北京:清华大学出版社,2010.
[7]高守传,聂云铭,郑静.Visual C++6.0开发指南[M].北京:人民邮电出版社,2007.