天天看點

ISO7816 傳輸協定 T0 T1

T=0協定不能用一條指令來實作,必須分為兩步實作:第一條指令為卡片提供資料,然後用另外一條相關的指令來取回資料。這樣給卡片的程式設計帶來很大麻煩,同時卡片記憶體中必須保留上一次操作需要傳回的資料。這時如果不及時發送取資料指令而發送其它指令,可能會将敏感資料洩漏,并産生其它問題。這些都是T=0協定考慮不周的地方。(6)終端傳輸層需要根據卡片傳回的子程位元組和狀态位元組執行相應的操作,使終端對資料的處理複雜化。(7)由于目前大多數接觸式終端隻支援T=0通訊協定,是以該協定仍将得到廣泛的應用。随着智能卡晶片功能的增強,對于資料傳輸量較大的應用,該協定将不再适用,面向塊的異步半雙工接觸式傳輸協定T=1将展現出優勢
      
 傳輸協定                

        本節規定了在異步半雙工傳輸協定中,終端為實作傳輸控制和特殊控制而發出的指令的結構及其處理過程。

        在此規定了兩種類型的協定:字元協定(T=0)和字組協定(T=1)。IC卡必須支援T=0協定或T=1協定中的一種,但不是同時支援這兩種協定。終端則必須同時支援T=0和T=1的兩種協定。在IC卡和終端間後續的通訊所用的協定在TD1中指明,必須是T=0或T=1,如果在ATR(複位應答)中無TD1,則設定為T=0。在複位應答後立即使用IC卡使用的協定,因為這裡沒有協定類型選擇(PTS)過程。在複位應答中提供的其它參數,以及相關的具體協定将在本節的相應部分予以規定。

        兩種協定都是按照如下的分層模型制定的:

——實體層,描述資訊位的交換,是兩種協定共用的。

——資料鍊路層,包括下列規定:

                   a) 字元幀,規定字元的交換,是兩種協定共用的。

      b) 字元協定T=0,規定了T=0所指定的字元交換。

                   c) 規定了T=0的錯誤檢測和校正。

             d) 字組協定T=1規定了T=1所指定的字組交換。

             e) 規定了T=1的錯誤檢測和校正。

——傳輸層,規定了各個協定的面向應用的封包傳送。

——應用層,根據應用協定規定了封包的交換,應用協定對于兩種傳送協定是共用的。

 

         (一)實體層:                

       T=0和T=1兩協定所用的實體層和字元幀已在前面章節做了規定,适用于IC卡和終端交換的所有封包。

 

         (二)資料鍊路層:                

       本小節說明T=0和T=1協定的時序、資訊字段INF(INFormation Field)和錯誤處理。

 

         1、               字元幀                

 在前面章節中描述的字元幀适用于IC卡和終端之間的所有交換封包。

 

         2、               T=0              字元協定                

1)         特定選項——用于              T=0              的時段配置設定                

         在複位應答中,TC1的值決定了終端送到IC卡的相鄰二字元的起始位的上升沿的最小區間在12至266etu之間。

由IC卡傳送給終端的相鄰二字元的起始位上升沿之間的最小間隔必須是12etu。

由IC卡送出的任何字元的起始位上升沿與由IC卡或終端送出的前一字元的起始位上升

        之間的最大時間間隔(工作等待時間)必須不超過960×D×WI=9,600etu。(位速率轉換因子D的預設值為1。當ATR中不回送TC2時,WI的預設值為10)。

相鄰二字元起始位上升沿間的最小時間間隔在反方向傳輸時不小于16個etu.。

        由終端傳送給IC卡的相鄰二字元的起始位上升沿之間的最小時間間隔是由TC1之值控制的,可以小于反方向傳送的二字元間所容許的最小區間16etu。

 

         2)                 指令頭           
CLA                   INS                  P1                   P2                    P3
指令均由由終端應用層(TAL——Terminal Application Layer)發出的。它經終端傳輸層(TTL——Terminal Transport  Layer)以5個位元組的稱做指令頭的形式向IC卡發出指令。指令頭由五相連的位元組構成:

 

 

l         CLA——指令類别

l         INS——指令代碼

l         P1、P2——指令附加特定參數

l         P3——由INS的編碼而定,或是表示指令中送給IC卡的資料,或是等待從IC卡響應的最大資料長度。

        對于T=0,這些位元組和随指令一起發送的資料就構成了指令傳輸協定資料單元(C-TP-DU)。指令應用協定資料單元C-APDU到C-TPDU的變換在後面講述。

TTL傳送這五個指令頭位元組給IC卡并等待着一個過程位元組。

 

         3)                 過程位元組                

        IC卡收到指令頭後,應回送給終端傳輸層(TTL)一過程位元組或狀态位元組。過程位元組向TTL指明下一步必須采取 的措施。過程位元組的編碼和必須采取的措施如表4-1所示。

        在情況Ⅰ、Ⅱ或Ⅲ時,當TTL采取的措施實行後,它就等待着另一個過程位元組。當情況為Ⅳ時,在收到第2個狀态位元組SW2之後,TTL必須處理如下:

l         如果過程位元組為“61”,則TTL送出一條GET  RESPONSE指令頭标給IC卡,其中的最大長度為“XX”, “XX”為SW2的值.

l         如果過程位元組為“6C”,  則TTL立即重發前一個指令的指令頭給IC卡,其長度為“XX”, “XX”是SW2之值.

l         如果過程位元組為“6X”(除了”60”、”61”和“6C”)或“9X”,則TTL在響應APDU(R-APDU)中回送狀态位元組以及相關的資料(參看後面章節),并等待下一個的C-APDU。

         在TTL和IC卡之間交換指令和資料時,TTL和IC卡都必須清楚地知道資料的流向以及是由TTL還是由IC卡來驅動I/O線。

 

                                           表4-1     終端對過程位元組的響應
      
過程位元組之值                    措        施
等于INS位元組 由TTL傳送所有其餘資料位元組,準備接收由IC卡送來的其餘的資料位元組
等于INS位元組的補碼 由TTL傳送下一資料位元組,或由TTL準備接收由IC卡送來的下一資料位元組
“60” TTL将提供附加的工作等待時間,如本書中所規定

“6X”或“9X“,除“60”

之外(狀态位元組SW1)

TTL等待更進一步的狀态位元組SW2
 

 

4)         C-APDU              的傳送                

        采用T=0協定時,C-APDU僅僅包含送至IC卡指令資料,或者僅僅隻包含IC卡響應資料可直接映射到C-TPDU。含有資料或者不要求資料的C-APDU,或者在IC卡往返傳送資料的C-APDU,均按T=0的C-TPDU的傳送中所規定的規則進行解釋。

 

         3、               T=0              的錯誤檢測和校正                

        當T=0時,這個過程是強制的,但在複位應答時不使用。

        如果一個字元沒有正确地接收到或接收正确但奇偶位錯,則接收方必須在字元起始位的上升沿之後的(10.5±0.2)個etu内,向I/O線發送持續1-2個etu的低電平信号,以訓示出了錯誤。

       發送方必須在被送出的字元的起始位的上升沿後的(11±0.2)個etu内,檢測I/O的電平狀态,若I/O線處在高電平狀态,由表明字元已被正确接收。

        如果發送方檢測到一個錯誤,則在檢測到此錯誤之後至少延遲2etu,并重發送有争議的字元,最多隻發送三次。

 

         4、               T=1              字組協定                

        協定包含IC卡和TTL間的字組傳送,以傳達指令和R-APDU及控制資訊(例如,确認)。資料鍊路層的字組幀結構,協定的時序和INF,以及協定的運用規定如下。

                 1              )字組幀結構                

        前面所規定的字元幀仍是适用的,字組的結構如(表4-2所示)下:

l         強制性的組頭字段

l         可選性的資訊字段

l         強制性的組尾字段

 

                                                           4-2                  字組的結構           
                            組頭字段 資訊字段 組尾字段

結點位址

(NAD)

協定控制位元組

(PCB)

  長    度

(LEN)

APDU或控制資訊(INF)

錯誤檢測

(EDC)

1位元組 1位元組 1位元組 0—254位元組 1位元組
    A              、組頭字段                

組頭字段由3個強制性的位元組組成:

l         結點位址用以辨別資料塊的源位址和目标位址,并提供對VPP狀态控制的節點位址。

l         協定控制位元組,控制資料的傳送。

l         長度,指可選資料域長度。

 

             結點位址(              NAD                    NODE ADDRESS                      

          NAD 的b1~b3位表明字組的源點位址(SAD—Source Node Address),而b5~b7則表明

字組指向的目标位址(DAD—Destination  Node Address)b4和b8位未用且必須置為0。

           終端對結點編址的使用是可選的,但IC卡在使用T=1型協定時,必須支援按如下規則的結點編址:

l         若不使用節點位址,終端發往IC卡的第一個資料塊的SAD和DAD值均應設為0。

l         若使用節點位址,由終端發給IC卡的第一資料塊的SAD和DAD應設定為不同的值(其中之一可以是零)。

l         若使用了結點位址,在卡片操作過程中,IC卡收到的第一個有效I塊和S塊中的NAD,用于建立起整個卡片操作過程中的終端和IC卡的節點位址,在同一個過程中,終端發給IC卡的後續塊應使用同一個NAD,如此建立的結點位址适用于所有類型的資料塊。

l         在一個用卡過程中,任何由IC卡送向終端的字組,在此過程中必須使用由終端送向IC卡的第一字組确定的結點位址。(注意,從終端送向IC卡的源點和目标位址,在由IC卡送向終端時要分别變為目标和源點位址)。

l         在卡片操作過程中,若IC卡接收到的資料塊的NAD和交易開始時所建立的NAD不同,則IC卡應向交易開始時建立的DAD回複一個R塊。

 

             協定控制位元組(              PCB-Protocol Control  Byte                      

        協定控制位元組對資料塊的類型進行編碼,有三種類型的資料塊,規定如下:

l         用于傳送APDU的資訊字組(I塊)

l         用于傳達确認(ACK-Acknowlegement)或否認(NAK-Negative Acknowlegement)的接收就緒塊(R塊)

l         用于交換控制資訊的管理塊(S塊)

        PCB的編碼按其類型而定,如表4-3所示。

 

               4-3  PCB              的編碼           
資訊位 I-字組 R-字組 S-字組
B8 1 1
B7 順序号 1
B6 連結(多個資料) 0=請求   1=響應
順序号 0=再同步請求

B5

B4

B3

B2

B1

RFU

RFU

RFU

RFU

RFU

1=資訊字段容量請求

2=取消請求

3=擴充BWT請求

4=VPP錯誤(《EMV規範》未用)

未用值為RFU

 長度(              LEN-Length                      

      長度指明塊的INF(Information Field)的長度,取值範圍2~254個位元組。注意:在《EMV規範》中不支援LEN=0的I-塊。

             B、              資訊域(              INF                      

        資訊字段是有條件的,當出現在I塊中時,它傳送的是應用資料;在S塊中,它傳送控制資訊;在R塊中不包含INF。

 

         C、               尾域(              EDC-Error Detection Code              檢錯碼)                

        組尾字段包含所傳送的字組的錯誤檢測碼(EDC)。當奇偶錯或EDC錯誤發生時,字組是無效的。作為EDC在《EMV規範》中僅支援縱向備援校驗(LRC-Longitudinal Redundancy Check)。LRC的長度是一個位元組,從NAD開始到INF的最後位元組在内的所有位元組的“異或”值即為此位元組之值。

 

         D、               塊的編号                

          I塊的編号采用了一位編碼的模2數,編号系統對IC卡保持獨立,而終端則作為發送方。在複位應答後,發送方傳送的第一個I塊的編号從0開始,而後,每傳送一個I塊就加1,此數由發送方在重新同步後,複位為0。

        R塊的編号也采用了一位編碼的模2數。當用來在連結期間去确認一個I塊時,R塊帶有所需求的下一個I塊的編号。當用來請求重複某塊時,R塊帶有所接收的I塊的編号。

         S塊不帶編号。

 

                       2              )資訊字段              INF              的容量和時序(特别選擇)                

①資訊域大小

           IFSC是IC卡所能接收的字組資訊字段INF的最大長度,複位應答時,IC卡在TA3中回送的IFSI表示了IC卡的接納的IFSC的最大長度.IFSI的取值範圍為”10”至”EF”,即IFSC的範圍為16-254位元組。是以,IC卡可能接收的最大塊長度為(IFSC+3+1)位元組,包括了頭域和尾域。在複位應答中所确定的長度必須用于用卡過程中的其餘部分,直至由于IC卡向終端發送S塊(IFS請求)取得新的IFSC值為止。

         終端的資訊域大小(IFSD)即終端可能接收的資料塊的最大長度。緊接在複位應答的起始長度必須是32位元組,這個長度适用于用卡過程的其餘部分,或由終端向IC卡發送一個S塊(IFS請求)而得到一個新的IFSC值為止。為了加快IC卡對終端的通訊,建議終端應支援的IFSD之值為254位元組。

 

②T=1的時序

        按複位應答中TC1之值的規定,由終端送給IC卡的相鄰二字元起始位的上升沿間的最小區間必須在11至266etu之間。

        由IC卡送給終端的相鄰二字元起始位的上升沿間的最短時間間隔應是11個etu,同一塊中兩個連續字元起始位上升沿之間的最大時間間隔CWT不得超過(2CWI+11)etu, CWI之值在0-5之間, 是以CWT的取值範圍為12-43etu之間。

  終端發給IC卡的最後一個字元的起始位上升沿與由IC卡發出的第一個字元起始位上升沿之間的最大時間間隔BWT不應超過{(2BWI×960)+11}etu。BWI之值在0-4之間,是以BWT将在971-15371etu之間。

   反向傳送的二相鄰字元的起始位上升沿之間的最小時間間隔(塊保護時間BGT)為22etu。

 

(1)       容錯操作

        容錯操作時的協定規則定義如下:

                A                、 在複位應答後,第一個資料塊是則終端發往IC卡,而且隻能是一個I塊S塊。

                B                      若終端不希望使用長度為32位元組的初始值,它必須發送一個S(IFS請求)塊給IC卡。S(IFS請求)塊的PCB之值必須為“c1”,以表達一個改變IFSD的請求。INF域包含一個位元組,其值表明了所請求的新IFSD的長度的位元組數。這個位元組的取值範圍為“20”—“FE”之間。IC卡應向終端回送了一個S(IFS響應)塊,以确認對IFSD的長度的改變。其中S(IFS響應)塊的PCB之值應是“E1”,而INF域應具有與請求改變塊的INF域相同的值。

                C                、若IC卡希望把IFSC的長度從複位應答中所給出其的起始值加以改變,它必須發送一個S(IFS請求)塊給終端。S(IFS請求)塊的PCB之值必須為“C1”,以表達一個改變IFSC的請求。INF字段必須包含有一位元組,其值表明了所請求的新的IFSC的長度的位元組數。這個位元組的取值範圍為必須在“10”至“FE”之間。終端必須回送一個S(IFS響應)塊給IC卡,以确認對IFSC的長度的改變。在響應中送出的S(IFS響應)塊的PCB之值必須是“E1”,且INF字段必須和請求改變的字組中的INF字段有相同之值。

                 D                      如果使用了結點編址,則由終端所傳送的第一個塊中的SAD和DAD必須被置為貫穿整個用卡過程始終所用之值。若不采用節點位址,則将其設成零。

                 E                      在用卡過程中,隻有本節所規定的塊才能互相傳送。半雙工塊傳輸協定包括了終端和IC卡交替傳輸塊的情況。當發送方完整的傳輸了一個字組後,就應節換至接收狀态。

                 F                      當接收方接收的字元數符合LEN和EDC之值時,接收方就獲得了發送權。

                 G                、若接收方需要确認發送方傳來的I塊,則應在回送給發送方的I塊中指明。若使用連結,則在R塊的序列号中指明(連結的最後一個資料塊除外)

                 H                、若響應中收到的I-塊的序列号與前一個已收到的I-塊序列号不同,則發送方即認為此I-塊已被确認。如果先前未收到過I-塊,則在響應中I-塊序列号必須為0。

                 I                、當連結時,如果在響應中收R-塊的序列号與已确認的I-塊的序列号不同,則發送方即認為此I-塊已被确認。

                 J                、如果IC卡需要比BWT長的時間去處理先前接收到I-塊,它就要發送一個等待時間擴充請求S塊(WTX請求——Waiting Time Exension請求),其中INF包含有所需的BWT值的一個位元組的二進制整數,其值為BWT的倍數。終端必須傳送一個在INF中具有相同值的等待時間擴充響應S(WTX響應)塊來确認。取得的時間從S塊(WTX響應)的最末字元的上升沿開始算起。

                K                      S塊總是成對使用,一個S(請求)塊總對應個S(響應)塊。

 

         (2)                    連結                

        當發送方要傳輸的資料長度超過IFSC或IFSD所定義的位元組數時,它必須把其分成幾個相連的I塊。使用了下述的連結功能來實作這樣的多個I塊的傳輸。

I-塊的連結為PCB中的b6所實作,b6的編碼如下:

——b6=0,鍊中的最後一個塊;

——b6=1,後面還有後續塊。

        任何一個b6=1的I-塊,必須由一個R-塊來确認。

       如果接收正确,對應b6=0的最末塊,會被I-塊确認,否則,就會被R塊确認。

 

       A、連結的規則

IC卡和TTL都必須支援連結,而且連結隻能沿一個方向來進行,其規則如下:

        ——終端是接收方時,隻要來自IC卡的每個塊的長度≤IFSC位元組,終端應能夠接收一組

                      連結的I塊。

              ——終端是接收方時,如果IC卡發送的I塊的長度>IFSC,終端應通過發送一個R塊

                      來表示拒絕,R塊的PCB的b1~b4位之值為“2”

——IC卡是接收方時,隻要來自終端的每個塊長度≤IFSC位元組,IC卡必須接受一系

        列從終端發送的連結在一起的I-塊。

              ——IC卡是接收方時,IC卡通過發回一個R-塊來拒絕由終端發送的長度>IFSC的I-

                      塊,R塊的PCB的b1~b4位的值為“2”。

              ——IC卡是發送方時,IC卡必須能發送連結在一起的I塊,每塊的長度≤IFSC位元組。

              ——終端是發送方時,終端必須發送連結在一起的I塊,每塊的長度≤IFSC位元組。

 

B、 連結塊的結構

C-APDU是在I塊的INF域中。并由TTL傳送給IC卡的。若C-APDU太長,以緻不能裝入一個塊,可通過如下的方法連結在幾個塊中,說明如下:
      
字組(1) CLA  INS   P1     P2         LC   DATA      DATA
字組(2)           DATA              DATA
字組(n)   DATA                 Le
 

           如果由IC卡回送的資料和狀态太多,以緻不能裝入一個塊,則就連結在幾個I-塊中,如下所示:
      
字組(1)   DATA      DATA    DATA
字組(2)   DATA       DATA    DATA
字組(n)   DATA      SW1-SW2
 

             以上是以情況4的指令為例來說明的,隻展示了連結愉的INF域,每一塊還有頭域和尾域。

 

         5、               T=1              的錯誤檢測和校正                

下列錯誤必須由TTL檢出:

l         傳輸錯誤(奇偶錯或EDC錯)或BWT逾時。

l         喪失同步(關于字元數量的上溢運作或下溢運作)。

l         協定錯(違反協定的規則)。

l         取消關于連結塊的請求。

       按照下述方法進行糾正錯誤:

       ——重新傳輸塊

       ——釋放IC卡的觸點。

      錯在IC卡,則IC卡應按下面給定的順序,嘗試糾正錯誤;

      ——重新傳輸塊。

     ——處于無響應的。

 

       A、錯誤處理協定規則

       下列規則用于錯誤的處理和校正,在每一種情況下有一個R-塊送出,低半位元組應按表4-3的規定置成相應之值。

        ——若在複位應答後,IC卡所接收的第一個塊無效。它必須回送一個R塊給TTL,并置

                b5=0和NAD=0。

        ——如果TTL發送的任何塊在BWT時間内沒有得到IC卡的響應,TTL将通過使IC卡的

                觸點處于靜止狀态來結束卡片操作過程。

        ——如果響應I塊的無效塊被收到,發送方應發送一個R塊,其中b5位置成期望的I塊編

                号。

        ——如果響應R塊的無效塊被收到,發送方應重發R塊。

        ——如果響應S塊(請求)的S(響應)塊沒有收到,,發送方應重發一個S塊(請

                求)。

         ——如果響應S(響應)塊的應答中收到無效塊,發送方應重發一個R塊,b5位設為下

                一個期望I塊的編号。

——如果TTL連續三次傳送一個塊,或IC卡連續兩次傳送一個塊,而得不到有效的響

       應時,TTL必須釋放IC卡的觸點結束此用卡過程。

          ——如果接收方檢測到了上溢運作或下溢運作,在重新傳輸前必須等待一段時間(取

                  CWT或BWT的最大值)

 

——IC卡最多連續三次傳送一個S(IFS請求)塊,以試圖從TTL獲得一個有效的S

      (IFS響應)字組。在三次不成功的嘗試後, IC卡即進入接收方式。

           ——TTL不應發送一個S(ABORT取消請求)塊,如果TTL從IC卡收到了一個S

                 (ABORT請求),它必須釋放IC卡觸點以結束此用卡過程。
      
cos