作者归档:softsim

CSIM初始化全过程

C.S0065-B v3.0
7.1.1 初始化

7.1.1.1 CSIM应用选择
在UICC激活后, ME选择一个CSIM应用.
如果没有EF_DIR文件 或者 在EF_DIR文件里没有CSIM应用列出, ME将尝试选择R-UIM

7.1.1.2 CSIM初始化
如果EF_ME3GPDOPC(也就是要支持3G Packet Data Simple IP或者Mobile IP服务) 文件存在, 在选择CSIM应用后, CSIM应该将EF_ME3GPDOPC的第1个字节
设置为’00’

1) ME执行紧急呼叫代码(Emergency Call Codes)请求
2) 首选 语言 (Preferred Language)
3) 执行 用户验证过程 (PIN1 PIN2), 如果此过程没有成功执行, 初始化过程终止.
4) ME执行 管理数据(Administrative Data)请求
5) 执行 CSIM Service Table 请求
6) 执行 Enable Service Table 请求 (? 新标准已经不要求这个了)
7) 执行 OTASP/OTAPA 特性请求
8) 执行 RUIMID请求
9) 执行 ESN_MEID_ME 更新
10) ME特定的配置请求
如果ME和CSIM都支持相关的服务, 还应该执行下面的过程
11) Service Preference
12) AKA(3GCIK)
13) IMSI
14) Access Overload Class information
15) PRL 和 EPRL
16) PUZL (Preferred User Zone List)
17) 3GPD Operation Capabilities 更新
18) Device Model 更新
19) Multimode Location Association Priority List(MLPL)
20) Multimode System Priority List(MSPL)
21) 读取 ME和CSIM都支持的 附加服务相关的EF
在CSIM初始化完成后, ME准备好一个CSIM的会话, 就往CSIM发送一个STATUS命令(P1=01 标识当前应用已经初始化完成)

HRPD Access Authentication Capability Parameters

如果 7F25/6F32 的第5项 服务 被设置, 那么就应该存在EF_HRPDCAP 文件
文件大小: 3字节
结构: 透明二进制

编码方法 定义在 3GPP2 C.S0016-D, Over-the-Air Service Provisioning of Mobile Stations in Spread Spectrum Systems 中

3.5.8.12 HRPD Access Authentication Capability Parameters
第1个字节 MAX_NAI_LENGHT (Maximum Access Authentication NAI length) 0x40 (建议值 >= 0x48)
第2个字节 MAX_SS_LENGHT (Maximum Length of the Shared Secret Data) 高5位有效, 低3位保留为0 0x80 (>=0x10)
第3个字节 AUTH_ALGORITHM 鉴权算法 0x80 (最高位为,表示为 CHAP模式)

————-
Network Access Identifier (NAI)
中国电信 2017的USIM中 这个文件的值是 488080, 确实是符合规范的

CSIM Service Table

7F25/6F32

FF 03 FF 33 FF FF 3C 03 00 C0 00 00
FF 03 FC 03 FF 00 FC 03 00 0C 00 00 (老sim错误)
改成
00 03 C3 00 03 00 00 00 00 C0 00 00

CHV disable function 11 (可取消)
Abbreviated Dialing Numbers(ADN) 11 (可取消)
Fixed Dialing NUmbers(FDN) 11 (可取消)
Short Message Storage(SMS) 11 (可取消)

HRPD 11
Enhanced Phone Book 00
Multi Media Domain(MMD) 00
SF_EUIMID-based EUIMID 00

MEID Support 11
Extension 1 11 (可取消)
Extension 2 11 (可取消)
SMS Parameters 11

Last Number Dialed(LND) 11 (可取消)
Service Catergory Program for BC_SMS 00
Messaging and 3GPD Extensions 11 (可取消)
Root Certificated 00

CDMA Home Service Provider Name 11
Service Dialing Numbers(SDN) 11 (可取消)
Extenssion 3 11 (可取消)
3GPD-SIP 11 (可取消)

WAP Browser 11 (可取消)
Java 11 (可取消)
Reserved for CDG 11 (可取消)
Reserved for CDG 11 (可取消)

Data Download via SMS Broadcast 00
Data Download via SMS-PP 11 (可取消)
Menu Selection 11 (可取消)
Call Control 00

Proactive R-UIM 11 (可取消)
AKA 00
IPV6 00
RFU 00

RFU 00
RFU 00
RFU 00
RFU 00

RFU 00
3GPD-MIP 00
BCMCS 00
Multimedia Message Servicde(MMS) 11

Extension 8 00
MMS User Connnectivity Parameters 00
Application Authencation 00
Group Identifer Level 1 00

Group Identified Level 2 00
De-Peronalization Control Keys 00
Cooperative Network List 00
Call Control for Mobile Originated SMS Sevice 00

7FF1/6F32
E62A049CF40000000000
改成
C0020400000000000000

Local Phone book — 0
Fixed Dialing Numbers(FDN) — 1 (可以取消)
Extension 2 — 1 (可以取消)
Service Dialing Numbers(SDN) — 0

Extension 3 — 0
Short Message Storage — 1 (可以取消)
Short Message Parameters — 1
HRPD — 1

Service Category Program for BS-SMS —0
CDMA Home Service Provider Name —1
via SMS Broadcast (for CCAT) —0
Data Download via SMS-PP (for CCAT) —1 (可以取消)

Call Control for Voice Services —0
3GPD-SIP —1 (可以取消)
3GPD-MIP —0
AKA —0

IP-based Location Service (LCS) —0
BCMCS —0
Multimedia Messaging Service(MMS) —1
Extension 8 —0

MMS User Connectivity Parameters —0
Application Authentication —0
Group Identifier Level 1 —0
Group Identifier Level 2 —-0

De-Presonalization Control Keys —0
Cooperative Network List —0
Outgoing Call Information —1 (可以取消)
Incoming Call Information —1 (可以取消)

Extension 5 —1 (可以取消)
Multimedia Storage —0
Image(EF_Img) —0
Reservred (Enable Service Table) —1 (可以取消)

Reservred (Capability Configuration Parametr) — 0
SF_EUIMID-based EUIMID — 0
Messaging and 3GPD Extensions — 1 (可以取消)
Root Certificated — 0

WAP Browser —1 (可以取消)
Java —1 (可以取消)
Reserved for CDG —1 (可以取消)
Reserved for CDG —1 (可以取消)

IPV6 —0
Call Control for Data Service —0
Call Control for Mobile Originated SMS –0
Card Supported ENVELOPE (USSD Data Download) and ENVELOPER(Call Control) for USSD

softsim在android上实现自启动

<receiver android:name=”im.softs.softsim.receiver.SimStateChangeReceiver”>
<intent-filter>
<action android:name=”android.intent.action.SIM_STATE_CHANGED”/>
</intent-filter>
</receiver>

<receiver android:name=”.SoftSIMControlLaunch”>
<intent-filter android:priority=”100″>
<action android:name=”android.intent.action.BOOT_COMPLETED”/>
</intent-filter>
<intent-filter android:priority=”100″>
<action android:name=”android.intent.action.SIM_STATE_CHANGED”/>
</intent-filter>
</receiver>

EF MAXPRL (Maximum PRL)

EF MAXPRL (Maximum PRL)

第1-2字节  EF PRL 的 MAX_PR_LIST_SIZE
第3-4字节  EF EPRL 的 MAX_PR_LIST_SIZE (可选,如果 EPRL不存在, 此字段也不应该存在)

sim对选择DF/MF/EF的响应

3GPP TS 11.11 version 8.14.0 Release 1999 / ETSI TS 100 977 V8.14.0 (2007-06)
第41页  Response parameters/data in case of an MF or DF

类似于 USIM卡中 Tag为0x62 的 FCP(File control parameters)

1-2     RFU 保留将来使用
3-4     在所选择的目录下的空闲空间大小
5-6     文件ID
7       文件类型:01=MF,02=DF
8-12      RFU
13       可选项目(从14字节开始到结束)的长度
14       文件特性: 
          b1  b3  b4
           1   0   0   允许时钟停止, 无优先电平
           1   1   0   允许时钟停止, 高电平优先
           1   0   1   允许时钟停止, 低电平优先
           0   0   0   不允许时钟停止
           
        对于鉴权等耗时指令,  时钟是必须的,  b2=0, 时钟至少是 13/8 MHz,  b2=1时,至少 13/4 MHz

         b8 表示CHV是否启用

15       当前目录的DF个数(直接DF,不含二级DF)
16       当前目录的EF个数
17       密码个数(CHV, Unblock CHV, ADM等)
18       RFU
19       CHV1状态
20       Unblock CHV1状态
21       CHV2状态
22       Unlock CHV2状态
23       RFU
24-34    保留给管理目的

一般的sim卡 selec会回 9F17, 也就是响应长度为 23个字节

A0A40000027F20   
9F17

但是 MediaTek的基带 认为 这个响应内容 应该只有 0x16 (22)个字节

因为规范中明确说了:

Bytes 1 – 22 are mandatory and shall be returned by the SIM. Bytes 23 and following are optional and may not be
returned by the SIM.

前面22个字节是必须有SIM卡返回的.
23之后的是可选的.

EF的响应 (Response parameters/data in case of an EF)

1-2    RFU
3-4    文件大小(对于透明文件:没得说,就是整个大小,对于记录文件,也是整个大小:记录长度*记录数)
5-6    文件ID
7      文件类型: 04=EF
8      RFU
9     访问权限(0=ALW, 1=CHV1, 2=CHV2, 3=RFU, 4=ADM … E=ADM, F=NEVER): 高半字节为READ,SEEK权限, 低半字节为UPDATE权限
10     访问权限, 高半字节为INCREASE, 低半字节保留
11     高半字节为REHABILITATE, 低半字节为 INVALIDATE
12     文件状态: 01 有效
13     接下来的字段长度
14     文件结构: 00 =透明 01= 线性固定 02= RFU 03= 循环
15     记录长度 (如果为记录文件,单个记录的大小), 非记录文件,这个值为0

Bytes 1-14 are mandatory and shall be returned by the SIM.
前14个字节是所有文件都必须的
如果是记录文件, 那么第15个字节也必须有

实例:
DF_GSM:
0000 RFU
0000 剩余空间大小
7F20
02     类型:DF
0000000000 RFU
09
93 sim特性
00 子DF个数
18 子EF个数
06 密码个数
00   RFU
83
8A
83
8A
—————————
MF:
0000
0000
3F00
01
0000000000
09
93
04 子DF个数
08  子EF个数
06  密码个数
00
83
8A
83
8A
—————————

usim卡手机接入2G网络

或者usim卡使用2G手机接入3G网络

从 XRES (3G USIM response) 生成 SRES (2G handset response)

参考 3GPP TS 33.102 version 14.1.0 Release 14 , 也就是ETSI TS 133 102 V14.1.0 (2017-03)

Interoperation and handover between UMTS and GSM

RAND [GSM] = RAND
SRES [GSM] = XRES* 1 xor XRES* 2 xor XRES* 3 xor XRES* 4
Kc [GSM] = CK 1 xor CK 2 xor IK 1 xor IK 2

改成Java版本

    public static byte[] genKc(byte[] ck, byte[]ik) {
        byte[] kc = new byte[8];
        for(int i=0; i<8; i++) {
            kc[i] = (byte)(ck[i] ^ ck[i+8] ^ ik[i] ^ ik[i+8]);
        }
        return kc;
    }


    public static byte[] genSRES(byte[] xres) {
        byte[] sres = new byte[4];
        byte[] pad = new byte[] {0, 0, 0, 0,  0, 0, 0, 0};
        for(int i=0; i<4; i++) {
            sres[i] = (byte)(xres[i] ^ xres[i+4] ^ pad[i] ^ pad[i+4]);
        }
        return sres;
    }

Python版本

# Kc (2G handset ciphering key) from CK / IK (3G USIM keys)
def conv_C3(CK=16*'\x00', IK=16*'\x00'):
    if len(CK) != 16 or len(IK) != 16:
        _log('Your CK / IK are not the right length [16]')
        return
    return xor_string(xor_string(xor_string(CK[0:8], CK[8:16]), \
                                  IK[0:8]), \
                       IK[8:16])


def conv_C2(XRES=16*b'\x00'):
    # adapt XRES length
    len_xres = len(XRES)
    if len_xres < 4:
        _log('Your XRES is damned too short [<4]')
        return
    elif 4 <= len_xres < 16:
        XRES += (16-len_xres)*b'\x00'
    elif len_xres > 16:
        XRES = XRES[:16]
    # xor the 4 parts of 4 bytes each
    #sres[i] = res[i] ^ res[i + 4] 
    return xor_string(xor_string(xor_string(XRES[:4], XRES[4:8]), 
                                        XRES[8:12]),
                        XRES[12:16])

sim卡相关在线分析工具

APDU分析
https://www.javacardos.com/tools/apdu-parser.html

ATR分析与合成
https://www.javacardos.com/tools/atr.html

Java Card Development Kit
https://javacardos.com/download/developmentkit/jckit.zip

JCKit_JAVACOS_Beta_2.0.6.2
http://javacardos.com/download/developmentkit/JCKit_JAVACOS_Beta_2.0.6.2.zip

HPLMN selector with Access Technology

EF_HPLMNwAcT (HPLMN selector with Access Technology)
文件标识符 ‘6F62′
短文件标识符 SFI: ’13’
文件大小: 5n (n ≥ 1)

编码规则 同 EF_PLMNwAcT (User controlled PLMN selector with Access Technology)

中国联通

64F010400064F090400064F010800064F0908000FFFFFF0000FFFFFF0000FFFFFF0000FFFFFF0000

中国移动
64F000400064F000800064F0000080

中国电信
FFFFFFFFFFFFFFFFFFFF

分析:
64F000 4000 中国移动 E-UTRAN 在WB-S1模式和NB-S1模式
64F000 8000 E-UTRAN not selected, 且选择了 UTRAN
64F000 0080 (0000 0000/1000 0000) GSM and EC-GSM-IoT

64F010 4000
64F090 4000
64F010 8000
64F090 8000
FFFFFF 0000
FFFFFF 0000
FFFFFF 0000
FFFFFF 0000

                  E-UTRAN  UTRAN cdma2k1xRTT cdma2kHRPD gsmCompact gsm
64F000 4000         v
64F000 8000                  v
64F000 0080                                                         v

Equivalent HPLMN

EF_EHPLMN (Equivalent HPLMN)
文件标识符: 6FD9
短文件标识符: 1D
文件大小: 3n (n>=1)

等效归属PLMN

当中国移动的IMSI为46000开头的用户, 注册到 460 02 的网络时, 如果没有设置 等效归属PLMN, 就会显示漫游状态

中国电信 64F01164F030FFFFFFFFFFFF ( 等效网络为 460 11 和 460 03)
中国移动 64F00064F07064F02064F080 ( 等效网络为 460 00 , 460 07, 460 02, 460 08)
中国联通 64F010FFFFFFFFFFFFFFFFFF ( 等效网络为 460 01)
其实联通还有一个 物联网网号为 460 06