应用笔记 4120

DS8007在智能卡交易中的应用


摘要 : 本应用笔记介绍了一个用DS8007接口器件和DS5002安全微控制器设计的智能卡支付终端实例。DS8007评估(EV)套件和所提供的C源代码可实现基本的智能卡存款、取款和卡的初始化功能。

概述

本应用笔记介绍了一个基于DS8007多协议双智能卡接口芯片和DS5002安全微控制器的智能卡支付交易系统。该系统可实现基本的智能卡存款、取款交易以及卡的初始化功能。虽然系统没有进行任何与"实际"支付交易系统有关的安全测试,但这里演示的功能对于此类系统极具代表性。

演示中使用的硬件是DS8007评估(EV)板。该评估套件提供了一个方便的、经过验证的平台,用于测试基于DS8007器件的智能卡操作。评估板包括:作为主处理器的DS5002安全微控制器、一个2行20字符的液晶显示(LCD)模块、两个智能卡插槽(分别为信用卡尺寸和SIM尺寸)。此外还提供一个DB-9连接器,用于通过RS-232串行接口传输信号。使用本公司的微控制器工具包(MTK)软件(下载),用户可将PC与RS-232口连接下载程序或数据文件,也可以与应用系统通信。评估板还包括512k x 8的电池备份SRAM,用于存储程序和数据信息。DS5002安全处理器为电池备份的SRAM提供电源检测和控制电路。

开发该应用系统使用的软件工具集是Keil公司的PK51专业开发工具套件,包括µVision3®集成开发环境(IDE)和CX51 ANSI C编译器。PK51包提供汇编器、连接器、仿真器和调试器的完整开发环境。它生成的十六进制文件可使用MTK软件直接从PC下载到DS8007评估板。

应用实例

本应用笔记提供的交易功能可看作是应用笔记4036: 利用DS8007评估套件进行设计中描述的低层功能之上的附加层。

本交易实例可执行和正确管理应用协议数据单元(APDU)的发送和接收。APDU由ACOS3智能卡EMV规范定义。通过生成和发送适当的APDU并处理其可能的响应,可演示典型的支付交易操作。

用于本应用系统的C语言源代码可提供下载,文件名为AN4120_SW.zip。前面提到的应用笔记4036中的代码是这些交易实例的核心,它提供DS8007的所有基本接口/驱动函数和所有直接的低层智能卡接口函数。AN4036中的代码也在相同的网址提供下载,文件名为AN4036_SW.zip。

交易实例详述

为创建一组有代表性的交易功能,本实例实现了三种主要的智能卡操作。
  1. 取款交易,即扣除信用卡余额
  2. 存款交易,即增加信用卡余额
  3. 信用卡初始化交易,将信用卡余额和交易次数设定为初始值
卡中初始金额为$100.00,初始交易次数在初始化交易过程中被设定为1。为简化实例,每次存款、取款交易都固定在信用卡余额中增加或扣除$10.00。

为了提供一个合理的演示,首先要考虑的是如何利用DS8007评估板上的资源建立一个用户接口。由于设计目标之一是无需借助其它设备就能单机运行,因此评估板上的RS-232串口不能作为用户接口。最方便作为用户输入接口的硬件是开关SW4,当该开关按下时,会将处理器的端口引脚P3.2下拉至地电平。P3.2是一个多功能端口引脚,还可用作外部中断输入(INT0)。但是本应用实例软件中不使能该中断,因此,引脚P3.2通常由处理器的引脚驱动电路上拉到高电平,按下开关SW4时通过一个1kΩ电阻拉至低电平。应用系统可简单通过读取该引脚的电平检测开关是否闭合。

板载LCD模块可作为用户接口的输出器件。DS8007评估板的LCD模块是一个2行20字符的显示器。它包含液晶驱动电路,并为处理器提供8位并行接口。通过向模块写入必要的控制和字符就可进行显示操作,由模块管理实际的LCD。

用户完成一次输入,软件就以重复顺序在LCD上显示三种可能的交易类型供用户选择。按下开关SW4时,软件执行选中的交易。

智能卡详述

本应用实例中选用的智能卡是香港Advanced Card Systems Limited (ACS)公司生产的ACOS3卡。该卡内含嵌入式处理器,运行ACS智能卡操作系统版本3 (ACOS3)的操作系统,具有如下特性:
  • 16kB应用数据EEPROM存储器
  • 符合ISO 7816-1/2/3标准,T = 0协议
  • 兼容数字加密标准(DES)、3DES和信息验证能力(MAC)
  • 5个安全码 + 发行密码
  • 卡持有者可更新PIN码
  • 密钥对相互验证
  • 会话密钥采用随机数字
  • 线性文件具有固定的记录长度
  • 帐户数据结构可实现安全支付应用系统
ACOS3性能的全部说明可在ACS网站上找到。对于本应用实例,没有使用智能卡的任何安全功能,只使用其文件结构和EEPROM存储空间。

智能卡存储空间

本交易实例中,选用的智能卡必须包含一定的非易失存储器空间,用于保存信息。仅有两个数值保存在卡中:记录成功处理的交易次数的"计数器"和虚拟帐户的"余额"。对于该计数器,选用1个字节的无符号数,它可表示0至255次交易数。对于余额,选用16位整数,可表示数值-32,768至+32,767。这种方式允许用户透支卡中的可用余额(即产生负的余额)。因此,本实例中总共需要3个字节的非易失存储器。

ACOS3的文件结构

制造ACOS3卡时,其16kB EEPROM存储器划分成内部数据存储区和用户数据存数区两部分。内部数据存储区保存配置数据,通常被操作系统用于管理特定的功能。用户数据存储区保存"实际"交易控制下正常使用智能卡的操作数据。在本实例代码中,只使用内部数据存储区,后续讨论中将重点关注内部数据存储区。

不论是内部数据存储区还是用户数据存储区,访问ACOS3卡的存储器都要通过数据文件和数据记录进行。每个数据文件都由一定数量的数据记录组成,最多可达255个。不同数据文件的记录长度可以不同,但对于给定的数据文件其记录长度总是固定的。内部数据文件的文件结构(文件大小、记录长度等)由操作系统定义且不能更改,但对于用户数据存储区,可由卡发行人在进行个性化智能卡设置时确定其文件结构。为简单起见,只使用卡中已有的内部数据文件系统,不再生成一个专门的用户数据文件系统。

所有文件都可通过ACOS3的读记录和写记录命令进行访问。这些命令发送到智能卡,而任何响应都会被应用笔记4036中提供的APDU函数接收。每个文件都由2字节的文件标识符来识别。对于所有内部数据文件,标识符的第一个字节固定为0xFF。表1列出了内部数据文件的文件名、文件标识符和记录结构。

表1. 内部数据文件信息
File
Name
MCU-ID Manufacturer Personalization Security User File
Management
Account File Account
Security
User File
Data Area
File ID
 
0xFF 0x00 0xFF 0x01 0xFF 0x02 0xFF 0x03 0xFF 0x04 0xFF 0x05 0xFF 0x06 0xFF 0x07
Record
Organization
2 x 8 Bytes 2 x 8 Bytes 3 x 4 Bytes 12 x 8 Bytes Variable 8 x 4 Bytes 4 x 8 Bytes Variable

个性化文件ID = 0xFF 0x02,包含三个记录共12字节,各记录的长度为4个字节。第一个记录包含智能卡中某些选项的配置信息,而第二和第三个记录则没有预先定义。因此,这两个记录被用于保存本应用实例中智能卡的交易次数和帐户余额。虽然单个记录具有足够的存储空间(4个字节)来保存交易次数和帐户余额所需的三个字节,但这两个数据还是存储在不同的记录中以便操作。这也使得增大这两个数据的值成为可能。交易次数存储在记录2的第一个字节,而帐户余额则存储在记录3的前两个字节,高字节在前(大端)。

ACOS3命令结构

ACOS3卡有13条基本命令,本应用实例中主要用到其中的三条命令。它们分别是文件选择、读记录和写记录命令。这三条命令都将在后面进行说明。ACOS3卡的所有命令都符合EMV规范描述的应用协议数据单元(APDU)的格式。APDU的一般格式包括如下几部分:
  • CLA命令类
  • INS指令代码
  • P1指令参数1
  • P2指令参数2
  • Lc(P3)命令数据域给出的字节数(可选)
  • 命令发送数据字节中的数据序列
  • Le应答中数据域所期望的数据 字节最大长度(可选)
文件选择命令
文件选择命令可打开文件,从而读/写文件的记录。它是一个7字节命令,格式为:

CLA INS P1 P2 P3 Data 1 Data 2
0x80 0xA4 0x00 0x00 0x02 File ID High (0xFF) File ID Low (0x02)

个性化文件是本应用中用到的唯一文件(见表1),它的文件ID 0xFF 0x02为命令的最后两个字节。与所有ACOS3命令一样,执行成功后返回2字节状态信息,其数值为0x90 0x00。若返回任何其它数值则表明命令执行错误。在前面提到的ACS网站上,ACOS3参考手册中列出了所有可能的错误状态字节及其含义。

读记录命令
读记录命令可从当前所选文件的已识别记录中读取指定数量的字节。它是一个5字节命令,格式为:

CLA INS P1 P2 P3
0x80 0xB2 Record Number (0..N-1) 0x00 Length (0x04)

可以看出,该命令包含两个可变字节:一个字节指示记录号,另一个字节指示要从指定记录中读取的字节数(长度)。在本应用实例中,每次都读取个性化文件记录的全部四个字节,因此长度固定为0x04。若读记录命令执行成功,将返回6字节数据:记录中存储的4字节信息,2字节状态信息。若返回的状态字节数值不是0x90 0x00,则表明命令执行错误,应丢弃返回的数据。

写记录命令
写记录命令可向当前所选文件的指定记录写入数据。该命令的长度可以随着要写入的字节数变化。在本实例中,每次都写入4个字节,因此该命令具有如下所示的格式:

CLA INS P1 P2 P3 Data Data Data Data
0x80 0xD2 Record Number (0..N-1) 0x00 Length (0x04) Byte 1 Byte 2 Byte 3 Byte 4

可以看出,该命令总共包含6个可变字节;一个字节指示记录号(0至N-1),另一个字节指示要写入的字节数(长度 = 0x04),此外还有四个数据字节。若写记录命令执行成功,将返回两字节状态信息(执行成功时返回0x90 0x00)。

装载可执行文件

DS8007评估板出厂时已装有本智能卡交易实例的软件。若要验证是否安装了该软件,可以给评估板通电然后观察显示屏。如果显示屏上出现"在下面的大插槽中插入智能卡" (图1),则表明已经加载了程序。如果没有显示这条信息,则可通过MTK软件将交易软件装载到板上的电池备份SRAM中。应用笔记4036 (参看上文)说明了如何装载应用程序。要装载的文件为Trans.hex,包含在AN4120_SW.zip中,可从上面提到的ftp网站下载。

图1. '插入智能卡'信息
图1. "插入智能卡"信息

在安装完交易软件并断开引导加载程序之后,处理器就立即开始运行应用程序。如果评估板此时仍然连接至PC,则MTK屏幕上会显示应用程序的RS-232串行输出。这些信息可用于分析和调试,但可以忽略。用户应按照LCD模块上显示的指令进行操作。如果必要,可分析源代码以确定串行输出的含义。

插入智能卡后,LCD上会短暂的显示智能卡的当前交易次数和帐户余额。然后,LCD上就开始循环显示交易选项—取款、存款和智能卡初始化,大约每两秒钟按顺序变化一次。当期望的交易选项出现时,按下SW4开关就可执行该项交易。这时LCD上会显示交易执行情况。之后显示交易完成信息,指示用户取下智能卡。此时,交易选项将循环显示,等待智能卡插入。

结束语

本应用笔记介绍一个基于DS8007多协议双智能卡接口芯片和DS5002安全微控制器的智能卡支付交易系统。系统中使用具有16kB EEPROM存储器的ACOS3智能卡,并利用它的读记录和写记录命令将信息存储到非易失存储器中。反馈信息通过板载的2行20字符LCD提供给用户。系统可实现存款、取款交易和智能卡初始化功能。提供源代码文件下载,可以此为基础开发真正的支付交易系统。