本应用笔记以DS8007作为接口器件和DS5002安全微控制器的智能卡支付终端交易为例。DS8007评估(EV)板和可用的C源代码可实现基本的智能卡信用卡、借记卡和卡初始化功能。
概述
本应用笔记介绍了基于DS8007多协议、双智能卡接口芯片和DS5002安全微控制器的智能卡支付交易系统。基本信用卡和借记交易与智能卡初始化功能一起实现。虽然没有试图包括通常与“真实”支付交易系统相关的任何安全措施,但此处演示的功能代表了这种系统。
本演示使用的硬件是DS8007评估(EV)板。该板为使用DS8007器件测试智能卡操作提供了一个方便、成熟的平台。该板包括:DS5002安全微控制器作为主处理器;一个 2 行 x 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) 的发送和接收,如 EMV 规范中对 ACOS3 智能卡的定义。通过操作和发送适当的 APDU,然后处理其潜在响应,演示代表典型支付交易的操作。
此应用程序的 C 源代码可供下载,并且该文件AN4120_SW.zip。上述应用笔记4036中的代码构成了这些交易示例的核心;它提供所有基本的DS8007接口/驱动器功能和所有直接的低级智能卡接口功能。AN4036 的代码也可从文件 AN4036_SW.zip 中的同一网址下载。
交易详情示例
为了创建具有代表性的事务函数组,此示例中实现了三个主要的智能卡操作。
借记交易,从卡的余额中扣除一定金额
信用交易,其中金额添加到卡的余额中
卡初始化交易,其中卡的余额和交易计数设置为初始值
初始余额 $100.00 存储在卡中,初始计数在初始化事务期间设置为 10。为了简化示例,在信用卡或借记交易的卡余额中添加或扣除固定金额 $00.<>。
为了实现合理的演示,首先要考虑的是如何使用DS8007评估板上的资源创建用户界面。一个目标是它独立运行,无需额外设备。因此,主板的RS-232串行端口被拒绝作为用户界面。相反,可供用户输入的最方便的硬件是交换机 SW4。按下此开关时,将处理器的端口针脚 P3.2 拉至地。引脚 P3.2 是一个多功能端口引脚,也可用作外部中断输入 (INT0)。但是,在此应用程序中,软件不会启用此中断。因此,引脚通常由处理器的引脚驱动电路拉高,并在按下SW1时通过4kΩ电阻拉低。应用只需读取引脚即可检测此开关闭合。
板载LCD模块用作用户界面的输出设备。DS8007评估板上的LCD模块为2行×20字符显示。它包含创建液晶驱动信号所需的驱动器电路,并为处理器提供 8 位并行接口。通过将所需的控件和字母数字字符写入模块来操作显示,模块管理实际的LCD。
给定一个用户输入,软件在LCD上以重复顺序向用户显示三个可能的交易。然后,软件执行按下开关SW4时显示的交易。
智能卡详细信息
本应用示例选择的智能卡是由香港先进卡系统有限公司(ACS)制造的ACOS3卡。该卡包含一个嵌入式处理器,该处理器运行称为 A CS S mart Card Operating System 版本 3 (ACOS3) 的操作系统,并具有以下功能:
16kB EEPROM 存储器,用于存储应用数据
符合 ISO 7816-1/2/3,T = 0 协议
数字加密标准 (DES)、三重 DES 和消息身份验证功能 (MAC) 功能
五个密码+发行人代码
密码,可由持卡人更改
用于相互身份验证的密钥对
基于随机数的会话密钥
具有固定记录长度的线性文件
安全支付应用的账户数据结构
有关 ACOS3 功能的完整说明,请访问
ACS 网站
。对于此应用程序,不使用卡的安全功能。仅使用文件结构和 EEPROM 存储。
卡内存存储
对于此事务示例,所选卡必须包含一些用于信息存储的最小数量的非易失性存储器。卡中仅存储两个值:包含成功处理的交易数量的“计数器”和虚构帐户“余额”。对于计数器,选择了 1 字节无符号值,因为它可以表示从 0 到 255 个事务的计数。对于余额,选择16位整数,因为它可以表示-32,768到+32,767的值。这种方法允许用户在可用余额之外从卡中扣款(即创建负余额)。因此,本例总共需要三个字节的非易失性存储器。
ACOS3 文件结构
ACOS16卡中的3kBEEPROM存储器在制造时被隔离为内部数据存储器和用户数据存储器。内部数据存储器存储配置数据,通常由操作系统用于管理某些功能。用户数据存储器在“真实”交易应用程序的控制下存储卡正常使用中操纵的数据。在此示例代码中,仅使用内部数据存储器,因此它将是其余讨论的重点。
无论是使用内部数据存储器还是用户数据存储器,都可以通过数据文件和数据记录访问ACOS3卡的存储器。每个数据文件由一定数量的数据记录组成,最多 255 条。不同文件的记录长度可能不同,但在给定文件中始终是固定的。内部数据文件的文件结构(文件大小、记录长度等)由操作系统定义,无法更改。但是,对于用户数据存储器,发卡机构在个性化卡时确定文件结构。为简单起见,此处使用卡的现有内部数据文件系统,而不是实现任意用户数据文件系统。
可以通过ACOS3读取记录和写入记录命令访问所有文件。这些命令被发送到卡,任何响应都通过应用笔记4036中提供的APDU功能接收。每个文件都由一个 2 字节的文件标识符标识。对于所有内部数据文件,标识符的第一个字节固定为 0xFF。表 1 显示了内部数据文件的文件名、文件标识符和记录组织。
表 1.内部数据文件信息
文件名 |
单片机接口 | 制造者 | 个性化 | 安全 |
用户文件 管理 |
帐户文件 |
账户 安全 |
用户文件 数据区域 |
文件编号 |
0xFF 0x00 | 0xFF 0x01 | 0xFF 0x02 | 0xFF 0x03 | 0xFF 0x04 | 0xFF 0x05 | 0xFF 0x06 | 0xFF 0x07 |
记录 组织 |
2 x 8 字节 | 2 x 8 字节 | 3 x 4 字节 | 12 x 8 字节 | 变量 | 8 x 4 字节 | 4 x 8 字节 | 变量 |
个性化文件“File ID = 0xFF 0x02”包含 12 个字节,这些字节排列为三个记录,每个记录的长度为 <> 个字节。第一条记录包含配置卡中某些选项的信息。但是,记录二和记录三没有预先确定的定义。因此,这两个记录用于在卡中保存此应用程序的计数和余额值。虽然单个记录包含足够的存储空间(四个字节)来保存计数和余额信息所需的三个字节的数据,但这两个值存储在不同的记录中以简化和阐明其操作。这也使得增加到更大的数字成为可能。计数存储在第二条记录的第一个字节中,余额存储在第三条记录的前两个字节中,即高阶字节优先(即大端序)。
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 | 文件 ID 高 (0xFF) | 文件 ID 低 (0x02) |
由于个性化文件(请参阅表 1)是此应用程序中使用的唯一文件,因此其文件 ID 0xFF 0x02是命令的最后两个字节。与所有 ACOS3 命令一样,如果成功完成,此命令将返回 2x0 90x0 的 00 字节状态。任何其他返回的值都指示执行期间出错。有关可能的错误状态字节及其含义的完整列表,可在上述ACS网站上的ACOS3参考手册中在线找到。
读取记录命令 读取记录命令
从当前选定文件的标识记录中读取指定的字节数。它是一个 5 字节命令,其格式为:
CLA | INS | P1 | P2 | P3 |
0x80 | 0xB2 | 记录编号 (0..N-1) | 0x00 | 长度 (0x04) |
如图所示,此命令有两个可变字节:一个字节指示记录号,另一个指示要从指定记录读取的字节数(长度)。在此应用程序中,每次都会读取个性化文件记录的所有四个字节,因此长度固定为 0x04。如果命令成功完成,它将返回六个字节的数据:四个字节的信息存储在记录中,两个字节的状态信息。如果返回除 0x90 0x00 以外的状态字节的任何值,则该命令将生成错误,应忽略返回的数据。
“写入记录”命令 “写入记录”命令
将数据写入当前所选文件的指定记录。这是一个可变长度命令,取决于写入的字节数。在此示例中,始终写入四个字节,因此命令具有显示的形式。
CLA | INS | P1 | P2 | P3 | Data | Data | Data | Data |
0x80 | 0xD2 | 记录编号 (0..N-1) | 0x00 | 长度 (0x04) | 字节 1 | 字节 2 | 字节 3 | 字节 4 |
如图所示,此命令总共有六个可变字节;一个字节表示记录号(0 到 N-1),另一个字节表示要写入的字节数(长度 = 0x04),并且有四个数据字节。如果命令成功完成,它将返回两个字节的状态信息(成功完成0x90 0x00)。
加载可执行文件
DS8007评估板自带智能卡示例交易软件。要验证此软件是否存在,请为开发板通电并观察显示屏。如果显示以“将卡插入下面的大插槽”结尾的双屏横幅(图1),则程序已加载。如果未显示此横幅,则可以使用MTK软件将程序加载到电路板的电池备份SRAM中。应用笔记4036(见上文)描述了如何加载应用文件。要加载的文件是 Trans.hex,包含在可从上述 ftp 网站下载的AN4120_SW.zip文件中。
图1.“插入卡”横幅。
加载文件并断开引导加载程序后,处理器立即开始运行应用程序。如果仍连接到PC,MTK屏幕可能会显示程序的RS-232串行输出。但是,此信息用于分析和调试,应忽略。用户应按照液晶屏模块上显示的说明进行操作。如果需要,可以分析源代码以确定串行输出的含义。
插入智能卡后,卡的当前交易计数和帐户余额会短暂显示在LCD上。然后,显示屏开始按顺序循环浏览交易选项(借方、贷方和初始化),大约每两秒更改一次。显示所需事务时,按 SW4 开关执行此事务。然后,显示屏将显示执行的操作。将显示一条结束消息,并指示用户删除智能卡。此时,事务周期重复等待重新插入卡。
结论
本应用笔记所述的系统基于DS8007多协议、双智能卡接口芯片和DS5002安全微控制器实现智能卡支付交易系统。使用包含3kBEEPROM存储器的ACOS16智能卡,其读记录和写记录命令用于将信息存储在该非易失性存储器中。反馈通过板载 2 行 x 20 个字符的 LCD 提供给用户。信用卡和借记交易与智能卡初始化功能一起实现。源代码文件可供下载,可以构成实际系统实现的基础。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !