一旦ATR过程结束,开始交易过程。不论是哪种特定的操作,交易都是由终端向智能卡发送指令,智能卡执行这些指令(并可将执行结果返回给终端)。卡的操作可以是简单地指定内存读操作,也可以是比较复杂的,如执行一次加密运算。不论是哪种,终端与卡之间的通信都按照应用协议数据单元(APDU)的格式进行。
终端发出的特殊指令信息(C-APDU)将从卡端产生一个相应的应答信息(R-APDU),这些信息称为APDU指令对。EMV规范对这两种指令格式进行了详细定义,由终端发送的指令基本结构必须包含4Byte的报头,随后是长度可选的数据部分,如图2(a)所示。报头的4个字节包括CLA、INS、P1和P2,它们规定了指令的类别,指令码及支持特定指令的参数。C-APDU报头后面跟随数据的字节数,由命令Lc指定,而终端希望智能卡应答信息的字节数由指令Le指定。
智能卡的应答信息(R-APDU)也由多个字节组成,如图2(b)所示,格式化成3段,分别是数据(主体)和代表指令处理状态的SW1、SW2(尾部)。正常完成指令时,智能卡返回SW1的值为0x90和SW2的值0x00,其它返回值表示运行错误或有提示信息产生1。
为了处理全部的终端交易,安全微控制器DS5002可以编程实现握手和数据传输协议。我们已经针对DS5002和DS8007(包含在DS8007评估板内)开发完成了一些例程,实现终端与IC卡的会话过程,包括上电、ATR、APDU和断电。如果将评估板连接到串口接收终端,评估板及其软件将以38400的波特率通过RS232串口传输数据。
关于该软件的详细说明已经超出本文范畴,但我们可以提供基于DS5002和接口芯片DS8007设计方案所能完成的基本智能卡接口的源代码,设计方案的电路如图3所示。软件可从目录下的an4029_sw.zip文件中获得。该文件包含全部的C代码(main.c,ds8007.c,LCD Funct.c)和产生HEX文件(DS8007.hex)所需的汇编源代码(Startup.a51)。这些代码用Keil PK51和mVision集成开发环境编译并链接。mVision项目文件(ds8007.Uv2)也在这个 .zip文件中可以找到。编译完后,.HEX文件被下载到DS8007评估板并运行。
为了测试例程,我们使用了一片ACS提供的基于微控制器的智能卡。这种卡可以执行内嵌的ACS智能卡操作系统版本1,或ACOS1。该卡具备如下特点:用来存放应用数据的8kB E2PROM、DES和MAC功能、基于随机数的过程密钥、相互认证的密钥对、持卡人可以更改的PIN码,符合ISO-7816-3,T=0协议。