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