DS8007在智能卡交易中的应用

描述

本应用笔记以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 提供给用户。信用卡和借记交易与智能卡初始化功能一起实现。源代码文件可供下载,可以构成实际系统实现的基础。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分