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