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