目錄
SIM 卡
SIM 卡,用戶身份模塊(Subscriber Identity Module,SIM),是主要用於存儲用戶身份識別數據、短信數據和電話號碼的智能卡。
SIM 卡主要用於 GSM(2G)網絡和 TD-SCDMA(3G)網絡,但是兼容的模塊也可以用於 IDEN 電話。有人把 CDMA2000 和 CDMAOne 的 RUIM 卡和 UIM 卡,也稱作 SIM 卡,雖然兩者作用類似,並遵守了一樣的所有機械、電氣標准和部分軟件標准,但是上層應用並不一定兼容。
SIM 由 CPU、ROM、RAM、EEPROM 和 I/O 電路組成。用戶使用 SIM 卡時,實際上是手機向 SIM 卡發出命令,SIM 卡應該根據標准規范來執行或者拒絕。
值得注意的是,SIM 卡並不是單純的信息存儲器,也具有運算功能,擁有 ADM key 的 SIM 卡甚至可以運行 Java 程序。當前的 SIM 卡允許在用戶使用時加載程序運行。這些程序通過 SIM 工具箱與手機或者服務器進行交互通訊,SIM 工具箱程序使用私有 API 編寫,為了保證程序的交互使用性,ETSI 提出了 Java Card 的解決方案。SIM 卡規格現由 3GPP 和 ETSI 維護。
由於 SIM 卡只支持單向鑒權,不支持雙向鑒權。即網絡對手機(SIM)進行合法性的認證,缺乏用戶對網絡的認證,這就給諸如 “偽基站” 這樣的不法行為留了空子,其后果為犯罪分子任意冒用他人手機號碼或任意號碼強行向用戶手機發送詐騙、推銷等垃圾短信。將手機卡升級為 USIM卡 就可以解決這一漏洞。
USIM 卡
USIM 卡,UMTS 用戶身份模塊(UMTS Subscriber Identity Module),是用於 UMTS 網絡中的用戶身份識別模塊。USIM 卡還可以儲存使用者資料、電話號碼、認證資料、密鑰、加密算法以及為短信提供儲存空間。USIM 卡通常被認為是 SIM 卡的升級版,在 LTE(4G)網絡中必須使用 USIM 卡,同時 USIM 卡兼容 2G、3G 網絡。
當用戶需在外國使用漫游服務時,可以把原用的 USIM 卡插入對應該地的無線制式設備,即兼容此 USIM 卡的手機來使用漫游服務。為提供認證服務,USIM 卡儲存一組長期的加密鑰匙(Ki),與網絡的認證中心(AUC)共用。USIM 卡亦認證一串連續數字,這些數字不可超過一個范圍,以避免被重放攻擊。
由於 USIM 卡支持雙向鑒權,允許手機(USIM)對網絡進行合法性認證,這種做法有效地解決了 SIM 卡只支持單向鑒權,不支持雙向鑒權的安全漏洞,有效的解決了偽基站、信息泄露和垃圾短信的騷擾。
USIM 卡的關鍵參數
ICCID(Integrated Circuit Card Identification,智能卡識別序列號碼):用以標識 USIM 卡。格式為:898600 M F SS YY G XXXXXXX
,含義如下:
- 898600:固定不變。
- M:代表移動業務接入號的末位,分別為 9、8、7、6、5。
- SS:代表各省編號。
- YY:代表編制 ICCID 時的年號(取年份的后兩位)。
- G:代表 SIM 卡供應商的編號。
IMSI(International Mobile Subscriber Identity,國際用戶識別碼):全球唯一的用戶識別碼,在於移動通信網絡系統交互時作為用戶身份識別的依據。
Ki:鑒權密鑰,用於用戶身份的鑒權。
OP:鑒權密鑰,用於用戶身份的鑒權,每個省公司使用唯一的 OP。
OPc:鑒權密鑰,使用 OP 和 Ki 分散計算得出。
NOTE:IMSI、Ki、OP/OPc 都是唯一的,在 LTE/EPC 中會被記錄在 HSS 中央數據庫。IMSI 和 Ki 值都存在初始的 USIM 卡中,而只會在 USIM 卡中存儲 OP 或 OPC 兩者之一。對 USIM 卡進行讀寫,主要是對這三個數值進行讀寫。
C1-C5:為 TDS-CDMA 的鑒權常量。
R1-R5:為 TDS-CDMA 鑒權旋轉常量。
NOTE:以上兩種參數每個省使用唯一的值,存儲於初始的 USIM 卡中。
SQN(Sequence Number):是 TDS-CDMA 網絡下發的鑒權參數,鑒權完畢后,SQN 值將被存放於 USIM 卡中,初始卡中 SQN 值為 0。
L 和 Delta:是用於校驗 SQN 合法性的參數,L 和 Delta 存儲於 USIM 卡中,並且每個省份使用唯一的值。
pySim 讀寫軟件與 ADM key
pySim 可用於對 USIM 卡進行讀寫,支持串口與 PC/SC 兩種讀卡器。e.g.
- -d:Serial Device fo SIM Access [default: /dev/ttyUSB0]
- -p:Which PS/SC number for SIM access
注意,上述 PS/SC number 是執行 pcsc_scan
指令后得到的,如下述輸出中的 0:
Scanning present readers...
0: Identiv SCR35xx USB Smart Card Reader [CCID Interface] (xxxxxxxxxxxxxx) 00 00
pySim 支持 sysmoUSIM-GR1、sysmoUSIM-SJS1等 USIM 卡,寫 USIM 卡最主要的是對 ADM key 進行鑒權以及關鍵參數(Ki、IMSI、OP/OPc)的寫入,寫卡命令大部分情況下都是符合智能卡標准的,通過 pySim 寫 USIM 卡則需要解決兩個問題:
- ADM key 獲取及 ADM key 鑒權。
- 某些非標准參數(通常是 Ki)的讀寫(NOTE:此處的 “非標准” 指文件位置或者寫卡命令非標准,然而在 APDU 層面都是標准的)。
pySim 的具體操作方法奇怪瀏覽官方 Wiki:https://osmocom.org/projects/pysim/wiki