摘要:DS8007是一款低成本的多協議雙智能卡接口,滿足所有ISO 7816、EMV?和GSM11-11的要求。這個混合信號外設可以管理微控制器和兩個獨立智能卡間的所有接口細節。本應用筆記介紹智能卡以及如何與智能卡通信的一些基礎知識,還會提供智能卡通過DS8007與DS5002安全處理器接口的軟件。
圖1. 智能卡舉例
智能卡中嵌入的集成電路可以是簡單的、非易失性的存儲設備,或者是一些如微控制器一樣高級的電路,可以執行復雜的操作。支付卡中簡單的非易失性存儲設備可以取代磁條來存儲數據。在很多的類似設備中,存儲體中會組合一些附加邏輯,用來限制對部分或者全部存儲體的讀取。但是,智能卡的真正能力在于嵌入的微控制器具有執行數據運算和/或加密的功能。這個處理能力可以提高安全性能。然而隨著復雜度的提高,卡的成本也提高了。嵌入控制器的智能卡成本在$7.00至$15.00 (美元)之間,而使用磁條的支付卡成本可以低至$0.751 (美元)。智能卡更高的成本減緩了從簡單技術的全面轉移,但是隨著對安全需求的增加,對智能卡的需求也會增加。
DS8007提供了微控制器與兩個獨立的智能卡物理連接時所必須的所有電信號。器件包含有專用的內部時序電路,用來控制卡的自動激活和關閉,以及一個用來數據通信的ISO UART。器件在2.7V至6.0V的電源電壓下都可以工作,通過電荷泵和電壓調節器,還可以輸出兩路獨立的智能卡供電電壓,每路都可選1.8V,3.0V或5V。通過標準的并行8bit數據線可以與微控制器進行通信,可以配置為非復用方式,或者是數據和地址復用。
表1. 智能卡連接
圖2. 接點尺寸和位置
VCC觸點(C1)
這個觸點為卡片提供電源電壓。最初的規范中VCC只包括5V DC ±10%。但是,目前在分階段的過渡到低電壓卡。只能支持最初規范的卡被稱為A類卡,在2009年的6月底前它們會被AB類卡或者ABC類卡取代。不同類型卡的VCC規范:
A類卡: 4.5V ≤ VCC ≤ 5.5V @ ≤ 50mA
AB類: 2.70V ≤ VCC ≤ 3.3V @ ≤ 50mA
ABC類: 1.62V ≤ VCC ≤ 1.98V @ ≤ 30mA
DS8007卡接口包含有電荷泵和電壓調節器,當器件工作在2.6V至6.0V的電源電壓時,它可以為所有三種卡類型提供合適的電壓。
I/O觸點(C7)
智能卡上的I/O觸點在接收來自終端的數據時作為輸入(接收模式),或者給終端發送數據時作為輸出(發送模式)。在接收模式,當輸入符合下面的規范時卡會識別有效的數據。
A類卡
A類卡
時鐘觸點(C3)
時鐘觸點是個輸入端,輸入源為接口終端,比如DS8007。這個信號用來控制交易過程中的數據傳輸時鐘。指定的頻率范圍為1.0MHz至5.0MHz。這個觸點具有以下的電氣規范:
A類卡
RST觸點是卡上的輸入端,輸入源為接口終端。這個信號低有效,會引起卡的異步復位。這個觸點與CLK觸點有相同的電氣特性,但是它的最大上升和下降時間是1.0μs。
從上面的規范可以看到,與智能卡接口的終端必須提供不同的電源電壓和信號電平。接口規范也要求終端可以承受卡觸點任意兩點間的短路。鑒于這些原因,與采用大量的分立模擬IC來構建電路相比,采用專用設備來提供必要的電源電壓和信號電平很明顯更有優勢。DS8007就是這樣的一個專用器件。除了包含有實現這些功能的模擬電路外,它還包含有FIFO和其它數控邏輯,可以實現一個完整卡操作所需的狀態排序和同步。
每個字符的含義
信息在智能卡和終端的接口間通過雙向I/O觸點串行通信。比特的持續時間被定義為基本時間單元,或者ETU。ETU的時間周期與終端通過CLK觸點提供的時鐘信號有直接的線性關系。ATR期間字符的比特同步被稱為初始ETU。這個初始ETU由下面的公式定義:
式中?是以赫茲為單位的時鐘信號頻率。
ATR之后,比特持續時間被稱為當前ETU,它是參數F、D和時鐘頻率的函數(參數F和D在下面的TA1字符部分有更詳細的討論)
式中? 是以赫茲為單位的時鐘信號頻率。
任何通信中的每個字符都由10個比特組成,所以總的持續時間就是10個ETU。字符的第一個比特位被稱為起始位,它總是低電平。起始位之前,I/O線上會保持默認的高電平。字符的最后一個比特是奇偶位,它或高或低,由數據源確定,所以可以保持字符中1的總數為偶數。圖3所示為這個比特碼型的圖例。
圖3. 10位字符幀
卡插入終端后,并且當所有觸點保持"低"狀態時,電源電壓迅速施加于VCC觸點。當終端確定電壓穩定而且處于規定的范圍內時,終端的I/O觸點驅動器被置為接收模式,其時鐘信號傳輸至卡的CLK觸點。在時鐘信號初始化的200個周期內,終端的I/O線一直處于接收模式,而卡會將其I/O線置為發送模式。在40,000至45,000個時鐘周期后,終端對卡的RST觸點釋放一個高有效信號。在400至40,000個時鐘周期后,卡通過一系列的字符串來作出響應,稱為ATR。ATR包含的信息會詳細確定后續通信如何實現,包括T=0或T=1協議的選擇。如果沒有指定協議,那么假定為T=0。(下文會有ATR和ATR包含信息的完整細節。)
EMV規范為協議T=0定義的ATR內容如表2所示,協議T=1時如表3所示。
表2. 基本的EMV ATR (T=0)
表3. 基本的EMV ATR (T=1)
*注意:m.s. nibble = 最高有效半字節;l.s. nibble = 最低有效半字節
TS初始字符
ATR序列的第一個字符被定義為初始字符TS。根據它的比特碼型,這個字符同步信息定義所有后續字符的極性。TS的前四個比特組成如下:低電平的開始位,然后是兩個高電平比特,緊隨其后又是一個低電平位。這個固定的比特碼型保證了同步。后續的三個比特可以都為高電平代表直接約定,也可以是都為低電平代表反向約定。對于直接約定,I/O線上的高電平就代表邏輯1,數據傳輸時首先發送最低有效位。對于反向約定,I/O線上的低電平就代表邏輯1,數據傳輸時首先發送最高有效位。由于規范容許反向約定,所以EMV建議所有當前的卡設計都采用直接約定。最后的三個比特是兩位高電平、一位低電平。ATR或者任何其它10比特字符幀中的最后一個比特位都是奇偶位,它會通過置高或者置低來保證幀中1的總數目為一個偶數。
T0格式字符
ATR序列的第二個字符被定義為格式字符,稱為T0。這個字符包含有兩個部分,都用來確定有哪些字符會包含在其余的ATR序列中。最高有效的四個比特位用Y1來表示,它們代表TA1,TB1,TC1或者TD1是否會被發送。對于Y1的每個邏輯1,每個字符的出現由下面的方式確定:
Bit 8 (msb) = 1代表字符TD1會被發送
Bit 7 = 1代表字符TC1會被發送
Bit 6 = 1代表字符TB1會被發送
Bit 5 = 1代表字符TA1會被發送
T0的四個最低有效比特位用K來表示。這些比特將會確定包含在其余ATR系列中的"歷史字節"的數量,0至15個。歷史字節會傳送一些卡的通用信息,比如卡的制造商,卡中的芯片,芯片中的掩模ROM,或者卡的使用期限等。無論是ISO 7816還是EMV規范都沒有精確定義哪些(如果有)信息應該被傳送。
從上面的表2我們可以看到,Y1的b7和b6為高,比特b8和b5為低('6x')。這代表TC1和TB1會被發送,而字符TA1和TD1則不發送(如表中所示)。對于協議T=0,字符TB1和TC1完成最基本的ATR序列。在表3中,Y1的比特8也為高,所以對于協議T=1來講,字符TD1也會被發送。
TA1字符
無論是協議T=0或是T=1,基本的EMV ATR響應中都沒有發送字符TA1,它在ISO 7816規范中被定義用作其它通信。在使用時,TA1會分為上下兩個半字節。上半字節確定時鐘速率變換因子F,它用來調整時鐘信號的頻率。下半字節確定比特速率調整因子D,它用來調整ATR后續的比特持續時間。上面的公式2中有對這些參數的使用。在ATR期間初始ETU選用默認值,F = 372, D = 1,如果沒有在基本ATR以外修改,那么在后續交互中依然使用默認值。
TB1字符
TB1字符傳送關于智能卡編程電壓要求的信息。比特b1至b5 (稱為PI1)傳送編程電壓,比特b6和b7 (稱為II)傳送智能卡要求的最大編程電流。對于基本的ATR,TB1 = '00'代表VPP引腳在智能卡上沒有連接。
TC1字符
TC1字符傳送N的大小,它用來確定終端向智能卡發送連續字符時要加入的額外保護時間。這個值與卡發往終端的字符或者有相反發送方向的兩個字符都沒有關系。N是個二進制數,它代表著作為額外保護時間而附加的ETU。當TC1 = 'FF'時,兩個字符間應該使用最小延時。對于協議T=0,此值為12個ETU,對于協議T=0,此值為11。N的大小可以在0至255間任意取值。如果TC1沒有在ATR中返回,終端會默認接收到00而繼續工作。因為這個值可以在字符發送間增加時間,所以為了加速交易應該減小此值。
TD1字符
TD1字符表明如果要發送更多的接口字節時,將會采用哪個協議。字符TD1是通用字符TDx的一個特定實例。TDx的最高有效半字節代表是否TA(x + 1), TB(x + 1),TC(x + 1)或TD(x + 1)要被發送。對于每個邏輯1,后續發送的每個字符是否出現按照下面的原則確定:
Bit 8 (msb) = 1代表字符TD(x + 1)會被發送
Bit 7 = 1代表字符TC(x + 1)會被發送
Bit 6 = 1代表字符TB(x + 1)會被發送
Bit 5 = 1代表字符TA(x + 1)會被發送
TD1字符(統一為TDx)的最低有效半字節的值或者是0x0,或者是0x1,分別代表協議T=0或者T=1。
如果采用協議T=0,字符TD1不會包含在ATR序列中,后續傳送會采用協議T = 0。如果采用協議T=1,字符TD1會包含在內,其值為0x81。這個值代表將會有TD2,而且所有的后續傳送會采用協議T=1。
TA2字符
由于無論是協議T=0或是T=1,TA2字符都不在基本的EMV ATR響應中發送,所以它由ISO 7816規范定義。TA2的出現與否用來確定在ATR之后,智能卡是工作在特殊模式還是交易模式。沒有TA2就代表操作將采用交易模式。
TB2字符
由于無論是協議T=0或是T=1,TB2字符都不在基本的EMV ATR響應中發送,所以它由ISO 7816規范定義。字符TB2傳送PI2,它確定智能卡需要的編程電壓值。當存在字符TB2時,字符TB1中的PI1值將會被取代。
TC2字符
由于無論是協議T=0或是T=1,TC2字符都不在基本的EMV ATR響應中發送,所以它由ISO 7816規范定義。當存在TC2時,它將指定采用協議類型T=0。TC2會傳送工作等待時間整數(WI),它用來確定由智能卡發送的任意字符和由智能卡或者終端發送的前一個字符在起始位的上升沿之間的最大間隔。工作等待時間的數值按下式計算:
式中D是比特速率調整因子(參見上面TA1部分的介紹)。
當ATR系列中不含有TC2時,假定WI = 0x0A為其默認值。
TD2字符
TD2字符和TD1字符具有同樣的功能。詳細情況請看上面的TD1介紹。對于協議T=1,表3中出現了TD2,其值為0x31。這個值代表:將會有TA3和TB3,沒有TC3和TD3,而協議類型會是T=1。
TA3字符
TA3字符為智能卡傳送信息域大小整數(IFSI)。IFSI為智能卡確定信息域的大小,它是卡能接收的數據塊的信息域(INF)部分的最大長度。域的大小可以是0x01至0xFE間的任意值。值0x0和0xFF保留給將來使用。在采用T=1協議的基本ATR中,TA3的數值范圍是0x10至0xFE,因此代表著IFSC在16至254個字節之間。對于不含TA3的ATR,終端會假定為默認值0x20。
TB3字符
TB3字符代表字符等待時間整數(CWI)和塊等待時間整數(BWI)的數值,它們用來計算字符等待時間(CWT)和塊等待時間(BWT)。TB3的最低有效半字節(b1至b4)代表CWI的數值,最高有效半字節(b5至b8)代表BWI的數值。在采用T=1協議的基本ATR中,TB3字符的最低有效半字節范圍為0至5 (CWI = 0至5),最高有效半字節范圍為0至4 (BWI = 0至4)。
TC3字符
由于無論是協議T=0或是T=1,TC3字符都不在基本的EMV ATR響應中發送,所以它由ISO 7816規范定義。當存在TC3時,它代表將要采用的塊錯誤檢測類型。當沒有TC3時,塊錯誤檢測將采用默認的縱向冗余校驗(LRC)。
TCK字符
TCK字符是校驗字符,它的值可以用來核對ATR期間發送數據的完整性。只要T0至TCK間包含的所有字節做異或運算結果為0,TCK可以是任意值。T=0時不采用TCK,但是在其它所有情況下都會在ATR中返回。
ATR的總結
終端接收至ATR序列的最后一個字符,所有必要的參數都從卡發送到了終端后,對DS8007可以進行接口參數的必要調整。由此可以開始后續通信。
執行一個應用時,智能卡和終端必須交互信息。信息的共享通過命令響應數據交換來完成。終端創建并發送一個命令給智能卡,然后智能卡會對指令譯碼并發出響應。這個命令響應信息對被稱為一個應用協議數據單元(APDU)。終端發送的特定命令信息(C-APDU)會收到來自卡的特定響應信息(R-APDU)。這些信息都稱作為APDU命令響應對。EMV規范中詳細介紹了這兩種信息類型的格式。它們的格式如下所述。
C-APDU格式
終端發起所有的命令APDU。它們必須包含4字節的頭,隨后是可選的數據部分,其長度可變。C-APDU中數據的字節數由命令字節Lc指定,而終端希望從智能卡響應中接收的字節數由指令Le指定。表4所示為C-APDU的格式,表5為字符描述。
表4. APDU命令結構
表5. APDU命令內容說明
命令APDU的第一個字節被定義為指令類別,稱為CLA。這個字節除了0xFF外可以是任意的8比特值,但是目前只在最高優先半字節使用了0至8。最高優先半字節為0時定義為行業間的命令,為8時定義為EMV規范專用。
命令APDU的第二個字節是指令代碼,稱為INS。這個字節只有在最低有效位為0,并且最高有效半字節不是6或者9的情況下才有效。
必須的頭部分中,P1和P2包含有特定命令的參數,可以是任意值。如果沒有使用,參數字節必須取值0x00。
R-APDU
智能卡接收并譯碼來自終端的APDU命令后會返回響應。如同規范中定義的一樣,響應由長度可變的可選數據部分,跟隨一個必須的兩字節報尾組成。表6所示為其格式,表7所示為APDU響應的內容。
表6. APDU卡響應格式
表7. APDU命令響應內容
智能卡響應的預期長度通過APDU命令的Le代碼部分發送,響應的實際長度被稱為Lr。雖然卡并不發送Lr的值,如果應用需要的話終端可以計算此值。
對于正常的命令結束,智能卡會在SW1中返回0x90,在SW2中返回0x00。其它任何響應都代表有錯誤或者告警發生2。
圖4. 軟件輸出
我們采用Advanced Card Systems (ACS)公司的基于微控制器的智能卡來測試這個范例軟件。作為基于微控制器的設備,這張卡會執行稱為ACS智能卡操作系統版本1,或者ACOS1的嵌入式操作系統中的功能。這張卡具有以下的特性:
對于這個有一個APDU的范例軟件,執行開始會話命令。這個命令具有如下的格式:
對開始會話命令的響應具有如下的格式;
圖4所示的軟件輸出表明來自卡的返回隨機數是0xCB,0xC4,0xBD,0xD5,0xA4,0x7E,0x36和0x3F。它還表明返回狀態為0x90,0x00,這表明成功完成了命令。
1java.sun.com/products/javacard/smartcards.html。來源:Gartner Group
2EMV規范的Book-1 Part II Section 6有對命令APDU響應錯誤或者警告狀態代碼的詳細介紹。
本文的一個中文版發表在EDN China的2007年9月刊當中。
概述
什么是智能卡?智能卡通常定義為包含有嵌入式集成電路的小型卡片。由于有嵌入式的集成電路,智能卡有時被稱為集成電路卡,或者ICC。圖1所示為一個典型的例子。由于可適用于很多不同的場合,所以這些卡片替代了我們熟悉的支付卡(借記卡或者信用卡),它們利用磁條來存儲卡的賬戶信息。在支付應用中,向智能卡的轉(遷)移主要是因為這樣可以增加功能,特別是采用這種技術后可以提高安全性。但是,在評估最后一項能力時必須考慮到智能卡更高的成本。圖1. 智能卡舉例
智能卡中嵌入的集成電路可以是簡單的、非易失性的存儲設備,或者是一些如微控制器一樣高級的電路,可以執行復雜的操作。支付卡中簡單的非易失性存儲設備可以取代磁條來存儲數據。在很多的類似設備中,存儲體中會組合一些附加邏輯,用來限制對部分或者全部存儲體的讀取。但是,智能卡的真正能力在于嵌入的微控制器具有執行數據運算和/或加密的功能。這個處理能力可以提高安全性能。然而隨著復雜度的提高,卡的成本也提高了。嵌入控制器的智能卡成本在$7.00至$15.00 (美元)之間,而使用磁條的支付卡成本可以低至$0.751 (美元)。智能卡更高的成本減緩了從簡單技術的全面轉移,但是隨著對安全需求的增加,對智能卡的需求也會增加。
DS8007提供了微控制器與兩個獨立的智能卡物理連接時所必須的所有電信號。器件包含有專用的內部時序電路,用來控制卡的自動激活和關閉,以及一個用來數據通信的ISO UART。器件在2.7V至6.0V的電源電壓下都可以工作,通過電荷泵和電壓調節器,還可以輸出兩路獨立的智能卡供電電壓,每路都可選1.8V,3.0V或5V。通過標準的并行8bit數據線可以與微控制器進行通信,可以配置為非復用方式,或者是數據和地址復用。
智能卡詳述
人們所熟知的大部分智能卡的形狀就是信用卡大小的一個設備,詞組"智能卡"也可以用來指用戶識別模塊(SIM),它大概有郵票那么大,經常用在蜂窩電話中。這種SIM的形狀也可以用在支付終端里,為終端提供特定的支付系統數據和詳細的應用信息。信用卡大小的設備(部分)通常由聚氯乙烯(PVC)來制造,而且一般會模壓出賬戶號碼以及有可能加上一個有效日期。無論采用什么形式,所有的機電結構規范都基于ISO 7861系列標準。另外,EuroCard?,MasterCard?和Visa? (EMV)公司的一個聯盟也已經專門為解決智能卡以及它們在支付系統中的應用開發了一套標準(稱作EMV規范)。EMV規范通常基于ISO 7816文件。智能卡觸點
上述的標準中明確的定義了智能卡觸點的數目、排位和功能。圖2所示為智能卡上集成電路的位置和觸點的尺寸。ISO 7816定義了8個可能的觸點位置。在這8個位置中,目前有5個用在EMV應用中。表1所列為這些觸點的名稱和功能。ISO 7816定義觸點C6為VPP,但是根據EMV規范,目前的卡并沒有使用這個編程電壓。觸點C4和C8沒有使用,而且不需要有物理接頭。下面有EMV規范定義的每個觸點的更詳細的討論。表1. 智能卡連接
Contact Name | Contact Function |
C1 | Supply voltage to card (VCC) |
C2 | Reset (RST) |
C3 | Clock (CLK) |
C4 | Provided on the DS8007; not used in EMV |
C5 | Ground (GND) |
C6 | VPP; not used in EMV |
C7 | Input/output (I/O) |
C8 | Provided on the DS007; not used in EMV |
圖2. 接點尺寸和位置
VCC觸點(C1)
這個觸點為卡片提供電源電壓。最初的規范中VCC只包括5V DC ±10%。但是,目前在分階段的過渡到低電壓卡。只能支持最初規范的卡被稱為A類卡,在2009年的6月底前它們會被AB類卡或者ABC類卡取代。不同類型卡的VCC規范:
A類卡: 4.5V ≤ VCC ≤ 5.5V @ ≤ 50mA
AB類: 2.70V ≤ VCC ≤ 3.3V @ ≤ 50mA
ABC類: 1.62V ≤ VCC ≤ 1.98V @ ≤ 30mA
DS8007卡接口包含有電荷泵和電壓調節器,當器件工作在2.6V至6.0V的電源電壓時,它可以為所有三種卡類型提供合適的電壓。
I/O觸點(C7)
智能卡上的I/O觸點在接收來自終端的數據時作為輸入(接收模式),或者給終端發送數據時作為輸出(發送模式)。在接收模式,當輸入符合下面的規范時卡會識別有效的數據。
A類卡
- 輸入高電壓: 0.7 × VCC ≤ VIH ≤ VCC
輸入低電壓: 0.0 ≤ VIL ≤ 0.8V
上升時間/下降時間: ≤ 1μs
- 輸入高電壓: 0.7 × VCC ≤ VIH ≤ VCC
≤VCC
輸入低電壓: 0.0 ≤ VIL ≤ 0.2 × VCC
上升時間/下降時間: ≤ 1μs
A類卡
- 輸出高電壓: 0.7 × VCC ≤ VOH ≤ VCC, -20μA < IOH < 0, VCC = min
輸出低電壓: 0.0 ≤ VOL ≤ 0.4V, 0 < IOL < 1mA, VCC = min
上升時間/下降時間: ≤ 1.0μs
- 輸出高電壓: 0.7 × VCC ≤ VOH ≤ VCC, -20μA < IOH < 0, VCC = min
輸出低電壓: 0.0 ≤ VOL ≤ 0.15 × VCC, 0 < IOL < 1mA, VCC = min
上升時間/下降時間: ≤ 1.0μs
時鐘觸點(C3)
時鐘觸點是個輸入端,輸入源為接口終端,比如DS8007。這個信號用來控制交易過程中的數據傳輸時鐘。指定的頻率范圍為1.0MHz至5.0MHz。這個觸點具有以下的電氣規范:
A類卡
- 輸入高電壓: VCC - 0.7 ≤ VIH ≤ VCC
輸入低電壓: 0.0 ≤ VIL ≤ 0.5V
上升時間/下降時間: ≤ 9%的時鐘周期
- 輸入高電壓: 0.7 × VCC ≤ VIH ≤ VCC
輸入低電壓: 0.0 ≤ VIL ≤ 0.2 × VCC
上升時間/下降時間: ≤ 9%的時鐘周期
RST觸點是卡上的輸入端,輸入源為接口終端。這個信號低有效,會引起卡的異步復位。這個觸點與CLK觸點有相同的電氣特性,但是它的最大上升和下降時間是1.0μs。
從上面的規范可以看到,與智能卡接口的終端必須提供不同的電源電壓和信號電平。接口規范也要求終端可以承受卡觸點任意兩點間的短路。鑒于這些原因,與采用大量的分立模擬IC來構建電路相比,采用專用設備來提供必要的電源電壓和信號電平很明顯更有優勢。DS8007就是這樣的一個專用器件。除了包含有實現這些功能的模擬電路外,它還包含有FIFO和其它數控邏輯,可以實現一個完整卡操作所需的狀態排序和同步。
終端接口要求
卡的操作過程包含有下面幾步:- 將卡插入終端,觸點連接并激活
- 卡復位,終端和卡之間建立通信(ATR時序—如下)
- 執行交易
- 關閉觸點,移除卡片
每個字符的含義
信息在智能卡和終端的接口間通過雙向I/O觸點串行通信。比特的持續時間被定義為基本時間單元,或者ETU。ETU的時間周期與終端通過CLK觸點提供的時鐘信號有直接的線性關系。ATR期間字符的比特同步被稱為初始ETU。這個初始ETU由下面的公式定義:
初始ETU = 372/?秒 | (公式1) |
式中?是以赫茲為單位的時鐘信號頻率。
ATR之后,比特持續時間被稱為當前ETU,它是參數F、D和時鐘頻率的函數(參數F和D在下面的TA1字符部分有更詳細的討論)
當前ETU = F/(D?)秒 | (公式2) |
式中? 是以赫茲為單位的時鐘信號頻率。
任何通信中的每個字符都由10個比特組成,所以總的持續時間就是10個ETU。字符的第一個比特位被稱為起始位,它總是低電平。起始位之前,I/O線上會保持默認的高電平。字符的最后一個比特是奇偶位,它或高或低,由數據源確定,所以可以保持字符中1的總數為偶數。圖3所示為這個比特碼型的圖例。
圖3. 10位字符幀
智能卡通信協議
在ISO 7816規范中,用四個比特位來選擇卡操作時的通信協議。目前主要采用16個可用協議中的2個,他們被定義為T=0和T=1。兩個協議都是半雙工的(每次都是單方向)異步通信。T=0協議是基于字符的格式,T=1則是基于塊的格式。EVM兼容的所有智能卡必須支持T=0或者T=1協議,而終端必須兩種方式都支持。卡插入終端后,并且當所有觸點保持"低"狀態時,電源電壓迅速施加于VCC觸點。當終端確定電壓穩定而且處于規定的范圍內時,終端的I/O觸點驅動器被置為接收模式,其時鐘信號傳輸至卡的CLK觸點。在時鐘信號初始化的200個周期內,終端的I/O線一直處于接收模式,而卡會將其I/O線置為發送模式。在40,000至45,000個時鐘周期后,終端對卡的RST觸點釋放一個高有效信號。在400至40,000個時鐘周期后,卡通過一系列的字符串來作出響應,稱為ATR。ATR包含的信息會詳細確定后續通信如何實現,包括T=0或T=1協議的選擇。如果沒有指定協議,那么假定為T=0。(下文會有ATR和ATR包含信息的完整細節。)
響應復位(ATR)
在最初被終端復位后,EMV智能卡通過一串被稱為響應復位或者ATR的字符來做出響應。這些字符包括一個初始字符,TS,然后跟隨有最多32個附加字符。這些字符一起為終端提供如何與卡進行后續工作通信的信息。下面的部分介紹每一個字符。EMV規范為協議T=0定義的ATR內容如表2所示,協議T=1時如表3所示。
表2. 基本的EMV ATR (T=0)
Character | Value | Remarks |
TS | '3B' or '3F' | Indicates direct (3B) or inverse (3F) convention. |
T0 | '6x | TB1 and TC1 present, TA1 and TD1 absent; x indicates the number of historical bytes present. |
TB1 | '00' | VPP is not required. |
TC1 | '00' to 'FF' | Indicates the amount of extra guard time required. Value 'FF' has a special meaning. (See TC1 description below.) |
表3. 基本的EMV ATR (T=1)
Character | Value | Remarks |
TS | '3B' or '3F' | Indicates direct (3B) or inverse (3F) convention. |
T0 | 'Ex' | TB1, TC1, and TD1 present, TA1 is absent; x indicates the number of historical bytes present. |
TB1 | '00' | VPP is not required. |
TC1 | '00' to 'FF' | Indicates the amount of extra guard time required. |
TD1 | '81' | TA2, TB2, and TC2 absent; TD2 present; T=1 to be used. |
TD2 | '31' | TA3 and TB3 present; TC3 and TD3 absent; T=1 to be used. |
TA3 | '10' to 'FE' | Returns IFSI, which indicates the initial value for the card's information field size and IFSC of 16 bytes to 254 bytes. |
TB3 | m.s. nibble* '0' to '4'; l.s. nibble '0' to '5' | BWI = 0 to 4 CWI = 0 to 5 |
TCK | ? | Check character. Exclusive ORing of all ATR bytes from T0 to TCK inclusive is null. |
TS初始字符
ATR序列的第一個字符被定義為初始字符TS。根據它的比特碼型,這個字符同步信息定義所有后續字符的極性。TS的前四個比特組成如下:低電平的開始位,然后是兩個高電平比特,緊隨其后又是一個低電平位。這個固定的比特碼型保證了同步。后續的三個比特可以都為高電平代表直接約定,也可以是都為低電平代表反向約定。對于直接約定,I/O線上的高電平就代表邏輯1,數據傳輸時首先發送最低有效位。對于反向約定,I/O線上的低電平就代表邏輯1,數據傳輸時首先發送最高有效位。由于規范容許反向約定,所以EMV建議所有當前的卡設計都采用直接約定。最后的三個比特是兩位高電平、一位低電平。ATR或者任何其它10比特字符幀中的最后一個比特位都是奇偶位,它會通過置高或者置低來保證幀中1的總數目為一個偶數。
T0格式字符
ATR序列的第二個字符被定義為格式字符,稱為T0。這個字符包含有兩個部分,都用來確定有哪些字符會包含在其余的ATR序列中。最高有效的四個比特位用Y1來表示,它們代表TA1,TB1,TC1或者TD1是否會被發送。對于Y1的每個邏輯1,每個字符的出現由下面的方式確定:
Bit 8 (msb) = 1代表字符TD1會被發送
Bit 7 = 1代表字符TC1會被發送
Bit 6 = 1代表字符TB1會被發送
Bit 5 = 1代表字符TA1會被發送
T0的四個最低有效比特位用K來表示。這些比特將會確定包含在其余ATR系列中的"歷史字節"的數量,0至15個。歷史字節會傳送一些卡的通用信息,比如卡的制造商,卡中的芯片,芯片中的掩模ROM,或者卡的使用期限等。無論是ISO 7816還是EMV規范都沒有精確定義哪些(如果有)信息應該被傳送。
從上面的表2我們可以看到,Y1的b7和b6為高,比特b8和b5為低('6x')。這代表TC1和TB1會被發送,而字符TA1和TD1則不發送(如表中所示)。對于協議T=0,字符TB1和TC1完成最基本的ATR序列。在表3中,Y1的比特8也為高,所以對于協議T=1來講,字符TD1也會被發送。
TA1字符
無論是協議T=0或是T=1,基本的EMV ATR響應中都沒有發送字符TA1,它在ISO 7816規范中被定義用作其它通信。在使用時,TA1會分為上下兩個半字節。上半字節確定時鐘速率變換因子F,它用來調整時鐘信號的頻率。下半字節確定比特速率調整因子D,它用來調整ATR后續的比特持續時間。上面的公式2中有對這些參數的使用。在ATR期間初始ETU選用默認值,F = 372, D = 1,如果沒有在基本ATR以外修改,那么在后續交互中依然使用默認值。
TB1字符
TB1字符傳送關于智能卡編程電壓要求的信息。比特b1至b5 (稱為PI1)傳送編程電壓,比特b6和b7 (稱為II)傳送智能卡要求的最大編程電流。對于基本的ATR,TB1 = '00'代表VPP引腳在智能卡上沒有連接。
TC1字符
TC1字符傳送N的大小,它用來確定終端向智能卡發送連續字符時要加入的額外保護時間。這個值與卡發往終端的字符或者有相反發送方向的兩個字符都沒有關系。N是個二進制數,它代表著作為額外保護時間而附加的ETU。當TC1 = 'FF'時,兩個字符間應該使用最小延時。對于協議T=0,此值為12個ETU,對于協議T=0,此值為11。N的大小可以在0至255間任意取值。如果TC1沒有在ATR中返回,終端會默認接收到00而繼續工作。因為這個值可以在字符發送間增加時間,所以為了加速交易應該減小此值。
TD1字符
TD1字符表明如果要發送更多的接口字節時,將會采用哪個協議。字符TD1是通用字符TDx的一個特定實例。TDx的最高有效半字節代表是否TA(x + 1), TB(x + 1),TC(x + 1)或TD(x + 1)要被發送。對于每個邏輯1,后續發送的每個字符是否出現按照下面的原則確定:
Bit 8 (msb) = 1代表字符TD(x + 1)會被發送
Bit 7 = 1代表字符TC(x + 1)會被發送
Bit 6 = 1代表字符TB(x + 1)會被發送
Bit 5 = 1代表字符TA(x + 1)會被發送
TD1字符(統一為TDx)的最低有效半字節的值或者是0x0,或者是0x1,分別代表協議T=0或者T=1。
如果采用協議T=0,字符TD1不會包含在ATR序列中,后續傳送會采用協議T = 0。如果采用協議T=1,字符TD1會包含在內,其值為0x81。這個值代表將會有TD2,而且所有的后續傳送會采用協議T=1。
TA2字符
由于無論是協議T=0或是T=1,TA2字符都不在基本的EMV ATR響應中發送,所以它由ISO 7816規范定義。TA2的出現與否用來確定在ATR之后,智能卡是工作在特殊模式還是交易模式。沒有TA2就代表操作將采用交易模式。
TB2字符
由于無論是協議T=0或是T=1,TB2字符都不在基本的EMV ATR響應中發送,所以它由ISO 7816規范定義。字符TB2傳送PI2,它確定智能卡需要的編程電壓值。當存在字符TB2時,字符TB1中的PI1值將會被取代。
TC2字符
由于無論是協議T=0或是T=1,TC2字符都不在基本的EMV ATR響應中發送,所以它由ISO 7816規范定義。當存在TC2時,它將指定采用協議類型T=0。TC2會傳送工作等待時間整數(WI),它用來確定由智能卡發送的任意字符和由智能卡或者終端發送的前一個字符在起始位的上升沿之間的最大間隔。工作等待時間的數值按下式計算:
工作等待時間 = 960 × D × WI | (公式3) |
式中D是比特速率調整因子(參見上面TA1部分的介紹)。
當ATR系列中不含有TC2時,假定WI = 0x0A為其默認值。
TD2字符
TD2字符和TD1字符具有同樣的功能。詳細情況請看上面的TD1介紹。對于協議T=1,表3中出現了TD2,其值為0x31。這個值代表:將會有TA3和TB3,沒有TC3和TD3,而協議類型會是T=1。
TA3字符
TA3字符為智能卡傳送信息域大小整數(IFSI)。IFSI為智能卡確定信息域的大小,它是卡能接收的數據塊的信息域(INF)部分的最大長度。域的大小可以是0x01至0xFE間的任意值。值0x0和0xFF保留給將來使用。在采用T=1協議的基本ATR中,TA3的數值范圍是0x10至0xFE,因此代表著IFSC在16至254個字節之間。對于不含TA3的ATR,終端會假定為默認值0x20。
TB3字符
TB3字符代表字符等待時間整數(CWI)和塊等待時間整數(BWI)的數值,它們用來計算字符等待時間(CWT)和塊等待時間(BWT)。TB3的最低有效半字節(b1至b4)代表CWI的數值,最高有效半字節(b5至b8)代表BWI的數值。在采用T=1協議的基本ATR中,TB3字符的最低有效半字節范圍為0至5 (CWI = 0至5),最高有效半字節范圍為0至4 (BWI = 0至4)。
TC3字符
由于無論是協議T=0或是T=1,TC3字符都不在基本的EMV ATR響應中發送,所以它由ISO 7816規范定義。當存在TC3時,它代表將要采用的塊錯誤檢測類型。當沒有TC3時,塊錯誤檢測將采用默認的縱向冗余校驗(LRC)。
TCK字符
TCK字符是校驗字符,它的值可以用來核對ATR期間發送數據的完整性。只要T0至TCK間包含的所有字節做異或運算結果為0,TCK可以是任意值。T=0時不采用TCK,但是在其它所有情況下都會在ATR中返回。
ATR的總結
終端接收至ATR序列的最后一個字符,所有必要的參數都從卡發送到了終端后,對DS8007可以進行接口參數的必要調整。由此可以開始后續通信。
應用協議數據單元(APDU)
如前所述,卡操作的下一個階段是交易的執行。在交易期間執行的特定操作依賴于卡的類型、賬戶(信用卡、借記卡等)以及用戶的請求。無論什么特定的操作,交易都通過終端對智能卡發送命令來完成。智能卡執行被請求的服務,有可能會回復一個結果。卡的操作可以簡單到讀取存儲器中的一個位置,或者復雜如執行加密工作。無論什么操作,終端和卡之間的通信通過應用協議數據單元,或APDU來實現。執行一個應用時,智能卡和終端必須交互信息。信息的共享通過命令響應數據交換來完成。終端創建并發送一個命令給智能卡,然后智能卡會對指令譯碼并發出響應。這個命令響應信息對被稱為一個應用協議數據單元(APDU)。終端發送的特定命令信息(C-APDU)會收到來自卡的特定響應信息(R-APDU)。這些信息都稱作為APDU命令響應對。EMV規范中詳細介紹了這兩種信息類型的格式。它們的格式如下所述。
C-APDU格式
終端發起所有的命令APDU。它們必須包含4字節的頭,隨后是可選的數據部分,其長度可變。C-APDU中數據的字節數由命令字節Lc指定,而終端希望從智能卡響應中接收的字節數由指令Le指定。表4所示為C-APDU的格式,表5為字符描述。
表4. APDU命令結構
CLA | INS | P1 | P2 | Lc | Data | Le |
←Mandatory Header→ | ←Conditional Body→ |
表5. APDU命令內容說明
Code | Description | Length |
CLA | Class of instruction | 1 |
INS | Instruction code | 1 |
P1 | Instruction parameter 1 | 1 |
P2 | Instruction parameter 2 | 1 |
Lc | Number of bytes present in command date field | 0 or 1 |
Data | String of data bytes sent in command (= Lc) | Variable |
Le | Maximum number of data bytes expected in data field of response | 0 or 1 |
命令APDU的第一個字節被定義為指令類別,稱為CLA。這個字節除了0xFF外可以是任意的8比特值,但是目前只在最高優先半字節使用了0至8。最高優先半字節為0時定義為行業間的命令,為8時定義為EMV規范專用。
命令APDU的第二個字節是指令代碼,稱為INS。這個字節只有在最低有效位為0,并且最高有效半字節不是6或者9的情況下才有效。
必須的頭部分中,P1和P2包含有特定命令的參數,可以是任意值。如果沒有使用,參數字節必須取值0x00。
R-APDU
智能卡接收并譯碼來自終端的APDU命令后會返回響應。如同規范中定義的一樣,響應由長度可變的可選數據部分,跟隨一個必須的兩字節報尾組成。表6所示為其格式,表7所示為APDU響應的內容。
表6. APDU卡響應格式
Data | SW1 | SW2 |
←Body→ | ←Trailer→ |
表7. APDU命令響應內容
Code | Description | Length |
Data | String of data bytes received in APDU response | Var (= Lr) |
SW1 | Command processing status | 1 |
SW2 | Command processing qualifier | 1 |
智能卡響應的預期長度通過APDU命令的Le代碼部分發送,響應的實際長度被稱為Lr。雖然卡并不發送Lr的值,如果應用需要的話終端可以計算此值。
對于正常的命令結束,智能卡會在SW1中返回0x90,在SW2中返回0x00。其它任何響應都代表有錯誤或者告警發生2。
范例代碼
本應用筆記提供的軟件包含在可下載文件an4029_sw.zip中。這個文件包括用來生成可執行十六進制文件(ds8007.hex)所需的所有的C(main.c,ds8007.c,LCD_Funct.c)和匯編語言(Startup.a51)源代碼。代碼通過Keil PK51專業開發套件和μVision?集成開發環境(IDE)編譯和鏈接。μVision項目文件(ds8007.Uv2)也包括在.zip文件中。Maxim提供可裝載并運行在DS8007智能卡接口板上的.HEX文件,接口板包含在DS8007評估(EV)套件中。范例軟件實現了一個完整的智能卡工作過程,包括上電、ATR,APDU以及斷電操作。當連接至一個啞終端時,電路板通過軟件會產生一個38,400波特率的RS-232串口輸出,這個輸出如下面的圖4所示。關于該軟件的詳細說明已經超出本應用筆記的范圍,但我們提供的源代碼可以作為一套完整的智能卡接口的基礎,該接口基于DS5002安全處理器和DS8007多協議雙智能卡接口芯片。圖4. 軟件輸出
我們采用Advanced Card Systems (ACS)公司的基于微控制器的智能卡來測試這個范例軟件。作為基于微控制器的設備,這張卡會執行稱為ACS智能卡操作系統版本1,或者ACOS1的嵌入式操作系統中的功能。這張卡具有以下的特性:
- 8kB的EEPROM存儲區,用于應用數據
- 兼容ISO 7816-3,T=0協議
- DES和MAC的能力
- 會話密鑰基于隨機數
- PIN可由持卡人更改
- 用于相互認證的密鑰對
對于這個有一個APDU的范例軟件,執行開始會話命令。這個命令具有如下的格式:
CLA | INS | P1 | P2 | P3 |
0x80 | 0x84 | 0x00 | 0x00 | 0x08 |
對開始會話命令的響應具有如下的格式;
Data | SW1 | SW2 |
RNDc (8 bytes from card) | Status | Status |
圖4所示的軟件輸出表明來自卡的返回隨機數是0xCB,0xC4,0xBD,0xD5,0xA4,0x7E,0x36和0x3F。它還表明返回狀態為0x90,0x00,這表明成功完成了命令。
結論
DS8007是個混合信號外設,它減輕了微控制器和智能卡間接口的難度,提供了與兩個獨立的智能卡物理連接時所必須的所有電信號。專用的內部時序電路用來控制卡的自動激活和關閉,還有一個用來數據通信的ISO UART。DS8007在2.7V至6.0V的電源電壓下都可以工作,通過電荷泵和電壓調節器,還可以同時輸出兩路獨立的智能卡供電電壓,每路都可選1.8V,3.0V或5V。通過標準的并行8比特數據線可以與微控制器進行通信,可以配置為非復用方式,或者是數據和地址復用方式。通過DS5002安全微處理器,并利用DS8007作為其智能卡接口,我們提供的軟件實現了一個完整的智能卡會話。智能卡在其ATR中返回的字符以38400的波特率在板子的串口上輸出,并且卡會發送"Start Session"命令APDU。結果隨機數也會在串口上輸出。1java.sun.com/products/javacard/smartcards.html。來源:Gartner Group
2EMV規范的Book-1 Part II Section 6有對命令APDU響應錯誤或者警告狀態代碼的詳細介紹。
本文的一個中文版發表在EDN China的2007年9月刊當中。
評論
查看更多