SIM卡文件系统

SIM卡内部采用了一种类似于计算机中的文件管理系统结构,即一个文件夹下有文件夹也有文件,子文件夹下又可以存放文件夹和文件。通过这种文件系统来存储和组织各种数据信息,包括服务提供商信息、用户身份识别信息、电话簿、短信等各种数据。

文件系统结构

关于SIM卡的文件系统的结构大致如下:

可以看出,SIM卡的文件系统是一个树形结构,包含下面三种类型的文件:

  • MF(Master File):这是文件系统的根,一个SIM卡中只有一个MF。它包含了各种DF和EF。

  • DF(Dedicated File):这是文件系统的下一级,可以看作是文件夹,每个DF下都包含了一组相关的EF。例如,有一个DF是用来存储电话簿的,它包含了存储各个电话记录的EF。常见的DF有DF-GSM、DF-TELECOM以及ADF。

  • EF(Elementary File):EF是基本文件,直接用于存储数据。每个EF有一个特定的格式和长度,用来存储特定的数据。例如,有一个EF是用来存储IMSI(国际移动用户识别码)的,只有在选择了这个EF后,设备才能读取IMSI。

在SIM卡文件系统中,所有文件(包括文件夹)都有一个ID,这个ID是一个两字节的十六进制数。文件ID用于设备发送SELECT命令选择文件时的参数。如果需要定位到某一个具体文件,则需要确定MFID、DFID和EFID。这几个ID确定后,相当于确定了某个文件的绝对路径。

我们以USIM为例,参考3GPP TS 31.102协议文档,可以看到,USIM文件系统内容定义如下:

通过上图可以看到,每一个文件都有一个ID,文件ID的唯一性取决于其在文件系统树中的位置。同一个父文件(即DF或MF)下的所有直接子文件(即DF或EF)的文件ID都是唯一的,不能重复。也就是说,同一个DF下不能有两个文件ID相同的文件。在不同的DF下,可以有文件ID相同的文件。因此,为了唯一确定一个文件,需要指定从MF开始,通过哪些DF可以到达这个文件,这就形成了一条路径,这条路径加上文件的ID,就可以唯一确定一个文件。

文件操作指令

ISO 7816标准和3GPP协议定义了一系列用于操作SIM卡文件系统的命令。这些命令用于选择、读取、写入或更新SIM卡内部的文件。下面是一些常用的命令:

命令 CLA INS 说明
SELECT 'A0' 'A4' 选择文件
READ BINARY 'A0' 'B0' 读取当前选中的二进制透明EF的内容
UPDATE BINARY 'A0' 'D6' 更新当前选中的二进制透明EF的内容
READ RECORD 'A0' 'B2' 读取当前选中的线性固定EF或者循环EF的内容
UPDATE RECORD 'A0' 'DC' 更新当前选中的线性固定EF或者循环EF的内容
STATUS 'A0' 'F2' 获取当前选中的文件的信息
GET RESPONSE 'A0' 'C0' 获取命令执行的响应数据

上述表格中的CLA表示类别代码,INS表示指令代码,这部分内容将在下一个章节关于APDU的文档中进行说明。

文件操作指令响应

执行SIM卡命令后,SIM卡会返回一个响应APDU,它由两个或更多的字节组成。最后两个字节通常被称为状态字(Status Word,SW1 和 SW2),它们代表命令执行的结果。以下是一些文件操作常见的状态字:

SW1 SW2 说明
'90' '00' 命令执行成功
'6A' '82' 找不到文件
'69' '81' 命令与文件结构不兼容(文件类型不匹配)
'62' '83' 选择的文件无效
'6A' '86' P1-P2参数错误

应用场景

  • 在初始化SIM卡进行注网时需要先读取SIM卡中的一些鉴权数据以及SIM卡的唯一标识,以及PLMN黑名单记录如EFFPLMN均可从SIM文件系统中读取。

  • 在存储短信时,可以选择存入SIM卡中,而SIM卡中存储的短信消息将会存储在SIM卡文件系统之中。

  • 当SIM卡短信占用空间已满,也可从SIM卡文件系统中删除短信数据。