概述
1.SIM卡傳輸協議架構類似與TCP/IP的OSI模型。分為5層
- 物理層
- 數據鏈路層
- 傳輸層
- USAT層
- 應用層
1.1物理層
通過IO口傳輸二進制數據。
1.2數據鏈路層
定義字符交換的時序和差錯處理。數據鏈路層定義了T=0和T=1兩種傳輸方式。他們都是半雙工傳輸,T=0是基於字節傳輸。T=1是基於塊傳輸。
1.21 T=0傳輸方式(面向字節)
傳輸從一個命令頭開始,該命令頭由CLA,INS,P1,P2,P3組成。終端向UICC(智能卡)發送字節頭,UICC就會響應一個字節的結果給終端。該結果有以下幾種定義。
- 如果該字節等於命令頭的INS,那么終端從UICC獲取剩余的數據,或者UICC從終端獲取剩余的數據。
- 如果該字節等於命令頭的補碼,那么終端從UICC讀取另一次數據,或者UICC從終端讀取另一次數據。
- 如果該字節等於‘60’,沒有額外的數據需要傳輸,終端只能等待傳輸過程字節。
- 如果該字節等於‘61’,終端要等待第二個過程字節,並且發送P3為最大長度的GET RESPONSE 頭給UICC。
- 如果該字節等於‘6C’,終端需要等待第二個過程字節,並且發送P3位最大長度的與之前相同的頭給UICC。
命令結束過,UICC返回給終端一個2個字節的狀態SW1和SW2.(詳細常考GSM手冊。)
1.22 T=1傳輸方式(面向塊)
一個塊的架構如下圖所示。
NAD:塊地址字節(必須)
PCB:控制協議字節(必須)
INF: 0~256bit的信息字節(可選)
T=0協議定義了三種類型的塊
- I-Bolck:在應用層傳輸數據,還包含該數據是否需要響應的標志。
- R-Block:用於傳輸響應。
- S-Block:用於傳輸控制信息。
1.3 傳輸層
該層協議協定了APDU到TPDU的映射關系,以及TPDU與卡如何完成數據交互。終端要與UICC進行通信,那么必須將應用協議數據單元APDU映射為傳輸協議數據單元TPDU。
1.31 APDU COMMAND
APDUCOMMAND由Command header 和 Command body兩部分組成。其中CLA INS P1 P2 和之前介紹的一樣。只是P3變為了可變長度的Command body,Command 的Lc(期望發送的數據長度)和Le(期望接收的數據長度)兩個域是可選的,於是乎我們的APDU COMMAND就有以下幾種組合方式。
1.32 APDU COMMAND的編碼
以上為APDU的編碼。我們根據Case 1-Case 4來分別分析這四種組合的編碼。
- Case 1 編碼:包括Command header。 Case 2 編碼:包括Command header 和Le,這里Le編碼可以為一個字節和三個字節
- 當Le為一個字節時,所希望接收字節是 1到256
- 當Le為三個字節時,那么第一個字節為‘00’,后面兩個字節所指示的所希望接收字節范圍是1-65536
- Case 3 編碼:包括Command header Lc data,Lc和上面的Le編碼和意義差不多表示期望發送的字節。
- Case 4 編碼:包括Command header Lc data Le。
1.33 APDU COMMAND 到TPDU COMMAND映射
這里映射也分為4種情況
- Case 1:
- Case 2:
-
Case 3:
-
Case 4:
1.4 USAT層
USAT層使用應用狀態字來指示
- 終端主動命令的可用性‘91XX’。
- 用於響應終端Envelope命令的可用數據(‘9000’,‘62XX’,‘63XX’)。
- 暫時無法使用USAT去處理Envelope(‘9300’)。
1.41 主動命令
當狀態字SW1-SW2 為‘9000’,這卡可以通過回復‘91XX’來指示接下來有主動命令要發送。終端通過FETCH-APDU來獲取卡的主動命令。終端通過TERMINAL RESPONSE來回復卡。
1.42 ENVELOPE 命令
該命令用於傳輸數據到USAT。
。
1.5 應用層
應用層則包括UICC的文件系統,以及UICC的安全機制,應用交互機制。
1.51 應用層文件系統下有三類文件 EF DF MF
- Dedicated files :DF針對功能對文件進行分組。ADF是包含特定應用相關的所有DF 和 EF。
- Elementary files : EF 分三類,Transparent EF ,Linear fixed EF,Cyclic EF.
- Transparent EF 由一系列字節組成。當對文件進行修改操作時,由文件起始位置加上相對偏移的方式對文件相關內容進行修改。
- Linear fixed EF 具有線性固定的結構的文件由一系列具有相同長度記錄構成。第一條記錄為1,SELECT命令會返回記錄的總數量。
- Cyclic EF 一系列具有相同長度的記錄首尾循環組成。
1.52 選擇文件的方法
當ATR過程結束,MF文件被自動選擇成為當成路徑。所有文件可以通過SELECT命令來選擇,選擇的文件需在當前目錄下,可以選擇以下幾種文件
- 當前路徑下的子文件
- 當前目錄下的子目錄
- 當前目錄下的父親目錄
- 當前目錄
- 當前應用下的應用目錄ADF(默認可以用’777F‘選擇)
- 主目錄MF
以下為相對目錄下可選擇的文件的表
我們也可以通過絕對路徑來選擇相應文件。
不過這有以下幾條限制
- 如果選擇的文件在MF下,我們路徑中不需要加MF。
- 如果選擇路徑從當前DF,終端不該使用‘777F’作為起始路徑。
- 如果從MF開始或者從當前的DF開始為路徑選擇,終端命令的data字段不該為空。
- 如果從MF或當前DF開始時,終端不該用當前的DF標識。
1.53 短文件標識
一些在DF目錄下的EF文件不需要通過SELECT來選擇,以下的一些命令配合SFI(短文件標示)參數可以被默認選擇。
- READ BINARY
- UPDATA RECORD
- UPDATA RECORD
- INCREASE;or
- SEARCH RECORD
1.54 應用會話激活
應用會話會在終端發送附帶特定參數SELECT命令選擇AID后,被激活。UICC需要一定的程序來激活應用會話。該應用程序用於使終端和UICC處於對話狀態。終端可以通過發送STATUS命令來獲知UICC是否初始化成功。
1.55 應用會話停止
一個應用會話終止前應該執行一段終止程序。當終止程序執行開始,UICC會發送給終端一個STATUS命令來通知終端會話將被終止。
當以下其中一個時間發生,應用會話將被終止。
- 隱性停止:當SELECT命令選擇另一個AID時候,並且命令參數指明新應用將被執行。
- 直接停止:如果重新用SELECT命令選擇當前的AID的DF文件,並且命令參數中指示應用會話停止。
1.56 應用會話停止
終端通過SELECT重新選擇當前的AID的DF,並且參數指示重啟。重啟之后,該應用的安全狀態也會改變。