UICC 之 USIM 详解全系列——Commands与Responses结构
本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。
文章目录
- Commands与Responses结构
- Command APDU
- CLA字段编码格式
- INS字段编码方式
- P1和P2字段
- Lc字段
- Data字段
- Le字段
- Response APDU
- SW1和SW2含义
- 通过PCSC实际操作一下USIM
- 大致流程
- 具体演示
Commands与Responses结构
Command APDU
APDU command由header和body部分组成,header由CLA,INS,P1,P2组成,header是一个 APDU command中必须存在一部分,而body部分是可选的,body部分由Lc,Data ,Le组成。
body部分中的Lc,Data ,Le不一定要全部出现在APDU command中,可能的组合如下图:
下面分别介绍每个字段的含义,如下表:
字段 | 长度 | 含义描述 | 分组 |
---|---|---|---|
CLA | 1 | 指令类型 | Header |
INS | 1 | 指令操作码 | Header |
P1 | 1 | 指令参数1 | Header |
P2 | 1 | 指令参数2 | Header |
Lc | 0或者1 | 数据字段的Byte长度 | Body |
Data | Lc | 数据字符串 | Body |
Le | 0或者1 | 希望获取的最大返回值长度 | Body |
CLA字段编码格式
标准逻辑信道下:
扩展逻辑信道下:
INS字段编码方式
P1和P2字段
这两个字段的具体含义由具体的command确定,如果该字段未使用(例如,command不需要传参的时候)则置为’00’。
举个例子,如SELECT命令的P1和P2字段含义如下图:
Lc字段
Lc用来告诉UICC,终端发送给UICC的数据长度,这个字段的取值范围介于1到255Bytes。这个字段是可选的,如果出现在APDU command中则数据字段必须出现,且紧跟在Lc字段之后。
Data字段
依赖于具体的APDU command,例如,更新电话簿文件就需要将电话号作为Data字段传入UICC中。
Le字段
举个例子,我想从UICC中获取一个随机数,获取多长的随机数呢,通过Le字段告诉UICC。
这个字段也是可选的,如果不出现则表示在response command中不希望携带任何data,如果出现则response command会返回Le个Byte长度的数据。
如果设置Le为’00’,则表示终端希望获取尽可能长的数据。这种情况下,UICC可能返回1到256Bytes中的任意长度的数据。
Response APDU
Response APDU由状态比特和数据字段组成,数据字段是可选的部分,而状态字段是必须出现的,如下表:
字段 | 长度 | 含义描述 |
---|---|---|
Data | Lr | response数据 |
SW1 | 1 | 状态Byte1 |
SW2 | 1 | 状态Byte2 |
SW1和SW2含义
正常流程
SW1 | SW2 | 含义描述 |
---|---|---|
‘90’ | ‘00’ | 命令正常结束,没有异常 |
‘91’ | ‘XX’ | 命令正常结束,但是有额外的XX Bytes的数据需要读取,这些数据来自proactive UICC,包含对终端的command |
‘92’ | ‘XX’ | 命令正常结束,但是有额外的XX Bytes的数据需要读取,这些数据与当前的会话相关 |
延迟处理
SW1 | SW2 | 含义描述 |
---|---|---|
‘93’ | ‘00’ | SIM Application当前繁忙,当前无法立即执行命令,将稍后执行 |
警告
SW1 | SW2 | 含义描述 |
---|---|---|
‘62’ | ‘00’ | 没有给出具体的警告信息,非易失性内存状态没有发生变化(也就是文件没有被修改) |
‘62’ | ‘81’ | 返回的数据可能被破坏 |
‘62’ | ‘82’ | 读取Le个Bytes的数据时,到达file/record尾(就是说Le大于file/record的长度了)或者 search失败 |
‘62’ | ‘83’ | 选择的文件无效 |
‘62’ | ‘85’ | 被选择的文件在一个termination state |
‘62’ | ‘F1’ | 更多的数据可以获取 |
‘62’ | ‘F2’ | 更多的数据可以获取,proactive command被挂起 |
‘62’ | ‘F3’ | response数据可读 |
‘63’ | ‘F1’ | 希望更多的数据 |
‘63’ | ‘F2’ | 希望更多的数据,proactive command被挂起 |
‘63’ | ‘CX’ | 使用内部更新重试程序’X’次之后,命令执行成功 或者 当前鉴权失败,剩余’X’次机会 |
执行错误
SW1 | SW2 | 含义描述 |
---|---|---|
‘64’ | ‘00’ | 没有给出具体的错误信息,非易失性内存状态没有发生变化(也就是文件没有被修改) |
‘65’ | ‘00’ | 没有给出具体的错误信息,但是非易失性内存状态发生变化(也就是文件被修改了) |
‘65’ | ‘81’ | 内存问题 |
基础错误检查
SW1 | SW2 | 含义描述 |
---|---|---|
‘67’ | ‘00’ | 命令长度错误 |
‘67’ | ‘XX’ | 这个状态字段的含义取决于具体的命令 |
‘6B’ | ‘00’ | P1、P2参数错误 |
‘6D’ | ‘00’ | INS字段错误或者不持支 |
‘6E’ | ‘00’ | CLA字段不支持 |
‘6F’ | ‘00’ | 技术问题,无法精确诊断错误 |
‘6F’ | ‘XX’ | 这个状态字段的含义取决于具体的命令 |
CLA不支持
SW1 | SW2 | 含义描述 |
---|---|---|
‘68’ | ‘00’ | 没有给出具体的错误信息 |
‘68’ | ‘81’ | 不支持逻辑信道 |
‘68’ | ‘82’ | 不支持安全报文发送 |
命令未授权
SW1 | SW2 | 含义描述 |
---|---|---|
‘69’ | ‘00’ | 没有给出具体的错误信息 |
‘69’ | ‘81’ | 命令与当前文件不兼容 |
‘69’ | ‘82’ | 安全状态不满足 |
‘69’ | ‘83’ | 鉴权/PIN被锁定 |
‘69’ | ‘84’ | Referenced数据无效 |
‘69’ | ‘85’ | 不满足使用条件 |
‘69’ | ‘86’ | 命令不允许执行,没有选择EF |
‘69’ | ‘89’ | 命令不允许执行-安全通道-安全不满足 |
错误参数
SW1 | SW2 | 含义描述 |
---|---|---|
‘6A’ | ‘80’ | 数据字段中的参数错误 |
‘6A’ | ‘81’ | 功能不支持 |
‘6A’ | ‘82’ | 文件未找到 |
‘6A’ | ‘83’ | record未找到 |
‘6A’ | ‘84’ | 没有足够的内存空间 |
‘6A’ | ‘86’ | P1、P2参数错误 |
‘6A’ | ‘87’ | Lc与P1、P2不一致 |
‘6A’ | ‘88’ | Referenced数据未找到 |
Application错误
SW1 | SW2 | 含义描述 |
---|---|---|
‘98’ | ‘50’ | INCREASE命令无法执行,已经达到最大值 |
‘98’ | ‘62’ | 鉴权失败,具体失败原因由Application定义 |
‘98’ | ‘63’ | 安全会话超时 |
‘98’ | ‘64’ | Minimum UICC suspension时间太长 |
通过PCSC实际操作一下USIM
大致流程
具体演示
我们以读取USIM的IMSI文件为例进行演示
- IMSI文件位于USIM Application中,我们需要先选择EFDIR
解析SELECT命令返回值,获取EFDIR的record信息(record长度)
遍历EFDIR的record,获取USIM Application AID
选择USIM Application
选择EFIMSI文件名读取IMSI
返回系列目录
UICC 之 USIM 详解全系列——Commands与Responses结构相关推荐
- UICC 之 USIM 详解全系列——UICC协议层结构
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC协议层结构 ...
- UICC 之 USIM 详解全系列——UICC基础知识介绍
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC(TS102 ...
- UICC 之 USIM 详解全系列——背景与系列介绍
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--背景与系列介绍 文章 ...
- UICC 之 USIM 详解全系列
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 一.项目背景介绍与系列介绍 1.1 项目背景 1.2 US ...
- UICC 之 USIM 详解全系列——UICC中的Apps与Files结构
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 UICC中的Apps与Files结构 一.UIC ...
- UICC 之 USIM 详解全系列——USIM Demo详解
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 USIM Demo详解 文件结构 核心code讲 ...
- UICC 之 USIM 详解全系列——USIM App关键流程介绍与命令详解
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 USIM App关键流程介绍与命令详解 USIM ...
- UICC 之 USIM 详解全系列——常用命令详解与实例说明
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 常用命令详解与实例说明 SELECT命令 REA ...
- UICC 之 USIM 详解全系列——USIM App文件结构
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 USIM App文件结构 USIM中的文件 US ...
最新文章
- 面试:HashMap 夺命二十一问!鸡哥都扛不住~
- 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( 线性卷积计算方法列举 | 线性卷积计算案例一 | 根据 线性卷积 定义直接计算 卷积 )
- GIt版本回退还不会用?轻松学会不怕失误
- OpenGL text rendering文字渲染的实例
- mysql文本自动递增_mysql-如何创建自动递增的字符串?
- php基础是什么,php基础学什么?
- php爱奇艺筛选标签,三种排序 快速筛选好视频_软件资讯技巧应用-中关村在线
- python加密敏感信息_仅需10行代码,使用python加密用户敏感数据
- 关于Google Guava的几个问题
- eve星战前夜登录提示服务器维护中,EVE星战前夜进不去怎么办 游戏进不去问题解决方法...
- 2020-09-14 编译Qt的MySQL 5.7插件: qsqlmysql.dll
- php--PDO操作数据库
- python中的元组字符串整数浮点数都是不可变的数据类型,Python不可变数据类型总结...
- 群晖3617可以有几个网卡_【群晖系统】黑群晖洗白13问~经典QA
- TA技术美术学习路线
- 2018年Linux发行版颜值排行榜发布啦!
- 21年GitHub上最牛批的《Java工程师成神之路》最新版文档!限时开源
- 【考研数学】五. 二重积分
- 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力!希望大家多补充或回答!
- 数据库批量插入和存在的问题
热门文章
- java将一个大文件拆分成几个小文件输出
- 物料搬运单审批工作流流程
- yacc语法分析minipascal_高分急求类pascal编译器的源代码(用lex和yacc做的,能够运行成功的 )...
- 一维稳态对流扩散问题,无源项,QUICK格式的python程序
- matlab做三次拉格朗日插值多项式_从零开始的matlab学习笔记——(24)曲线拟合...
- AVID Pro Tools 12 HD v12.5.0 PC 中文版音频后期制作软件
- 【linux】循序渐进学运维-cp
- Python爬虫笔记——Pycharm的官网下载与安装教程
- 玩游戏不如学js之数据类型和类型转换
- 基于Matlab的火灾图像预处理