智能卡在今天快節(jié)奏的經(jīng)濟(jì)生活中已經(jīng)無處不在,它將逐步代替以磁條貯存帳戶信息的付費(fèi)卡。智能卡通常制作成衣服口袋大小的卡片,與標(biāo)準(zhǔn)的信用卡類似,上面嵌入集成電路,一般是非易失存貯器或帶有非易失存貯器的安全處理器。智能卡上面還嵌入了多個(gè)電子觸點(diǎn),通過這些電子觸點(diǎn)可以與內(nèi)部存貯器或處理器通信。
智能卡的核心在于嵌入式微控制器對(duì)數(shù)據(jù)的處理和加密功能,處理能力增強(qiáng)了安全性。由于智能卡的成本較高,與IC卡接口需要更新相關(guān)的基礎(chǔ)設(shè)備,從而減緩了由磁卡向智能卡轉(zhuǎn)變的過程。然而,隨著對(duì)安全性要求的提高,特別是當(dāng)手機(jī)和PDA存放了更多數(shù)據(jù)時(shí),對(duì)IC卡及其它存貯介質(zhì)(如SD、miniSD、microSD等)的需求也不斷提高。手機(jī)里的用戶識(shí)別模塊(SIM卡)和支付終端都可以看作智能卡。
為了處理智能卡交易,需要連接一個(gè)能夠安全地訪問內(nèi)嵌存儲(chǔ)器或處理器的讀卡器,從而讀出信息并將操作結(jié)果寫回卡內(nèi)。智能卡的物理尺寸和信號(hào)接口已經(jīng)由標(biāo)準(zhǔn)組織定義(如ISO-7816),并且EuroCard、Mastercard和Visa(EMV)等組織也對(duì)智能卡尋址操作建立了一系列的標(biāo)準(zhǔn)。
智能卡的電氣接口由8個(gè)觸點(diǎn)組成,排列并嵌入到塑料卡上,見表1,8個(gè)觸點(diǎn)中,EMV只用了5個(gè),其中兩個(gè)是電源和地,其余三個(gè)觸點(diǎn)是信號(hào)觸點(diǎn),通過這三個(gè)觸點(diǎn)對(duì)卡進(jìn)行讀、寫操作。C2是復(fù)位線,C3是時(shí)鐘線,C7是串行I/O線。
最初,卡的規(guī)范規(guī)定供電電壓為5V±10%(A類卡),現(xiàn)在已更改為3V±10%(AB類卡),以后要轉(zhuǎn)變成1.85V±10%(ABC類卡)。最終目標(biāo)是在2009年6月全部淘汰A類卡,僅保留AB類或ABC類卡。
與智能卡接口的終端必須提供多種供電電壓和適當(dāng)?shù)男盘?hào)電平,接口規(guī)范還要求終端能夠承受卡的任意兩個(gè)觸點(diǎn)間的短路。使用專用的芯片提供必要的電源和信號(hào)電平與比利用大量分立器件完成同樣任務(wù)更具優(yōu)勢(shì)。DS8007就是一款這樣的專用器件,除了滿足上述模擬功能外,它還包含F(xiàn)IFO、處理器接口和支持卡通信的時(shí)序控制邏輯電路。
為了更好地理解MCU和多協(xié)議接口電路的工作,我們先來研究一下智能卡接口和與卡通信的基本步驟。我們給出了一個(gè)利用安全微控制器DS5002設(shè)計(jì)接口終端實(shí)現(xiàn)協(xié)議和數(shù)據(jù)傳輸?shù)姆独?,DS8007接口電路提供信號(hào)接口、電荷泵和穩(wěn)壓器,為智能卡提供適當(dāng)?shù)碾娫础S脙蓚€(gè)芯片即可組成雙智能卡接口終端。
RST和CLK信號(hào)是智能卡的輸入,由接口終端(DS5002和DS8007)提供。復(fù)位信號(hào)為低電平有效,可異步復(fù)位智能卡。為了控制整個(gè)數(shù)據(jù)傳輸,頻率范圍從1MHz~5MHz的時(shí)鐘信號(hào)通過終端接口連接到智能卡的時(shí)鐘觸點(diǎn)(C3)。最后,數(shù)據(jù)通過I/O觸點(diǎn)(C7)從智能卡傳輸?shù)阶x卡器(發(fā)送模式),或數(shù)據(jù)從讀卡器傳輸?shù)絀C卡(接收模式)。EMV規(guī)范規(guī)定,除非I/O觸點(diǎn)正在發(fā)送數(shù)據(jù),否則智能卡的I/O觸點(diǎn)應(yīng)設(shè)置為接收模式。
終端接口要求
當(dāng)卡插入終端時(shí),卡觸點(diǎn)連接到終端觸點(diǎn)并被激活。控制器將卡復(fù)位,然后通過一串字符(請(qǐng)參考應(yīng)答復(fù)位ATR)建立卡與終端的通信;接下來是交易處理,交易結(jié)束后,觸點(diǎn)置于禁止?fàn)顟B(tài),此后可將卡拔出或彈出。
ATR字符串建立最初的通信信息,包括指定協(xié)議、位時(shí)序和后續(xù)的數(shù)據(jù)通信信息。ATR序列包括初始化字符、TS及最大32個(gè)字節(jié)的附加字符,這些字符組合在一起,通知終端在隨后的交易中如何與卡通信。而后續(xù)的數(shù)據(jù)傳輸也能改變某些通信參數(shù),ATR只是建立了最基本的通信條件。
字符傳輸中的每一位定義為基本時(shí)間單元(ETU),ETU的時(shí)間長(zhǎng)短與智能卡的CLK時(shí)鐘周期成線性關(guān)系。ATR通信過程中的位定時(shí)稱為初始ETU。
任何通信字符都包含10位數(shù)據(jù),持續(xù)時(shí)間為10ETU。第一位是起始位,它總是低電平,起始位之前I/O默認(rèn)為高電平。每個(gè)字符的最后位是校驗(yàn)位,由發(fā)送方?jīng)Q定,可能是高電平,也可能是低電平,其作用是保證整個(gè)字符中1的個(gè)數(shù)為偶數(shù)。圖1給出了一個(gè)位模板的例子,每個(gè)字符由10位組成,包括1個(gè)起始位、8個(gè)數(shù)據(jù)位和1個(gè)校驗(yàn)位。每?jī)蓚€(gè)字符之間通過一個(gè)最小安全周期進(jìn)行分隔。
在ISO-7816規(guī)范中,4位用于選擇卡通信協(xié)議。目前16種協(xié)議中只用了兩種,分別命名為T=0和T=1。這兩種都是半雙工模式(任何時(shí)刻,數(shù)據(jù)只能單向傳輸)、異步通信方式。T=0是以基于字符的通訊格式,而T=1是基于數(shù)據(jù)塊的通信格式。所有兼容EMV標(biāo)準(zhǔn)的智能卡必須支持T=0或T=1協(xié)議,所有終端必須同時(shí)支持這兩種協(xié)議。
當(dāng)卡插入終端后,所有觸點(diǎn)保持低電平狀態(tài),電源VCC立即加到觸點(diǎn)C1。終端在確認(rèn)電壓穩(wěn)定并滿足規(guī)范限制后,將自身的I/O觸點(diǎn)置成接收模式,并向卡的C3提供時(shí)鐘(CLK)信號(hào)。在時(shí)鐘信號(hào)開始的200個(gè)時(shí)鐘周期內(nèi),終端須將I/O口置為高阻態(tài)(接收模式),卡的I/O口則置于發(fā)送模式。
經(jīng)過40000個(gè)~45 000個(gè)時(shí)鐘周期后,終端向卡的RST端發(fā)出一個(gè)高電平,以激活卡。卡須在RST上升沿后400個(gè)~40000個(gè)時(shí)鐘周期內(nèi)向終端發(fā)送一個(gè)ATR字符應(yīng)答終端。ATR包含后續(xù)通信操作的詳細(xì)信息,包括T=0或T=1協(xié)議的選擇。如果沒有指定協(xié)議,則終端默認(rèn)通信協(xié)議為T=0。
ATR序列的第一個(gè)字符定義為起始字符TS。TS的前4位包含1個(gè)低電平起始位,然后是兩個(gè)高電平位,最后是一個(gè)低電平位。這種固定位模板允許TS同步信息傳輸。TS的后續(xù)三位如果全為高平電,則表示后續(xù)數(shù)據(jù)為正向約定解碼(傳數(shù)據(jù)時(shí),低位在前);如果這些位全部為低電平,則表示后續(xù)數(shù)據(jù)為反向約定解碼(傳數(shù)據(jù)時(shí),高位在前)。EMV規(guī)范允許使用反向約定,但推薦在新的卡設(shè)計(jì)中使用正向約定。
TS的最后三位由兩個(gè)低電平位和一個(gè)校驗(yàn)位組成,10位字符幀的最后一位是校驗(yàn)位,該位電平保證這一幀中1的個(gè)數(shù)為偶數(shù)。
ATR序列的第二個(gè)字符為格式字符,稱為T0。這個(gè)字符包含兩部分,用來確定后續(xù)ATR所包含的字符。T0的高4位稱為Y1,用來指示隨后所發(fā)送的TA1、TB1、TC1或TD1,0個(gè)~4個(gè)字符的發(fā)送取決于Y 1中有多少位置1。
T0的低4位用K表示,代表數(shù)字0到15,表示后續(xù)ATR序列中包含的“歷史字節(jié)”?!皻v史字節(jié)”提供卡的一般信息,比如卡的制造商、卡內(nèi)芯片、芯片ROM或卡的使用期限等。ISO-7816和EMV規(guī)范都沒有對(duì)該部分信息傳輸進(jìn)行準(zhǔn)確的定義。
如果ATR中帶有TB1字符,則它傳遞的是智能卡對(duì)編程電壓的要求:b1~b5位(稱為PI1)指出編程電壓;b6和b7(稱為II)指出編程需要的最大電流。與基本EVM兼容的ATR,TB1=00,說明VPP沒有連接到智能卡。
TC1字符傳送的數(shù)字N決定從終端向智能卡發(fā)送的兩個(gè)相鄰字符之間需要加入的額外安全時(shí)間。這個(gè)數(shù)字不會(huì)影響從卡到終端的字符傳輸,也不影響兩個(gè)相反方向的字符傳輸。N所代表的二進(jìn)制數(shù)指明加入額外安全時(shí)間的ETU數(shù)目。當(dāng)TC1=FF時(shí),兩個(gè)字符之間使用最短的延遲時(shí)間,在T=0協(xié)議中,這個(gè)時(shí)間是12個(gè)ETU,在T=1協(xié)議中,這個(gè)時(shí)間是11個(gè)ETU。N可以是0~255的任何數(shù)字。如果ATR中不含TC1,終端將默認(rèn)為TC1=00而繼續(xù)進(jìn)行后續(xù)工作。由于N可以在字符傳輸時(shí)加入額外的時(shí)間,它可以將輸入速率降到最低。表2是對(duì)EMV規(guī)范中T=0協(xié)議的ATR總結(jié)。
一旦ATR過程結(jié)束,開始交易過程。不論是哪種特定的操作,交易都是由終端向智能卡發(fā)送指令,智能卡執(zhí)行這些指令(并可將執(zhí)行結(jié)果返回給終端)??ǖ牟僮骺梢允呛?jiǎn)單地指定內(nèi)存讀操作,也可以是比較復(fù)雜的,如執(zhí)行一次加密運(yùn)算。不論是哪種,終端與卡之間的通信都按照應(yīng)用協(xié)議數(shù)據(jù)單元(APDU)的格式進(jìn)行。
終端發(fā)出的特殊指令信息(C-APDU)將從卡端產(chǎn)生一個(gè)相應(yīng)的應(yīng)答信息(R-APDU),這些信息稱為APDU指令對(duì)。EMV規(guī)范對(duì)這兩種指令格式進(jìn)行了詳細(xì)定義,由終端發(fā)送的指令基本結(jié)構(gòu)必須包含4Byte的報(bào)頭,隨后是長(zhǎng)度可選的數(shù)據(jù)部分,如圖2(a)所示。報(bào)頭的4個(gè)字節(jié)包括CLA、INS、P1和P2,它們規(guī)定了指令的類別,指令碼及支持特定指令的參數(shù)。C-APDU報(bào)頭后面跟隨數(shù)據(jù)的字節(jié)數(shù),由命令Lc指定,而終端希望智能卡應(yīng)答信息的字節(jié)數(shù)由指令Le指定。
智能卡的應(yīng)答信息(R-APDU)也由多個(gè)字節(jié)組成,如圖2(b)所示,格式化成3段,分別是數(shù)據(jù)(主體)和代表指令處理狀態(tài)的SW1、SW2(尾部)。正常完成指令時(shí),智能卡返回SW1的值為0x90和SW2的值0x00,其它返回值表示運(yùn)行錯(cuò)誤或有提示信息產(chǎn)生1。
為了處理全部的終端交易,安全微控制器DS5002可以編程實(shí)現(xiàn)握手和數(shù)據(jù)傳輸協(xié)議。我們已經(jīng)針對(duì)DS5002和DS8007(包含在DS8007評(píng)估板內(nèi))開發(fā)完成了一些例程,實(shí)現(xiàn)終端與IC卡的會(huì)話過程,包括上電、ATR、APDU和斷電。如果將評(píng)估板連接到串口接收終端,評(píng)估板及其軟件將以38400的波特率通過RS232串口傳輸數(shù)據(jù)。
關(guān)于該軟件的詳細(xì)說明已經(jīng)超出本文范疇,但我們可以提供基于DS5002和接口芯片DS8007設(shè)計(jì)方案所能完成的基本智能卡接口的源代碼,設(shè)計(jì)方案的電路如圖3所示。軟件可從目錄下的an4029_sw.zip文件中獲得。該文件包含全部的C代碼(main.c,ds8007.c,LCD Funct.c)和產(chǎn)生HEX文件(DS8007.hex)所需的匯編源代碼(Startup.a51)。這些代碼用Keil PK51和mVision集成開發(fā)環(huán)境編譯并鏈接。mVision項(xiàng)目文件(ds8007.Uv2)也在這個(gè) .zip文件中可以找到。編譯完后,.HEX文件被下載到DS8007評(píng)估板并運(yùn)行。
為了測(cè)試?yán)?,我們使用了一?a target="_blank">ACS提供的基于微控制器的智能卡。這種卡可以執(zhí)行內(nèi)嵌的ACS智能卡操作系統(tǒng)版本1,或ACOS1。該卡具備如下特點(diǎn):用來存放應(yīng)用數(shù)據(jù)的8kB E2PROM、DES和MAC功能、基于隨機(jī)數(shù)的過程密鑰、相互認(rèn)證的密鑰對(duì)、持卡人可以更改的PIN碼,符合ISO-7816-3,T=0協(xié)議。
ACOS1文件規(guī)定IC卡應(yīng)該返回19Byte的復(fù)位數(shù)據(jù)(ATR),返回T0的數(shù)值是0xBE。高半字節(jié)(0xB)表明TA1、TB1和TD1將在TS后續(xù)的ATR中出現(xiàn)。低半字節(jié)(0xE)表明ATR響應(yīng)中有14個(gè)歷史字節(jié)。因此,從卡傳送過來的ATR一共有19個(gè)字節(jié)。
責(zé)任編輯:gt
評(píng)論
查看更多