CPU卡中T=0通訊協議的分析與實現
摘要:T=0是國際標準中規定的一種接觸式CPU卡通訊協議。結合開發實踐,將該協議分為四個層次,主要從CPU卡的角度出發,結合終端,從兩個方面系統地闡述了該協議的特點和實現過程,并對T=0協議的優缺點進行了分析,目前已將開發成果應用于實際中。
關鍵詞:卡片操作系統(COS)終端應用層(TAL)終端傳輸層(TTL)應用協議數據單元(APDU)傳輸協議數據單元(TPDU)
IC卡的應用越來越廣泛,從存儲卡到邏輯加密卡,目前CPU卡已經逐漸在應用中占據主導地位。CPU卡根據通訊協議可分為兩種:接觸式和非接觸式。接觸式CPU卡主要采用兩種通訊協議:T=0和T=1通訊協議。T=0是異步半雙工字符傳輸協議,T=1是異步半雙工塊傳輸協議。目前T=0通訊協議的應用較為廣泛,國內外大多數CPU卡都支持該協議,在金融交易中也采用這種通訊協議。為了便于說明問題,本文從T=0協議的功能出發,將該協議分為四個層次:物理層、數據鏈路層、終端傳輸層和應用層,見圖1。
由于該協議的特殊性,終端傳輸層與應用層聯系非常緊密,實現起來比較繁瑣,在CPU卡中,這些任務通過卡片操作系統(COS)來實現。終端在與卡的信息交換中,
始終處于主動地位,終端向卡發送符合T=0協議的命令字節,卡中的COS完成對數據的處理并將處理結果返回給終端。下面對T=0協議的四個層次進行詳述。
1T=0協議的物理層描述
終端與智能卡之間通過改變I/O傳輸線上的電平來交換信息。由于T=0協議是面向字符的傳輸協議,這里先定義字符幀的結構,并對組成字符幀位的信息表示作了具體描述。字符幀的結構如圖2所示。
字符幀由1個起始位S、8個數據位和1個偶校驗位P共10位組成。在數據傳輸中每一位的持續時間稱為基本時間單元etu(elementarytimeunit),etu的值由時鐘頻率決定,etu與時鐘頻率呈現性關系:
1etu=(F/D)×(1/f)(1)
其中F稱為時鐘頻率轉換因子,D稱為波特率調整因子。時鐘頻率的范圍為1MHz~5MHz,正常的工作頻率為3.57MHz,數據傳輸的波特率采用9600bps,根據國際標準的取值范圍,取F=372,D=1,代入式(1),可得:
1etu=372/f=372(2)
即一個基本時間單元為372個時鐘周期。將工作頻率定為3.57MHz,可以保證數據傳輸的波特率為9600bps。如果要提高數據的傳輸率,可以調整參數F來確定傳輸率。對每一位電平采用三次采樣來確定,在位持續時間的中間和左右15的間隔各取樣一次,取樣點如圖3所示。當有兩次以上電平為低,則判斷該位為0;否則該位為1,這樣確保了取樣值的可靠性。由于數據位的持續時間是用匯編語句來控制的,可以通過延時語句調整采樣的時間間隔。但實現采樣的最基本匯編語句的執行時間不能再縮短,因此數據傳輸率有一上限。當每一位取樣三次時,數據傳輸率最高可達到57600bps。如果再提高速率,取樣時序將無法保證。字符幀的起始位為低電平,起始位的檢測是通過周期性地對I/O傳輸線進行采樣來得到。國際標準中規定采樣時間間隔不得大于0.2etu,實際上起始位的采樣時間間隔只有幾個時鐘周期,完全滿足要求。
2T=0協議的數據鏈路層實現
數據鏈路層描述了字符交換的時序要求和差錯控制以及終端對面向傳輸的錯誤的處理,在邏輯上保證終端和卡片之間能夠正確可靠地通訊。
采用上述的字符幀,終端與卡之間進行數據將交換,字符之間有嚴格的時序,時序是通過匯編程序語句的執行時間來控制的。從終端到卡發送的連續字符的起始位下降沿之間的最小時間間隔由復位應答信息通知終端,其值在12etu~266etu之間。從卡發送到終端的連續字符的起始位下降沿之間的最小時間間隔應為12etu。
如果字符接收不正確或字符接收正確但校驗位不正確,接收端需要在字符起始位下降沿后的(10.5±0.2個etu時刻將I/O線置為低電平約1~2個etu,見圖4,用于向發送端指明錯誤;發送端在(11±0.2)個etu時刻檢測I/O線。如為高電平則表示字符已經正確接收;如果發送端檢測到錯誤,則在檢測到錯誤那一刻起,2個etu后重發該字符,但重復發送同一字符的次數不得超過3次。如果最后一次發送失敗,當終端是接收端時,則終端應該在無效字符的起始位下降沿后的960個etu時間范圍內啟動釋放序列;當終端是發送端時,在卡片檢測到字符的偶校驗錯誤后960個etu時間范圍內,終端啟動釋放序列。
命令的執行總是由終端應用層(TAL)啟動,通過終端傳輸層(TTL)送給卡片。TTL與卡片進行命令字節和數據字節交換時,要保證能夠有序正確地進行。因此,在數據交換過程中,在任何時刻TTL和卡片都應該隱含地知道哪一方是發送者,哪一