利用安全處理器和多協議接口簡化智能卡設計
文章出處:http://5052h112.com 作者:Frank Taylor 人氣: 發表時間:2011年09月27日
智能卡在今天快節奏的經濟生活中已經無處不在,它將逐步代替以磁條貯存帳戶信息的付費卡。智能卡通常制作成衣服口袋大小的卡片,與標準的信用卡類似,上面嵌入集成電路,一般是非易失存貯器或帶有非易失存貯器的安全處理器。智能卡上面還嵌入了多個電子觸點,通過這些電子觸點可以與內部存貯器或處理器通信。
智能卡的核心在于嵌入式微控制器對數據的處理和加密功能,處理能力增強了安全性。由于智能卡的成本較高,與IC卡接口需要更新相關的基礎設備,從而減緩了由磁卡向智能卡轉變的過程。然而,隨著對安全性要求的提高,特別是當手機和PDA存放了更多數據時,對IC卡及其它存貯介質(如SD、miniSD、microSD等)的需求也不斷提高。手機里的用戶識別模塊(SIM卡)和支付終端都可以看作智能卡。
為了處理智能卡交易,需要連接一個能夠安全地訪問內嵌存儲器或處理器的讀卡器,從而讀出信息并將操作結果寫回卡內。智能卡的物理尺寸和信號接口已經由標準組織定義(如ISO-7816),并且EuroCard、Mastercard和Visa(EMV)等組織也對智能卡尋址操作建立了一系列的標準。
智能卡的電氣接口由8個觸點組成,排列并嵌入到塑料卡上,見表1,8個觸點中,EMV只用了5個,其中兩個是電源和地,其余三個觸點是信號觸點,通過這三個觸點對卡進行讀、寫操作。C2是復位線,C3是時鐘線,C7是串行I/O線。
最初,卡的規范規定供電電壓為5V±10%(A類卡),現在已更改為3V±10%(AB類卡),以后要轉變成1.85V±10%(ABC類卡)。最終目標是在2009年6月全部淘汰A類卡,僅保留AB類或ABC類卡。
與智能卡接口的終端必須提供多種供電電壓和適當的信號電平,接口規范還要求終端能夠承受卡的任意兩個觸點間的短路。使用專用的芯片提供必要的電源和信號電平與比利用大量分立器件完成同樣任務更具優勢。DS8007就是一款這樣的專用器件,除了滿足上述模擬功能外,它還包含FIFO、處理器接口和支持卡通信的時序控制邏輯電路。
為了更好地理解MCU和多協議接口電路的工作,我們先來研究一下智能卡接口和與卡通信的基本步驟。我們給出了一個利用安全微控制器DS5002設計接口終端實現協議和數據傳輸的范例,DS8007接口電路提供信號接口、電荷泵和穩壓器,為智能卡提供適當的電源。用兩個芯片即可組成雙智能卡接口終端。
RST和CLK信號是智能卡的輸入,由接口終端(DS5002和DS8007)提供。復位信號為低電平有效,可異步復位智能卡。為了控制整個數據傳輸,頻率范圍從1MHz~5MHz的時鐘信號通過終端接口連接到智能卡的時鐘觸點(C3)。最后,數據通過I/O觸點(C7)從智能卡傳輸到讀卡器(發送模式),或數據從讀卡器傳輸到IC卡(接收模式)。EMV規范規定,除非I/O觸點正在發送數據,否則智能卡的I/O觸點應設置為接收模式。
終端接口要求
當卡插入終端時,卡觸點連接到終端觸點并被激活。控制器將卡復位,然后通過一串字符(請參考應答復位ATR)建立卡與終端的通信;接下來是交易處理,交易結束后,觸點置于禁止狀態,此后可將卡拔出或彈出。
ATR字符串建立最初的通信信息,包括指定協議、位時序和后續的數據通信信息。ATR序列包括初始化字符、TS及最大32個字節的附加字符,這些字符組合在一起,通知終端在隨后的交易中如何與卡通信。而后續的數據傳輸也能改變某些通信參數,ATR只是建立了最基本的通信條件。
字符傳輸中的每一位定義為基本時間單元(ETU),ETU的時間長短與智能卡的CLK時鐘周期成線性關系。ATR通信過程中的位定時稱為初始ETU。
任何通信字符都包含10位數據,持續時間為10ETU。第一位是起始位,它總是低電平,起始位之前I/O默認為高電平。每個字符的最后位是校驗位,由發送方決定,可能是高電平,也可能是低電平,其作用是保證整個字符中1的個數為偶數。圖1給出了一個位模板的例子,每個字符由10位組成,包括1個起始位、8個數據位和1個校驗位。每兩個字符之間通過一個最小安全周期進行分隔。
在ISO-7816規范中,4位用于選擇卡通信協議。目前16種協議中只用了兩種,分別命名為T=0和T=1。這兩種都是半雙工模式(任何時刻,數據只能單向傳輸)、異步通信方式。T=0是以基于字符的通訊格式,而T=1是基于數據塊的通信格式。所有兼容EMV標準的智能卡必須支持T=0或T=1協議,所有終端必須同時支持這兩種協議。
當卡插入終端后,所有觸點保持低電平狀態,電源VCC立即加到觸點C1。終端在確認電壓穩定并滿足規范限制后,將自身的I/O觸點置成接收模式,并向卡的C3提供時鐘(CLK)信號。在時鐘信號開始的200個時鐘周期內,終端須將I/O口置為高阻態(接收模式),卡的I/O口則置于發送模式。
經過40000個~45 000個時鐘周期后,終端向卡的RST端發出一個高電平,以激活卡??氃赗ST上升沿后400個~40000個時鐘周期內向終端發送一個ATR字符應答終端。ATR包含后續通信操作的詳細信息,包括T=0或T=1協議的選擇。如果沒有指定協議,則終端默認通信協議為T=0。
ATR序列的第一個字符定義為起始字符TS。TS的前4位包含1個低電平起始位,然后是兩個高電平位,最后是一個低電平位。這種固定位模板允許TS同步信息傳輸。TS的后續三位如果全為高平電,則表示后續數據為正向約定解碼(傳數據時,低位在前);如果這些位全部為低電平,則表示后續數據為反向約定解碼(傳數據時,高位在前)。EMV規范允許使用反向約定,但推薦在新的卡設計中使用正向約定。
TS的最后三位由兩個低電平位和一個校驗位組成,10位字符幀的最后一位是校驗位,該位電平保證這一幀中1的個數為偶數。
ATR序列的第二個字符為格式字符,稱為T0。這個字符包含兩部分,用來確定后續ATR所包含的字符。T0的高4位稱為Y1,用來指示隨后所發送的TA1、TB1、TC1或TD1,0個~4個字符的發送取決于Y 1中有多少位置1。
T0的低4位用K表示,代表數字0到15,表示后續ATR序列中包含的“歷史字節”。“歷史字節”提供卡的一般信息,比如卡的制造商、卡內芯片、芯片ROM或卡的使用期限等。ISO-7816和EMV規范都沒有對該部分信息傳輸進行準確的定義。
如果ATR中帶有TB1字符,則它傳遞的是智能卡對編程電壓的要求:b1~b5位(稱為PI1)指出編程電壓;b6和b7(稱為II)指出編程需要的最大電流。與基本EVM兼容的ATR,TB1=00,說明VPP沒有連接到智能卡。
TC1字符傳送的數字N決定從終端向智能卡發送的兩個相鄰字符之間需要加入的額外安全時間。這個數字不會影響從卡到終端的字符傳輸,也不影響兩個相反方向的字符傳輸。N所代表的二進制數指明加入額外安全時間的ETU數目。當TC1=FF時,兩個字符之間使用最短的延遲時間,在T=0協議中,這個時間是12個ETU,在T=1協議中,這個時間是11個ETU。N可以是0~255的任何數字。如果ATR中不含TC1,終端將默認為TC1=00而繼續進行后續工作。由于N可以在字符傳輸時加入額外的時間,它可以將輸入速率降到最低。表2是對EMV規范中T=0協議的ATR總結。
一旦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協議。
ACOS1文件規定IC卡應該返回19Byte的復位數據(ATR),返回T0的數值是0xBE。高半字節(0xB)表明TA1、TB1和TD1將在TS后續的ATR中出現。低半字節(0xE)表明ATR響應中有14個歷史字節。因此,從卡傳送過來的ATR一共有19個字節。
(作者:Frank Taylor,Maxim公司)