本應(yīng)用筆記以DS8007作為接口器件和DS5002安全微控制器的智能卡支付終端交易為例。DS8007評估(EV)板和可用的C源代碼可實(shí)現(xiàn)基本的智能卡信用卡、借記卡和卡初始化功能。
概述
本應(yīng)用筆記介紹了基于DS8007多協(xié)議、雙智能卡接口芯片和DS5002安全微控制器的智能卡支付交易系統(tǒng)。基本信用卡和借記交易與智能卡初始化功能一起實(shí)現(xiàn)。雖然沒有試圖包括通常與“真實(shí)”支付交易系統(tǒng)相關(guān)的任何安全措施,但此處演示的功能代表了這種系統(tǒng)。
本演示使用的硬件是DS8007評估(EV)板。該板為使用DS8007器件測試智能卡操作提供了一個(gè)方便、成熟的平臺。該板包括:DS5002安全微控制器作為主處理器;一個(gè) 2 行 x 20 個(gè)字符的液晶顯示器 (LCD) 模塊;以及兩個(gè)智能卡插槽,一個(gè)信用卡大小的插槽和一個(gè) SIM 大小的插槽。提供DB-9連接器,用于傳輸RS-232串行接口的信號。使用公司的微控制器工具包(MTK)軟件,用戶可以將其PC連接到此RS-232端口,下載程序和/或數(shù)據(jù)文件,并與應(yīng)用程序進(jìn)行通信。評估板還包含512k x 8電池備份SRAM,用于存儲程序和數(shù)據(jù)信息。DS5002安全處理器為支持SRAM的電池提供功率檢測和控制電路。
用于開發(fā)此應(yīng)用程序的軟件工具集是 Keil PK51 專業(yè)開發(fā)人員工具包,其中包括 μVision3? 集成開發(fā)環(huán)境 (IDE) 和 CX51 ANSI C 編譯器。此 PK51 包提供了一個(gè)完整的開發(fā)環(huán)境,包括匯編器、鏈接器、模擬器和調(diào)試器。它產(chǎn)生的十六進(jìn)制文件可以使用MTK軟件從PC直接下載到DS8007評估板。
應(yīng)用說明
此事務(wù)示例實(shí)現(xiàn)并正確管理應(yīng)用程序協(xié)議數(shù)據(jù)單元 (APDU) 的發(fā)送和接收,如 EMV 規(guī)范中對 ACOS3 智能卡的定義。通過操作和發(fā)送適當(dāng)?shù)?APDU,然后處理其潛在響應(yīng),演示代表典型支付交易的操作。
此應(yīng)用程序的 C 源代碼可供下載,并且該文件AN4120_SW.zip。上述應(yīng)用筆記4036中的代碼構(gòu)成了這些交易示例的核心;它提供所有基本的DS8007接口/驅(qū)動器功能和所有直接的低級智能卡接口功能。AN4036 的代碼也可從文件 AN4036_SW.zip 中的同一網(wǎng)址下載。
交易詳情示例
為了創(chuàng)建具有代表性的事務(wù)函數(shù)組,此示例中實(shí)現(xiàn)了三個(gè)主要的智能卡操作。
借記交易,從卡的余額中扣除一定金額
信用交易,其中金額添加到卡的余額中
卡初始化交易,其中卡的余額和交易計(jì)數(shù)設(shè)置為初始值
初始余額 $100.00 存儲在卡中,初始計(jì)數(shù)在初始化事務(wù)期間設(shè)置為 10。為了簡化示例,在信用卡或借記交易的卡余額中添加或扣除固定金額 $00.<>。
為了實(shí)現(xiàn)合理的演示,首先要考慮的是如何使用DS8007評估板上的資源創(chuàng)建用戶界面。一個(gè)目標(biāo)是它獨(dú)立運(yùn)行,無需額外設(shè)備。因此,主板的RS-232串行端口被拒絕作為用戶界面。相反,可供用戶輸入的最方便的硬件是交換機(jī) SW4。按下此開關(guān)時(shí),將處理器的端口針腳 P3.2 拉至地。引腳 P3.2 是一個(gè)多功能端口引腳,也可用作外部中斷輸入 (INT0)。但是,在此應(yīng)用程序中,軟件不會啟用此中斷。因此,引腳通常由處理器的引腳驅(qū)動電路拉高,并在按下SW1時(shí)通過4kΩ電阻拉低。應(yīng)用只需讀取引腳即可檢測此開關(guān)閉合。
板載LCD模塊用作用戶界面的輸出設(shè)備。DS8007評估板上的LCD模塊為2行×20字符顯示。它包含創(chuàng)建液晶驅(qū)動信號所需的驅(qū)動器電路,并為處理器提供 8 位并行接口。通過將所需的控件和字母數(shù)字字符寫入模塊來操作顯示,模塊管理實(shí)際的LCD。
給定一個(gè)用戶輸入,軟件在LCD上以重復(fù)順序向用戶顯示三個(gè)可能的交易。然后,軟件執(zhí)行按下開關(guān)SW4時(shí)顯示的交易。
智能卡詳細(xì)信息
本應(yīng)用示例選擇的智能卡是由香港先進(jìn)卡系統(tǒng)有限公司(ACS)制造的ACOS3卡。該卡包含一個(gè)嵌入式處理器,該處理器運(yùn)行稱為 A CS S mart Card Operating System 版本 3 (ACOS3) 的操作系統(tǒng),并具有以下功能:
16kB EEPROM 存儲器,用于存儲應(yīng)用數(shù)據(jù)
符合 ISO 7816-1/2/3,T = 0 協(xié)議
數(shù)字加密標(biāo)準(zhǔn) (DES)、三重 DES 和消息身份驗(yàn)證功能 (MAC) 功能
五個(gè)密碼+發(fā)行人代碼
密碼,可由持卡人更改
用于相互身份驗(yàn)證的密鑰對
基于隨機(jī)數(shù)的會話密鑰
具有固定記錄長度的線性文件
安全支付應(yīng)用的賬戶數(shù)據(jù)結(jié)構(gòu)
有關(guān) ACOS3 功能的完整說明,請?jiān)L問
ACS 網(wǎng)站
。對于此應(yīng)用程序,不使用卡的安全功能。僅使用文件結(jié)構(gòu)和 EEPROM 存儲。
卡內(nèi)存存儲
對于此事務(wù)示例,所選卡必須包含一些用于信息存儲的最小數(shù)量的非易失性存儲器。卡中僅存儲兩個(gè)值:包含成功處理的交易數(shù)量的“計(jì)數(shù)器”和虛構(gòu)帳戶“余額”。對于計(jì)數(shù)器,選擇了 1 字節(jié)無符號值,因?yàn)樗梢员硎緩?0 到 255 個(gè)事務(wù)的計(jì)數(shù)。對于余額,選擇16位整數(shù),因?yàn)樗梢员硎?32,768到+32,767的值。這種方法允許用戶在可用余額之外從卡中扣款(即創(chuàng)建負(fù)余額)。因此,本例總共需要三個(gè)字節(jié)的非易失性存儲器。
ACOS3 文件結(jié)構(gòu)
ACOS16卡中的3kBEEPROM存儲器在制造時(shí)被隔離為內(nèi)部數(shù)據(jù)存儲器和用戶數(shù)據(jù)存儲器。內(nèi)部數(shù)據(jù)存儲器存儲配置數(shù)據(jù),通常由操作系統(tǒng)用于管理某些功能。用戶數(shù)據(jù)存儲器在“真實(shí)”交易應(yīng)用程序的控制下存儲卡正常使用中操縱的數(shù)據(jù)。在此示例代碼中,僅使用內(nèi)部數(shù)據(jù)存儲器,因此它將是其余討論的重點(diǎn)。
無論是使用內(nèi)部數(shù)據(jù)存儲器還是用戶數(shù)據(jù)存儲器,都可以通過數(shù)據(jù)文件和數(shù)據(jù)記錄訪問ACOS3卡的存儲器。每個(gè)數(shù)據(jù)文件由一定數(shù)量的數(shù)據(jù)記錄組成,最多 255 條。不同文件的記錄長度可能不同,但在給定文件中始終是固定的。內(nèi)部數(shù)據(jù)文件的文件結(jié)構(gòu)(文件大小、記錄長度等)由操作系統(tǒng)定義,無法更改。但是,對于用戶數(shù)據(jù)存儲器,發(fā)卡機(jī)構(gòu)在個(gè)性化卡時(shí)確定文件結(jié)構(gòu)。為簡單起見,此處使用卡的現(xiàn)有內(nèi)部數(shù)據(jù)文件系統(tǒng),而不是實(shí)現(xiàn)任意用戶數(shù)據(jù)文件系統(tǒng)。
可以通過ACOS3讀取記錄和寫入記錄命令訪問所有文件。這些命令被發(fā)送到卡,任何響應(yīng)都通過應(yīng)用筆記4036中提供的APDU功能接收。每個(gè)文件都由一個(gè) 2 字節(jié)的文件標(biāo)識符標(biāo)識。對于所有內(nèi)部數(shù)據(jù)文件,標(biāo)識符的第一個(gè)字節(jié)固定為 0xFF。表 1 顯示了內(nèi)部數(shù)據(jù)文件的文件名、文件標(biāo)識符和記錄組織。
表 1.內(nèi)部數(shù)據(jù)文件信息
文件名 |
單片機(jī)接口 | 制造者 | 個(gè)性化 | 安全 |
用戶文件 管理 |
帳戶文件 |
賬戶 安全 |
用戶文件 數(shù)據(jù)區(qū)域 |
文件編號 |
0xFF 0x00 | 0xFF 0x01 | 0xFF 0x02 | 0xFF 0x03 | 0xFF 0x04 | 0xFF 0x05 | 0xFF 0x06 | 0xFF 0x07 |
記錄 組織 |
2 x 8 字節(jié) | 2 x 8 字節(jié) | 3 x 4 字節(jié) | 12 x 8 字節(jié) | 變量 | 8 x 4 字節(jié) | 4 x 8 字節(jié) | 變量 |
個(gè)性化文件“File ID = 0xFF 0x02”包含 12 個(gè)字節(jié),這些字節(jié)排列為三個(gè)記錄,每個(gè)記錄的長度為 <> 個(gè)字節(jié)。第一條記錄包含配置卡中某些選項(xiàng)的信息。但是,記錄二和記錄三沒有預(yù)先確定的定義。因此,這兩個(gè)記錄用于在卡中保存此應(yīng)用程序的計(jì)數(shù)和余額值。雖然單個(gè)記錄包含足夠的存儲空間(四個(gè)字節(jié))來保存計(jì)數(shù)和余額信息所需的三個(gè)字節(jié)的數(shù)據(jù),但這兩個(gè)值存儲在不同的記錄中以簡化和闡明其操作。這也使得增加到更大的數(shù)字成為可能。計(jì)數(shù)存儲在第二條記錄的第一個(gè)字節(jié)中,余額存儲在第三條記錄的前兩個(gè)字節(jié)中,即高階字節(jié)優(yōu)先(即大端序)。
ACOS3 命令結(jié)構(gòu)
ACOS3 卡有 13 個(gè)基本命令。在此應(yīng)用程序中,其中三個(gè)命令構(gòu)成了所執(zhí)行操作的核心。它們是“選擇文件”、“讀取記錄”和“寫入記錄”命令。下面介紹了這些命令中的每一個(gè)。所有 ACOS3 命令都遵循 EMV 規(guī)范中描述的應(yīng)用協(xié)議數(shù)據(jù)單元 (APDU) 的形式。APDU 常規(guī)形式由以下元素組成:
命令的 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ù)字段中預(yù)期的最大數(shù)據(jù)字節(jié)數(shù)(可選)
“選擇文件”命令
“選擇文件”命令
可打開文件,以便可以讀取和/或?qū)懭肫溆涗洝K且粋€(gè) 7 字節(jié)的命令,其格式為:
共軛亞油酸 | 移民局 | 小一 | 小一 | 小一 | 數(shù)據(jù) 1 | 數(shù)據(jù) 2 |
0x80 | 0xA4 | 0x00 | 0x00 | 0x02 | 文件 ID 高 (0xFF) | 文件 ID 低 (0x02) |
由于個(gè)性化文件(請參閱表 1)是此應(yīng)用程序中使用的唯一文件,因此其文件 ID 0xFF 0x02是命令的最后兩個(gè)字節(jié)。與所有 ACOS3 命令一樣,如果成功完成,此命令將返回 2x0 90x0 的 00 字節(jié)狀態(tài)。任何其他返回的值都指示執(zhí)行期間出錯(cuò)。有關(guān)可能的錯(cuò)誤狀態(tài)字節(jié)及其含義的完整列表,可在上述ACS網(wǎng)站上的ACOS3參考手冊中在線找到。
讀取記錄命令 讀取記錄命令
從當(dāng)前選定文件的標(biāo)識記錄中讀取指定的字節(jié)數(shù)。它是一個(gè) 5 字節(jié)命令,其格式為:
共軛亞油酸 | 移民局 | 小一 | 小一 | 小一 |
0x80 | 0xB2 | 記錄編號 (0..N-1) | 0x00 | 長度 (0x04) |
如圖所示,此命令有兩個(gè)可變字節(jié):一個(gè)字節(jié)指示記錄號,另一個(gè)指示要從指定記錄讀取的字節(jié)數(shù)(長度)。在此應(yīng)用程序中,每次都會讀取個(gè)性化文件記錄的所有四個(gè)字節(jié),因此長度固定為 0x04。如果命令成功完成,它將返回六個(gè)字節(jié)的數(shù)據(jù):四個(gè)字節(jié)的信息存儲在記錄中,兩個(gè)字節(jié)的狀態(tài)信息。如果返回除 0x90 0x00 以外的狀態(tài)字節(jié)的任何值,則該命令將生成錯(cuò)誤,應(yīng)忽略返回的數(shù)據(jù)。
“寫入記錄”命令 “寫入記錄”命令
將數(shù)據(jù)寫入當(dāng)前所選文件的指定記錄。這是一個(gè)可變長度命令,取決于寫入的字節(jié)數(shù)。在此示例中,始終寫入四個(gè)字節(jié),因此命令具有顯示的形式。
共軛亞油酸 | 移民局 | 小一 | 小一 | 小一 | 數(shù)據(jù) | 數(shù)據(jù) | 數(shù)據(jù) | 數(shù)據(jù) |
0x80 | 0xD2 | 記錄編號 (0..N-1) | 0x00 | 長度 (0x04) | 字節(jié) 1 | 字節(jié) 2 | 字節(jié) 3 | 字節(jié) 4 |
如圖所示,此命令總共有六個(gè)可變字節(jié);一個(gè)字節(jié)表示記錄號(0 到 N-1),另一個(gè)字節(jié)表示要寫入的字節(jié)數(shù)(長度 = 0x04),并且有四個(gè)數(shù)據(jù)字節(jié)。如果命令成功完成,它將返回兩個(gè)字節(jié)的狀態(tài)信息(成功完成0x90 0x00)。
加載可執(zhí)行文件
DS8007評估板自帶智能卡示例交易軟件。要驗(yàn)證此軟件是否存在,請為開發(fā)板通電并觀察顯示屏。如果顯示以“將卡插入下面的大插槽”結(jié)尾的雙屏橫幅(圖1),則程序已加載。如果未顯示此橫幅,則可以使用MTK軟件將程序加載到電路板的電池備份SRAM中。應(yīng)用筆記4036(見上文)描述了如何加載應(yīng)用文件。要加載的文件是 Trans.hex,包含在可從上述 ftp 網(wǎng)站下載的AN4120_SW.zip文件中。
圖1.“插入卡”橫幅。
加載文件并斷開引導(dǎo)加載程序后,處理器立即開始運(yùn)行應(yīng)用程序。如果仍連接到PC,MTK屏幕可能會顯示程序的RS-232串行輸出。但是,此信息用于分析和調(diào)試,應(yīng)忽略。用戶應(yīng)按照液晶屏模塊上顯示的說明進(jìn)行操作。如果需要,可以分析源代碼以確定串行輸出的含義。
插入智能卡后,卡的當(dāng)前交易計(jì)數(shù)和帳戶余額會短暫顯示在LCD上。然后,顯示屏開始按順序循環(huán)瀏覽交易選項(xiàng)(借方、貸方和初始化),大約每兩秒更改一次。顯示所需事務(wù)時(shí),按 SW4 開關(guān)執(zhí)行此事務(wù)。然后,顯示屏將顯示執(zhí)行的操作。將顯示一條結(jié)束消息,并指示用戶刪除智能卡。此時(shí),事務(wù)周期重復(fù)等待重新插入卡。
結(jié)論
本應(yīng)用筆記所述的系統(tǒng)基于DS8007多協(xié)議、雙智能卡接口芯片和DS5002安全微控制器實(shí)現(xiàn)智能卡支付交易系統(tǒng)。使用包含3kBEEPROM存儲器的ACOS16智能卡,其讀記錄和寫記錄命令用于將信息存儲在該非易失性存儲器中。反饋通過板載 2 行 x 20 個(gè)字符的 LCD 提供給用戶。信用卡和借記交易與智能卡初始化功能一起實(shí)現(xiàn)。源代碼文件可供下載,可以構(gòu)成實(shí)際系統(tǒng)實(shí)現(xiàn)的基礎(chǔ)。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7489瀏覽量
151047 -
處理器
+關(guān)注
關(guān)注
68文章
19165瀏覽量
229124 -
lcd
+關(guān)注
關(guān)注
34文章
4411瀏覽量
167088
發(fā)布評論請先 登錄
相關(guān)推薦
評論