SIM邏輯模型與APDU


SIM(Subscriber Identity Module)是一種移動運營商用於提供給用戶驗證身份、接入網絡等服務的UICC卡。一張SIM卡里存儲了很多移動網絡接入相關的數據,比如ICCID(UICC卡的ID),IMSI(International Mobile Subscriber Identity),驗證秘鑰(ki, Authentication key),LAI(Local Area Identity)以及跟運營商相關的緊急號碼列表、用戶可接入的服務列表。SIM卡同時也提供了PIN(Personal Identification Number)碼用於加密SIM卡以及PUK(Personal Unblocking Code)碼用於解鎖PIN碼,以確保用戶數據的安全。

在2G網絡時代,SIM卡包含了硬件跟軟件。隨着3G移動技術的發展,SIM只是包含了軟件,而已經部分則被統一稱為UICC(Universal Intergrated Circuit Card),同時為3G網絡增加了新的應用USIM(Universal Subscriber Identity Module)。

這篇文章我們就來看看SIM卡的邏輯結構,存儲的數據以及讀取SIM卡數據的協議APDU。

UICC是指一種用於移動終端的智能卡(smart card),在各種移動網絡中如GSM,UMTS,CDMA中得到了廣泛的應用。UICC確保用戶數據的安全性與完整性,為用戶提供網絡接入驗證等服務。在GSM網絡中,通常使用SIM卡;UMTS網絡中UICC卡則使用USIM卡,對於支持IMS(IP multimedia Services)的服務則需要包括ISIM應用。對於CDMA網絡,UICC卡需要包含CSIM應用。包含了SIM, USIM, CSIM三個應用的UICC卡稱為RUIM(Removable User Identity Card),RUIM卡可插入支持CDMA,GSM以及UMTS的移動設備。隨着新技術的發展,一種被稱為嵌入式SIM(embedded SIM,eSIM)的卡開始被各大運營商使用,eSIM將SIM卡做成一個內置的芯片嵌入到集成電路板上,為用戶提供相應的網絡服務。

SIM的邏輯結構

SIM卡中的文件是以層次化的結構存儲的(見下圖),主要有三種:MF(Master File), DF(Dedicated File), EF(Elementary File),SIM卡中的軟件系統負責處理存儲在文件數據上的訪問與寫入。

SIM logical model

SIM文件由header以及body兩個部分組成,header由SIM卡自己來管理,主要包含了跟文件結構與屬性相關的信息,可以使用GET RESPONSE或者STATUS來訪問(這些信息在SIM卡生成時被固定下來); body部分則包含了相應文件所包含的數據。

File Identifiers(文件標識符

文件標識符(file id)用於識別或者尋址特定的文件,由兩個字節的16進制數字構成。對GSM SIM卡來說,第一個字節用於識別文件類型:

  • ‘3F’: Master File(MF,主文件);
  • ‘7F’: Dedicated File(DF,專用文件);
  • ‘2F’: Elementary File under the Master File(EF,位於MF下的基本文件);
  • ‘6F’: Elementary File under a Dedicated File(位於DF下的基本文件).

文件標識符需要滿足如下條件以確保每個文件都可以被唯一標識訪問:

  • the file ID shall be assigned at the time of creation of the file concerned(文件標識符應該在相關文件建立的時候被指定);

  • no two files under the same parent shall have the same ID(有共同父親的兩個文件不能有相同的ID);

  • a child and any parent, either immediate or remote in the hierarchy, e.g. grandparent, shall never have the same file ID(一個子文件和它的任何一個父輩文件,不管是處於層次結構中直接或者間接的關系,都不能有相同的文件ID).

Master File(MF)

SIM卡中只有唯一的一個主文件MF,用於控制其他專有文件(DF)以及基本文件(EF)的訪問。

Dedicated Files(DF)

專有文件是一個功能性的文件組,包括自身以及所有子文件。一個DF文件僅由header部分組成:

  • DFGSM which contains the application for both GSM and/or DCS1800;

  • DFTELECOM which contains telecom service features.

上述兩個文件都是MF的直系子孫文件,可以在支持多個應用的SIM卡中共存。

Elementary File(EF)

An Elementary File (EF) is composed of a header and a body part. The following three structures of an EF are used by GSM.

基本文件(EF)由header和body兩個部分組成。在GSM中,EF有如下三種結構類型:

Transparent EF

透明結構的EF文件由一個字節序列組成。當讀取或者寫入數據時,這個字節序列通過一個相對地址(偏移量)來訪問,這個偏移量用於表示訪問的起始位置以及訪問的字節數。透明EF文件的第一個字節的相對地址為00 00,而EF文件數據長度則包含在header部分。

Transparent EF

Linear Fixed EF

線性固定結構EF由固定長度的記錄序列組成,第一個記錄的序列號是1。一個記錄的長度以及以及長度與記錄的數量都保存在EF的header部分。

Linear Fixed EF

注意:

  • It is not possible, at present, to have more than 255 records in a file of this type, and each record cannot be greater than 255 bytes(目前EF文件最多只能包含255個記錄;每個記錄的長度不能超過255個字節).

  • This structure was previously referred to as “formatted” in GSM(在GSM中,這個文件之前被稱為格式化文件).

Cyclic EF

循環文件用於存儲按時序排列的記錄。當所有記錄用於存儲時,新的數據會覆蓋最早的數據。

循環結構的EF文件具有是由固定長度的記錄組成,每個記錄只能包含固定長度的數據。對於這類型的EF,最后一個記錄與第一個記錄存在着一個連接:當記錄存儲的位置指向最后一個記錄n時,下一個記錄就是1;或者說,當下一個記錄指針指向1時,它的上一個記錄就是n。在記錄1中包含了最新的數據,而在記錄n中則包含了最老的數據(記錄的時間最早)。

Cyclic EF

注意: It is not possible, at present, to have more than 255 records in a file of this type, and each record cannot be greater than 255 bytes.

文件選擇的方法

在ATR命令之后,MF默認被選擇並且成為當前目錄。每個文件的選擇使用SELECT函數,並遵循以下原則:

ATR是接觸式Smart Card可用的一個指令信息,卡啟動完成后,告訴讀卡器卡已經准備好,可以使用了。 參考:https://en.wikipedia.org/wiki/Answer_to_reset

  • 選擇一個DF或者MF,設置其為當前目錄;選擇好后,並不存在當前的EF文件;

  • 選擇一個EF,設置當前EF,文件目錄為當前EF的父輩DF或者EF。當前EF總是當前目錄的一個子文件。

  • 任何一個應用相關的指令應該是可操作的如果該指令跟當前目錄相關

  • 所有的選擇都是基於文件ID

下列文件可以從上一個選擇的文件中被獲取到:

  • 當前目錄的任意一個直系子文件;

  • 任何是當前DF父親的直系子DF文件;

  • 當前目錄的父親;

  • 當前的;

  • MF.

下表是上圖SIM邏輯結構模型對應的有效的文件選擇路徑:

File Selection

保留文件ID

以下文件ID作為GSM中的保留項:

專有文件DF:

  • administrative use(授權者使用):'7F 4X';

  • operational use(操作使用):

    '7F 10' (DFTELECOM), '7F 20' (DFGSM), '7F 21' (DFDCS1800); '7F 2X'(’2’<= x <=’F’).

基本文件EF:

  • administrative use:

    '6F XX' in the DFs '7F 4X';

    '6F 1X' in the DFs '7F 10''7F 20''7F 21';

    '2F 01''2F EX' in the MF '3F 00';

  • operational use:

    '6F 2X''6F 3X''6F 4X' in '7F 10' and'7F 2X';

    '2F 1X' in the MF '3F 00'.

上述所有X,除非特別說明,其范圍均在['0','F']

基本文件EF數據

  • EF-ICCID (2FE2): ICC Identification,SIM卡的身份ID

  • EF-LP(6F05) : Language Preference,語言首選項

  • EF-IMSI(6F07): International Mobile Subscriber Identity, 接入運營商網絡的認證ID

  • EF-KC(6F20) : Ciphering Key kc,網絡注冊時的加密密鑰

  • EF-SST(6F38): SIM Service Table,運營商提供的服務列表,如ADN,FDN,SMS等

  • EF-ACM(6F39) : Accumulated Call Meter - total number of units for both the current call and the preceding calls

  • EF-GID1(6F3E) : Group Identifier Level 1 - identifiers for particular SIM-ME associations

  • EF-GID2(6F3F) : Group Identifier Level 2

  • EF-SPN(6F46) : Service Provider Name,運營商名字

  • EF-MSISDN(6F40): Mobile Station International ISDN number

  • (O)EF-CBMI : Cell Broadcast Message Identifier Selection - Message format accepted by MS

  • EF-BCCH(6F74) : Broadcast Control Channels

  • EF-ACC(6F78) : Access Control Class - The access control class is a parameter to control the RACH utilisation.

  • EF-FPMLN(6F7B) : Forbidden PMLNs

  • EF-LOCI(6F7E) : Location Infomation,位置信息

    • Temporary Mobile Subscriber Identity (TMSI)

    • Location Area Information (LAI)

    • TMSI TIME

    • Location update status

  • EF-AD(6FAD) : Administrative Data - This EF contains information concerning the mode of operation according to the type of SIM, such as normal (to be used by PLMN subscribers for GSM operations), type approval (to allow specific use of the ME during type approval procedures of e.g. the radio equipment), cell testing (to allow testing of a cell before commercial use of this cell), manufacturer specific (to allow the ME manufacturer to perform specific proprietary auto-test in its ME during e.g. maintenance phases).

  • EF-Phase(6FAE) : Phase Identification

  • (O)EF-ADN(6F3A) : Abbreviative Dialing Number

  • (O)EF-FDN(6F3B) : Fixed Dialing Number

  • (O)SF-SMS(6F3C) : Short Message

  • (O)EF-CCP(6F3D) : Capability Configuration Parameters - parameters of required network and bearer capabilities and ME configurations associated with a call established using an abbreviated dialling number, a fixed dialling number, MSISDN or a last number dialled.

  • (O)EF-LND(6F44) : Last number dialled

APDU

插入手機(Mobile Equipment)的SIM卡與手機本身存在主從關系。ME通過數據交換協議APDU(Application Protocol Data Unit)與SIM卡進行數據的交換。兩者之間的通信模型如下圖所示:

SIM ME Communication Model

ME可通過如下幾個功能性的指令(這里只列舉了部分指令)來訪問SIM來讀取、更新或者刪除SIM卡中的數據:

  • SELECT: 選擇某一個文件;
  • STATUS: 查看當前目錄的信息
  • READ BINARY: 從透明EF文件中讀取字節序列
  • UPDATE BINARY: 更新當前透明EF文件的數據
  • READ RECORD: 讀取線性定長EF文件或者循環EF文件的記錄
  • UPDATE RECORD: 更新線性定長EF或循環EF文件的記錄

如何將上述功能映射到數據交換協議APDU了?就是說要確定了APDU的指令格式。ME與SIM之間的通信模式是半雙工的(half-duplex),就是說存在兩個通信通道,一個是請求命令通道,另一個是數據返回通道,但兩者不能同時發送數據。與此相對應,APDU有兩種命令:

  • Command APDU: ME向SIM卡請求某個數據時需要發送的命令;
  • Response APDU: SIM響應ME的命令請求,返回給ME時的APDU.

請求APDU命令由兩個部分組成:命令頭(必須)和命令主體(可選):

Command APDU

  • CLA(1byte): 指令類別,用於應用的識別,對GSM應用來說使用A0
  • INS(1byte): 請求指令碼,比如SELECT使用A4;STATUS使用F2
  • P1(1byte)/P2(1byte): 指令的參數
  • Lc: 數據長度
  • Le = 0(length of the expected response), 若是一個寫指令,則沒有數據;若是讀指令,則需要返回256個字節的數據
  • Data Field: 數據長度由Lc指定,字節序列

請求響應的APDU由兩部分組成:一部分是數據,另個一個部分包含了請求指令的狀態碼(請求返回結果):

Response APDU

  • Data Field(可變成長度): 字節序列
  • SW1(1byte)/SW2(1byte):狀態碼,表示請求指令返回的結果

上述SW1/SW2狀態碼主要有以下幾種:

| SW1 | SW2 | 含義 | 
| 0x90 | 0x00 | Success | 
| 0x6E | 0x00 | CLA error | 
| 0x6D | 0x00 | INS error | 
| 0x6B | 0x00 | P1,P2 error | 
| 0x67 | 0x00 | LEN error | 
| 0x98 | 0x04 | Bad PIN | 
| 0x98 | 0x40 | Card Blocked | 
| 0x98 | 0x02 | no CHV initialized | 
| 0x94 | 0x00 | no EF selected |


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM