在SIM数据交互之-C0(GET RESPONSE)里面已经有列出一些fcp的数据,但是没有解析fcp里面具体的数据格式和内容,这边再进行一些补充
对于FCP的格式分成两种
- MF,DF,或者ADF的FCP
- EF的FCP
1.MF,DF,或者ADF的FCP
| 序号 | 描述 | 标签 | 状态 |
|---|---|---|---|
| 1 | FCP模板标签 | ‘62’ | M |
| 2 | 文件描述符 | ‘82’ | M |
| 3 | 文件标识符 | ‘83’ | C1 |
| 4 | DF 名称(AID) | ‘84’ | C2 |
| 5 | 专有信息 | ‘A5’ | C3 |
| 6 | 生存周期 | ‘8A’ | M |
| 7 | 安全特性 | ‘86’, ‘8B’, ‘8C’ 或 ‘AB’ | C4 |
| 8 | PIN状态模板DO | ‘C6’ | M |
| 9 | 总文件大小 | ‘81’ | O |
| 字母 | 含义 |
|---|---|
| M | 必须。 |
| O | 可选。 |
| C1 | 对于DF或MF,必选。对于ADF,可选。 |
| C2 | DF名称只对ADF是必须的。 |
| C3 | 对于MF,专有信息是必须的,对于DF/ADF,是可选的。 |
| C4 | 有,且只有一个标签必须有。 |
对上面的文件描述符进行简要说明,其他描述的还没理解透,以后有进展接着更新
1.1 文件描述符 82
在《3-SIM文件结构及文件操作指令》里面有讲到文件的结构,其实就是MF/DF/EF/ADF。MF/DF/ADF目录下只有FCP文件,EF下面除了有FCP外还有有BO或B2文件。
可是我们怎么知道一个文件对应的是什么类型的文件,所以文件描述符的作用就体现出来了,该文件可以让我们判断上面的所有类型。
如下表格定义:
| b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含义 |
|---|---|---|---|---|---|---|---|---|
| 0 | X | - | - | - | - | - | - | 文件访问属性 |
| 0 | 0 | - | - | - | - | - | - | 非共享文件 |
| 0 | 1 | - | - | - | - | - | - | 共享文件 |
| 0 | - | X | X | X | - | - | - | 文件类型 |
| 0 | - | 0 | 0 | 0 | - | - | - | 工作EF |
| 0 | - | 0 | 0 | 1 | - | - | - | 内部EF |
| 0 | - | 0 | 1 | 0 | - | - | - | RFU |
| 0 | - | 0 | 1 | 1 | - | - | - | |
| 0 | - | 1 | 0 | 0 | - | - | - | |
| 0 | - | 1 | 0 | 1 | - | - | - | |
| 0 | - | 1 | 1 | 0 | - | - | - | |
| 0 | - | 1 | 1 | 1 | - | - | - | DF 或 ADF |
| 0 | - | - | - | - | X | X | X | EF结构 |
| 0 | - | - | - | - | 0 | 0 | 0 | 无参考信息 |
| 0 | - | - | - | - | 0 | 0 | 1 | 透明文件(二进制) |
| 0 | - | - | - | - | 0 | 1 | 0 | 线性固定文件 |
| 0 | - | - | - | - | 0 | 1 | 1 | RFU |
| 0 | - | - | - | - | 1 | 0 | 0 | |
| 0 | - | - | - | - | 1 | 0 | 1 | |
| 0 | - | - | - | - | 1 | 1 | 0 | 循环文件 |
| 0 | - | - | - | - | 1 | 1 | 1 | RFU |
| 1 | X | X | X | X | X | X | X | RFU |
下面我们取几个常用的文件描述符进行说明:
| 文件描述符 | 内容分析 |
|---|---|
| 41 | 共享文件 工作EF 透明文件(二进制)B0 |
| 42 | 共享文件 工作EF 线性固定文件 B2 |
| 46 | 共享文件 工作EF 循环文件 B2 |
| 78 | 共享文件 DF 或 ADF C0/F2 |
1.2 举例说明
上面表中可以很清楚的看到每个字段的含义,而且FCP的内容也都是按照上面的顺序排列,我们下面看几个例子就会比较清楚。
文件1:MF(3F00)
FCP内容如下:62278202782183023F00A507800171C00200018A01058B032F0602C60C90016083010183018183010A
我们将其按上面的表格进行类型分解可得:
| 描述 | 标签 | 状态 | 内容 |
|---|---|---|---|
| FCP模板标签 | ‘62’ | M | 62 27 |
| 文件描述符 | ‘82’ | M | 82027821 |
| 文件标识符 | ‘83’ | C1 | 83023F00 |
| DF 名称(AID) | ‘84’ | C2 | 只对ADF是必须的 |
| 专有信息 | ‘A5’ | C3 | A507800171C0020001 |
| 生存周期 | ‘8A’ | M | 8A0105 |
| 安全特性 | ‘86’, ‘8B’, ‘8C’ 或 ‘AB’ | C4 | 8B032F0602 |
| PIN状态模板DO | ‘C6’ | M | C60C90016083010183018183010A |
| 总文件大小 | ‘81’ | O | 可选 |
上表就可以比较直观的看到各标签对应的状态了,下表再做一个具体的数据分析
| 所属字节 | 原始内容 | 内容分析 |
|---|---|---|
| 1 | 62 | FCP模块标签 |
| 2 | 27 | FCP模块的长度(十进制:30) |
| 3 | 82 | 文件描述符标签 |
| 4 | 02 | 文件描述符长度(十进制:2) |
| 5 | 78 | 文件描述符(DF 共享文件) |
| 6 | 21 | 文件描述符数据编码 |
| 7 | 83 | 文件识别符标签 |
| 8 | 02 | 文件识别符长度(十进制:32) |
| 9-10 | 3F00 | 文件识别符 |
| 11 | A5 | 专有信息标签 |
| 12 | 07 | 专有信息长度(十进制:7) |
| 13 | 80 | UICC特性标签 |
| 14 | 01 | UICC特性长度(十进制:1) |
| 15 | 71 | UICC特性(允许时钟停止,无优先级别 支持电压级别A、B、C) |
| 16 | 8A | 生命周期标签 |
| 17 | 01 | 生命周期长度(十进制:1) |
| 18 | 05 | 生命周期(操作状态-激活) |
| 19 | 8B | 安全特性标签 |
| 20 | 03 | 安全特性长度(十进制:3) |
| 21-22 | 2F06 | EF_ARR的文件标识符 |
| 23 | 02 | EF_ARR中对应的记录数(十进制:2) |
| 24 | C6 | PIN状态模块标签 |
| 25 | 0C | PIN状态模块(十进制:12) |
| 26 | 90 | PS_DO标签 |
| 27 | 01 | PS_DO长度(十进制:1) |
| 28 | 60 | PS_DO |
| 29 | 83 | 密钥索引标签 |
| 30 | 01 | 密钥索引长度(十进制:1) |
| 31 | 01 | 密钥索引(PIN Appl 1) |
| 32 | 83 | 密钥索引标签 |
| 33 | 01 | 密钥索引长度(十进制:1) |
| 34 | 81 | 密钥索引(Second PIN Appl 1) |
| 35 | 83 | 密钥索引标签 |
| 36 | 01 | 密钥索引长度(十进制:1) |
| 37 | 0A | 密钥索引(ADM1) |
文件2:DF(7F10)
FCP内容如下:621E8202782183027F108A01058B032F0602C60C90016083010183018183010A
| 所属字节 | 原始内容 | 内容分析 |
|---|---|---|
| 1 | 62 | FCP模块标签 |
| 2 | 1E | FCP模块的长度(十进制:30) |
| 3 | 82 | 文件描述符标签 |
| 4 | 02 | 文件描述符长度(十进制:2) |
| 5 | 78 | 文件描述符(DF 共享文件) |
| 6 | 21 | 文件描述符数据编码 |
| 7 | 83 | 文件识别符标签 |
| 8 | 02 | 文件识别符长度(十进制:2) |
| 9-10 | 7F10 | 文件识别符 |
| 11 | 8A | 生命周期标签 |
| 12 | 01 | 生命周期长度(十进制:1) |
| 13 | 05 | 生命周期(操作状态-激活) |
| 14 | 8B | 安全特性标签 |
| 15 | 03 | 安全特性长度(十进制:3) |
| 16-17 | 2F06 | EF_ARR的文件标识符 |
| 18 | 02 | EF_ARR中对应的记录数(十进制:2) |
| 19 | C6 | PIN状态模块标签 |
| 20 | 0C | PIN状态模块(十进制:12) |
| 21 | 90 | PS_DO标签 |
| 22 | 01 | PS_DO长度(十进制:1) |
| 23 | 60 | PS_DO |
| 24 | 83 | 密钥索引标签 |
| 25 | 01 | 密钥索引长度(十进制:1) |
| 26 | 01 | 密钥索引(PIN Appl 1) |
| 27 | 83 | 密钥索引标签 |
| 28 | 01 | 密钥索引长度(十进制:1) |
| 29 | 81 | 密钥索引(Second PIN Appl 1) |
| 30 | 83 | 密钥索引标签 |
| 31 | 01 | 密钥索引长度(十进制:1) |
| 32 | 0A | 密钥索引(ADM1) |
文件3:ADF(7FF0/A0000000871002FF86FFFF89FFFFFFFF)
FCP内容如下:622C820278218410A0000000871002FF86FFFF89FFFFFFFF8A01058B032F0602C60C90016083010183018183010A
| 所属字节 | 原始内容 | 内容分析 |
|---|---|---|
| 1 | 62 | FCP模块标签 |
| 2 | 2C | FCP模块的长度(十进制:44) |
| 3 | 82 | 文件描述符标签 |
| 4 | 02 | 文件描述符长度(十进制:2) |
| 5 | 78 | 文件描述符(DF 共享文件) |
| 6 | 21 | 文件描述符数据编码 |
| 7 | 84 | DF名称标签 |
| 8 | 10 | DF名称长度(十进制:16) |
| 9-24 | A0000000871002FF86FFFF89FFFFFFFF | DF名称 |
| 25 | 8A | 生命周期标签 |
| 26 | 01 | 生命周期长度(十进制:1) |
| 27 | 05 | 生命周期(操作状态-激活) |
| 28 | 8B | 安全特性标签 |
| 29 | 03 | 安全特性长度(十进制:3) |
| 30-31 | 2F06 | EF_ARR的文件标识符 |
| 32 | 02 | EF_ARR中对应的记录数(十进制:2) |
| 33 | C6 | PIN状态模块标签 |
| 34 | 0C | PIN状态模块(十进制:12) |
| 35 | 90 | PS_DO标签 |
| 36 | 01 | PS_DO长度(十进制:1) |
| 37 | 60 | PS_DO |
| 38 | 83 | 密钥索引标签 |
| 39 | 01 | 密钥索引长度(十进制:1) |
| 40 | 01 | 密钥索引(PIN Appl 1) |
| 41 | 83 | 密钥索引标签 |
| 42 | 01 | 密钥索引长度(十进制:1) |
| 43 | 81 | 密钥索引(Second PIN Appl 1) |
| 44 | 83 | 密钥索引标签 |
| 45 | 01 | 密钥索引长度(十进制:1) |
| 46 | 0A | 密钥索引(ADM1) |
2.EF的FCP
| 序号 | 描述 | 标签 | 状态 |
|---|---|---|---|
| 1 | FCP模板标签 | ‘62’ | M |
| 2 | 文件描述符 | ‘82’ | M |
| 3 | 文件标识符 | ‘83’ | M |
| 4 | 专有信息 | ‘A5’ | O |
| 5 | 身存周期 | ‘8A’ | M |
| 6 | 安全特性 | ‘86’, ‘8B’, ‘8C’, 或 ‘AB’ | C1 |
| 7 | 文件大小 | ‘80’ | M |
| 8 | 总文件大小 | ‘81’ | O |
| 9 | 短标识符(SFI) | ‘88’ | O |
| 字母 | 含义 |
|---|---|
| M | 必须。 |
| O | 可选。 |
| C1 | 有,且只有一个标签必须有。 |
在我们知道该文件是EF文件之后,我们就会对该文件下面的内容BO/B2进行读取,不过再读取之前,我们需要知道该文件内容的个数和长度。
2.1 文件大小 83和80
由于EF下面有两种文件,一种binary(B0),一种record(B2)。
对于B0来说只有一个文件,我们直接通过80字段的数据获取,对于B2的我们则需要通过80字段获取总长度,83字段获得一共有多少个B2,每个B2有多长。
2.2 举例说明
文件1:2FE2
FCP内容如下:62178202412183022FE28A01058B032F06018002000A880110
同样的我们也将EF的文件按上面的表格进行类型分解可得:
| 描述 | 标签 | 状态 |
|---|---|---|
| FCP模板标签 | ‘62’ | M |
| 文件描述符 | ‘82’ | M |
| 文件标识符 | ‘83’ | M |
| 专有信息 | ‘A5’ | O |
| 身存周期 | ‘8A’ | M |
| 安全特性 | ‘86’, ‘8B’, ‘8C’, 或 ‘AB’ | C1 |
| 文件大小 | ‘80’ | M |
| 总文件大小 | ‘81’ | O |
| 短标识符(SFI) | ‘88’ | O |
上表就可以比较直观的看到各标签对应的状态了,下表再做一个具体的数据分析
| 所属字节 | 原始内容 | 内容分析 |
|---|---|---|
| 1 | 62 | FCP模块标签 |
| 2 | 17 | FCP模块的长度(十进制:23) |
| 3 | 82 | 文件描述符标签 |
| 4 | 02 | 文件描述符长度(十进制:2) |
| 5 | 41 | 文件描述符(工作EF 透明文件 共享文件) |
| 6 | 21 | 文件描述符数据编码 |
| 7 | 83 | 文件标识符标签 |
| 8 | 02 | 文件标识符长度(十进制:2) |
| 9-10 | 2FE2 | 文件标识符 |
| 11 | 8A | 生命周期标签 |
| 12 | 01 | 生命周期长度(十进制:1) |
| 13 | 05 | 生命周期(操作状态-激活) |
| 14 | 8B | 安全特性标签 |
| 15 | 03 | 安全特性长度(十进制:3) |
| 16-17 | 2F06 | EF_ARR的文件标识符 |
| 18 | 04 | EF_ARR中对应的记录数(十进制:4) |
| 19 | 80 | 文件大小标签 |
| 20 | 02 | 文件大小长度(十进制:2) |
| 21-22 | 000A | 文件大小(十进制:10) |
| 23 | 88 | 短文件标识符标签 |
| 24 | 01 | 短文件标识符长度(十进制:1) |
| 25 | 10 | 短文件标识符 |
说明:从83字段的数据可知文件描述符为41,所以改文件为B0,那就直接看80字段的文件大小为000A,即该B0长度为10个字节。
文件2:EF(6F06)
FCP内容如下:62198205422100370783026F068A01058B036F0601800201818800
同样的我们也将EF的文件按上面的表格进行类型分解可得:
| 描述 | 标签 | 状态 |
|---|---|---|
| FCP模板标签 | ‘62’ | M |
| 文件描述符 | ‘82’ | M |
| 文件标识符 | ‘83’ | M |
| 专有信息 | ‘A5’ | O |
| 身存周期 | ‘8A’ | M |
| 安全特性 | ‘86’, ‘8B’, ‘8C’, 或 ‘AB’ | C1 |
| 文件大小 | ‘80’ | M |
| 总文件大小 | ‘81’ | O |
| 短标识符(SFI) | ‘88’ | O |
上表就可以比较直观的看到各标签对应的状态了,下表再做一个具体的数据分析
| 所属字节 | 原始内容 | 内容分析 |
|---|---|---|
| 1 | 62 | FCP模块标签 |
| 2 | 19 | FCP模块的长度(十进制:25) |
| 3 | 82 | 文件描述符标签 |
| 4 | 05 | 文件描述符长度(十进制:5) |
| 5 | 42 | 文件描述符(工作EF 线性固定文件 共享文件) |
| 6 | 21 | 文件描述符数据编码 |
| 7-8 | 0037 | 记录长度(十进制:55) |
| 9 | 07 | 记录个数(十进制:7) |
| 10 | 83 | 文件标识符标签 |
| 11 | 02 | 文件标识符长度(十进制:2) |
| 12-13 | 6F06 | 文件标识符 |
| 14 | 8A | 生命周期标签 |
| 15 | 01 | 生命周期长度(十进制:1) |
| 16 | 05 | 生命周期(操作状态-激活) |
| 17 | 8B | 安全特性标签 |
| 18 | 03 | 安全特性长度(十进制:3) |
| 19-20 | 6F06 | EF_ARR的文件标识符 |
| 21 | 01 | EF_ARR中对应的记录数(十进制:4) |
| 22 | 80 | 文件大小标签 |
| 23 | 02 | 文件大小长度(十进制:2) |
| 24-25 | 0181 | 文件大小(十进制:385) |
| 26 | 88 | 短文件标识符标签 |
| 27 | 00 | 短文件标识符长度(不支持SPI) |
说明:从83字段的数据可知文件描述符为42,所以改文件为B2,所以接着看下面的记录长度和记录个数,一个记录长度为0x37,记录个数为7个。我们可以通过80字段的文件总大小进行验证是否一样,总文件大小为0x0181。(验证正确:0x37 * 0x07 = 0x0181)
参考文献:3GPP,ISO7816,百度百科等
1330

被折叠的 条评论
为什么被折叠?



