概述
本應(yīng)用筆記介紹了一個(gè)基于DS8007多協(xié)議雙智能卡接口芯片和DS5002安全微控制器的智能卡支付交易系統(tǒng)。該系統(tǒng)可實(shí)現(xiàn)基本的智能卡存款、取款交易以及卡的初始化功能。雖然系統(tǒng)沒有進(jìn)行任何與"實(shí)際"支付交易系統(tǒng)有關(guān)的安全測(cè)試,但這里演示的功能對(duì)于此類系統(tǒng)極具代表性。演示中使用的硬件是DS8007評(píng)估(EV)板。該評(píng)估套件提供了一個(gè)方便的、經(jīng)過驗(yàn)證的平臺(tái),用于測(cè)試基于DS8007器件的智能卡操作。評(píng)估板包括:作為主處理器的DS5002安全微控制器、一個(gè)2行20字符的液晶顯示(LCD)模塊、兩個(gè)智能卡插槽(分別為信用卡尺寸和SIM尺寸)。此外還提供一個(gè)DB-9連接器,用于通過RS-232串行接口傳輸信號(hào)。使用本公司的微控制器工具包(MTK)軟件(下載),用戶可將PC與RS-232口連接下載程序或數(shù)據(jù)文件,也可以與應(yīng)用系統(tǒng)通信。評(píng)估板還包括512k x8的電池備份SRAM,用于存儲(chǔ)程序和數(shù)據(jù)信息。DS5002安全處理器為電池備份的SRAM提供電源檢測(cè)和控制電路。
開發(fā)該應(yīng)用系統(tǒng)使用的軟件工具集是Keil公司的PK51專業(yè)開發(fā)工具套件,包括μVision3?集成開發(fā)環(huán)境(IDE)和CX51 ANSI C編譯器。PK51包提供匯編器、連接器、仿真器和調(diào)試器的完整開發(fā)環(huán)境。它生成的十六進(jìn)制文件可使用MTK軟件直接從PC下載到DS8007評(píng)估板。
應(yīng)用實(shí)例
本應(yīng)用筆記提供的交易功能可看作是應(yīng)用筆記4036: 利用DS8007評(píng)估套件進(jìn)行設(shè)計(jì)中描述的低層功能之上的附加層。本交易實(shí)例可執(zhí)行和正確管理應(yīng)用協(xié)議數(shù)據(jù)單元(APDU)的發(fā)送和接收。APDU由ACOS3智能卡EMV規(guī)范定義。通過生成和發(fā)送適當(dāng)?shù)腁PDU并處理其可能的響應(yīng),可演示典型的支付交易操作。
用于本應(yīng)用系統(tǒng)的C語言源代碼可提供下載,文件名為AN4120_SW.zip。前面提到的應(yīng)用筆記4036中的代碼是這些交易實(shí)例的核心,它提供DS8007的所有基本接口/驅(qū)動(dòng)函數(shù)和所有直接的低層智能卡接口函數(shù)。AN4036中的代碼也在相同的網(wǎng)址提供下載,文件名為AN4036_SW.zip。
交易實(shí)例詳述
為創(chuàng)建一組有代表性的交易功能,本實(shí)例實(shí)現(xiàn)了三種主要的智能卡操作。- 取款交易,即扣除信用卡余額
- 存款交易,即增加信用卡余額
- 信用卡初始化交易,將信用卡余額和交易次數(shù)設(shè)定為初始值
為了提供一個(gè)合理的演示,首先要考慮的是如何利用DS8007評(píng)估板上的資源建立一個(gè)用戶接口。由于設(shè)計(jì)目標(biāo)之一是無需借助其它設(shè)備就能單機(jī)運(yùn)行,因此評(píng)估板上的RS-232串口不能作為用戶接口。最方便作為用戶輸入接口的硬件是開關(guān)SW4,當(dāng)該開關(guān)按下時(shí),會(huì)將處理器的端口引腳P3.2下拉至地電平。P3.2是一個(gè)多功能端口引腳,還可用作外部中斷輸入(INT0)。但是本應(yīng)用實(shí)例軟件中不使能該中斷,因此,引腳P3.2通常由處理器的引腳驅(qū)動(dòng)電路上拉到高電平,按下開關(guān)SW4時(shí)通過一個(gè)1kΩ電阻拉至低電平。應(yīng)用系統(tǒng)可簡單通過讀取該引腳的電平檢測(cè)開關(guān)是否閉合。
板載LCD模塊可作為用戶接口的輸出器件。DS8007評(píng)估板的LCD模塊是一個(gè)2行20字符的顯示器。它包含液晶驅(qū)動(dòng)電路,并為處理器提供8位并行接口。通過向模塊寫入必要的控制和字符就可進(jìn)行顯示操作,由模塊管理實(shí)際的LCD。
用戶完成一次輸入,軟件就以重復(fù)順序在LCD上顯示三種可能的交易類型供用戶選擇。按下開關(guān)SW4時(shí),軟件執(zhí)行選中的交易。
智能卡詳述
本應(yīng)用實(shí)例中選用的智能卡是香港Advanced Card Systems Limited (ACS)公司生產(chǎn)的ACOS3卡。該卡內(nèi)含嵌入式處理器,運(yùn)行ACS智能卡操作系統(tǒng)版本3 (ACOS3)的操作系統(tǒng),具有如下特性:- 16kB應(yīng)用數(shù)據(jù)EEPROM存儲(chǔ)器
- 符合ISO 7816-1/2/3標(biāo)準(zhǔn),T = 0協(xié)議
- 兼容數(shù)字加密標(biāo)準(zhǔn)(DES)、3DES和信息驗(yàn)證能力(MAC)
- 5個(gè)安全碼 + 發(fā)行密碼
- 卡持有者可更新PIN碼
- 密鑰對(duì)相互驗(yàn)證
- 會(huì)話密鑰采用隨機(jī)數(shù)字
- 線性文件具有固定的記錄長度
- 帳戶數(shù)據(jù)結(jié)構(gòu)可實(shí)現(xiàn)安全支付應(yīng)用系統(tǒng)
智能卡存儲(chǔ)空間
本交易實(shí)例中,選用的智能卡必須包含一定的非易失存儲(chǔ)器空間,用于保存信息。僅有兩個(gè)數(shù)值保存在卡中:記錄成功處理的交易次數(shù)的"計(jì)數(shù)器"和虛擬帳戶的"余額"。對(duì)于該計(jì)數(shù)器,選用1個(gè)字節(jié)的無符號(hào)數(shù),它可表示0至255次交易數(shù)。對(duì)于余額,選用16位整數(shù),可表示數(shù)值-32,768至+32,767。這種方式允許用戶透支卡中的可用余額(即產(chǎn)生負(fù)的余額)。因此,本實(shí)例中總共需要3個(gè)字節(jié)的非易失存儲(chǔ)器。ACOS3的文件結(jié)構(gòu)
制造ACOS3卡時(shí),其16kB EEPROM存儲(chǔ)器劃分成內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)和用戶數(shù)據(jù)存數(shù)區(qū)兩部分。內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)保存配置數(shù)據(jù),通常被操作系統(tǒng)用于管理特定的功能。用戶數(shù)據(jù)存儲(chǔ)區(qū)保存"實(shí)際"交易控制下正常使用智能卡的操作數(shù)據(jù)。在本實(shí)例代碼中,只使用內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),后續(xù)討論中將重點(diǎn)關(guān)注內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)。不論是內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)還是用戶數(shù)據(jù)存儲(chǔ)區(qū),訪問ACOS3卡的存儲(chǔ)器都要通過數(shù)據(jù)文件和數(shù)據(jù)記錄進(jìn)行。每個(gè)數(shù)據(jù)文件都由一定數(shù)量的數(shù)據(jù)記錄組成,最多可達(dá)255個(gè)。不同數(shù)據(jù)文件的記錄長度可以不同,但對(duì)于給定的數(shù)據(jù)文件其記錄長度總是固定的。內(nèi)部數(shù)據(jù)文件的文件結(jié)構(gòu)(文件大小、記錄長度等)由操作系統(tǒng)定義且不能更改,但對(duì)于用戶數(shù)據(jù)存儲(chǔ)區(qū),可由卡發(fā)行人在進(jìn)行個(gè)性化智能卡設(shè)置時(shí)確定其文件結(jié)構(gòu)。為簡單起見,只使用卡中已有的內(nèi)部數(shù)據(jù)文件系統(tǒng),不再生成一個(gè)專門的用戶數(shù)據(jù)文件系統(tǒng)。
所有文件都可通過ACOS3的讀記錄和寫記錄命令進(jìn)行訪問。這些命令發(fā)送到智能卡,而任何響應(yīng)都會(huì)被應(yīng)用筆記4036中提供的APDU函數(shù)接收。每個(gè)文件都由2字節(jié)的文件標(biāo)識(shí)符來識(shí)別。對(duì)于所有內(nèi)部數(shù)據(jù)文件,標(biāo)識(shí)符的第一個(gè)字節(jié)固定為0xFF。表1列出了內(nèi)部數(shù)據(jù)文件的文件名、文件標(biāo)識(shí)符和記錄結(jié)構(gòu)。
表1. 內(nèi)部數(shù)據(jù)文件信息
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 |
個(gè)性化文件ID = 0xFF 0x02,包含三個(gè)記錄共12字節(jié),各記錄的長度為4個(gè)字節(jié)。第一個(gè)記錄包含智能卡中某些選項(xiàng)的配置信息,而第二和第三個(gè)記錄則沒有預(yù)先定義。因此,這兩個(gè)記錄被用于保存本應(yīng)用實(shí)例中智能卡的交易次數(shù)和帳戶余額。雖然單個(gè)記錄具有足夠的存儲(chǔ)空間(4個(gè)字節(jié))來保存交易次數(shù)和帳戶余額所需的三個(gè)字節(jié),但這兩個(gè)數(shù)據(jù)還是存儲(chǔ)在不同的記錄中以便操作。這也使得增大這兩個(gè)數(shù)據(jù)的值成為可能。交易次數(shù)存儲(chǔ)在記錄2的第一個(gè)字節(jié),而帳戶余額則存儲(chǔ)在記錄3的前兩個(gè)字節(jié),高字節(jié)在前(大端)。
ACOS3命令結(jié)構(gòu)
ACOS3卡有13條基本命令,本應(yīng)用實(shí)例中主要用到其中的三條命令。它們分別是文件選擇、讀記錄和寫記錄命令。這三條命令都將在后面進(jìn)行說明。ACOS3卡的所有命令都符合EMV規(guī)范描述的應(yīng)用協(xié)議數(shù)據(jù)單元(APDU)的格式。APDU的一般格式包括如下幾部分:- CLA命令類
- INS指令代碼
- P1指令參數(shù)1
- P2指令參數(shù)2
- Lc(P3)命令數(shù)據(jù)域給出的字節(jié)數(shù)(可選)
- 命令發(fā)送數(shù)據(jù)字節(jié)中的數(shù)據(jù)序列
- Le應(yīng)答中數(shù)據(jù)域所期望的數(shù)據(jù) 字節(jié)最大長度(可選)
文件選擇命令可打開文件,從而讀/寫文件的記錄。它是一個(gè)7字節(jié)命令,格式為:
CLA | INS | P1 | P2 | P3 | Data 1 | Data 2 |
0x80 | 0xA4 | 0x00 | 0x00 | 0x02 | File ID High (0xFF) | File ID Low (0x02) |
個(gè)性化文件是本應(yīng)用中用到的唯一文件(見表1),它的文件ID 0xFF 0x02為命令的最后兩個(gè)字節(jié)。與所有ACOS3命令一樣,執(zhí)行成功后返回2字節(jié)狀態(tài)信息,其數(shù)值為0x90 0x00。若返回任何其它數(shù)值則表明命令執(zhí)行錯(cuò)誤。在前面提到的ACS網(wǎng)站上,ACOS3參考手冊(cè)中列出了所有可能的錯(cuò)誤狀態(tài)字節(jié)及其含義。
讀記錄命令
讀記錄命令可從當(dāng)前所選文件的已識(shí)別記錄中讀取指定數(shù)量的字節(jié)。它是一個(gè)5字節(jié)命令,格式為:
CLA | INS | P1 | P2 | P3 |
0x80 | 0xB2 | Record Number (0..N-1) | 0x00 | Length (0x04) |
可以看出,該命令包含兩個(gè)可變字節(jié):一個(gè)字節(jié)指示記錄號(hào),另一個(gè)字節(jié)指示要從指定記錄中讀取的字節(jié)數(shù)(長度)。在本應(yīng)用實(shí)例中,每次都讀取個(gè)性化文件記錄的全部四個(gè)字節(jié),因此長度固定為0x04。若讀記錄命令執(zhí)行成功,將返回6字節(jié)數(shù)據(jù):記錄中存儲(chǔ)的4字節(jié)信息,2字節(jié)狀態(tài)信息。若返回的狀態(tài)字節(jié)數(shù)值不是0x90 0x00,則表明命令執(zhí)行錯(cuò)誤,應(yīng)丟棄返回的數(shù)據(jù)。
寫記錄命令
寫記錄命令可向當(dāng)前所選文件的指定記錄寫入數(shù)據(jù)。該命令的長度可以隨著要寫入的字節(jié)數(shù)變化。在本實(shí)例中,每次都寫入4個(gè)字節(jié),因此該命令具有如下所示的格式:
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個(gè)可變字節(jié);一個(gè)字節(jié)指示記錄號(hào)(0至N-1),另一個(gè)字節(jié)指示要寫入的字節(jié)數(shù)(長度 = 0x04),此外還有四個(gè)數(shù)據(jù)字節(jié)。若寫記錄命令執(zhí)行成功,將返回兩字節(jié)狀態(tài)信息(執(zhí)行成功時(shí)返回0x90 0x00)。
裝載可執(zhí)行文件
DS8007評(píng)估板出廠時(shí)已裝有本智能卡交易實(shí)例的軟件。若要驗(yàn)證是否安裝了該軟件,可以給評(píng)估板通電然后觀察顯示屏。如果顯示屏上出現(xiàn)"在下面的大插槽中插入智能卡" (圖1),則表明已經(jīng)加載了程序。如果沒有顯示這條信息,則可通過MTK軟件將交易軟件裝載到板上的電池備份SRAM中。應(yīng)用筆記4036 (參看上文)說明了如何裝載應(yīng)用程序。要裝載的文件為Trans.hex,包含在AN4120_SW.zip中,可從上面提到的ftp網(wǎng)站下載。圖1. "插入智能卡"信息
在安裝完交易軟件并斷開引導(dǎo)加載程序之后,處理器就立即開始運(yùn)行應(yīng)用程序。如果評(píng)估板此時(shí)仍然連接至PC,則MTK屏幕上會(huì)顯示應(yīng)用程序的RS-232串行輸出。這些信息可用于分析和調(diào)試,但可以忽略。用戶應(yīng)按照LCD模塊上顯示的指令進(jìn)行操作。如果必要,可分析源代碼以確定串行輸出的含義。
插入智能卡后,LCD上會(huì)短暫的顯示智能卡的當(dāng)前交易次數(shù)和帳戶余額。然后,LCD上就開始循環(huán)顯示交易選項(xiàng)—取款、存款和智能卡初始化,大約每兩秒鐘按順序變化一次。當(dāng)期望的交易選項(xiàng)出現(xiàn)時(shí),按下SW4開關(guān)就可執(zhí)行該項(xiàng)交易。這時(shí)LCD上會(huì)顯示交易執(zhí)行情況。之后顯示交易完成信息,指示用戶取下智能卡。此時(shí),交易選項(xiàng)將循環(huán)顯示,等待智能卡插入。
評(píng)論
查看更多