本人就职于国际知名终端厂商,负责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

大致流程

Created with Raphaël 2.2.0开始确定需要访问的文件位置位于Application?选择EFDIR并解析其response data读取EFDIR record获取Application信息激活Application选择文件读取/更新文件结束yesno

具体演示

我们以读取USIM的IMSI文件为例进行演示

  1. IMSI文件位于USIM Application中,我们需要先选择EFDIR

  1. 解析SELECT命令返回值,获取EFDIR的record信息(record长度)

  2. 遍历EFDIR的record,获取USIM Application AID

  3. 选择USIM Application

  4. 选择EFIMSI文件名读取IMSI


返回系列目录

UICC 之 USIM 详解全系列——Commands与Responses结构相关推荐

  1. UICC 之 USIM 详解全系列——UICC协议层结构

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC协议层结构 ...

  2. UICC 之 USIM 详解全系列——UICC基础知识介绍

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC(TS102 ...

  3. UICC 之 USIM 详解全系列——背景与系列介绍

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--背景与系列介绍 文章 ...

  4. UICC 之 USIM 详解全系列

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 一.项目背景介绍与系列介绍 1.1 项目背景 1.2 US ...

  5. UICC 之 USIM 详解全系列——UICC中的Apps与Files结构

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 UICC中的Apps与Files结构 一.UIC ...

  6. UICC 之 USIM 详解全系列——USIM Demo详解

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 USIM Demo详解 文件结构 核心code讲 ...

  7. UICC 之 USIM 详解全系列——USIM App关键流程介绍与命令详解

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 USIM App关键流程介绍与命令详解 USIM ...

  8. UICC 之 USIM 详解全系列——常用命令详解与实例说明

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 常用命令详解与实例说明 SELECT命令 REA ...

  9. UICC 之 USIM 详解全系列——USIM App文件结构

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 文章目录 USIM App文件结构 USIM中的文件 US ...

最新文章

  1. 面试:HashMap 夺命二十一问!鸡哥都扛不住~
  2. 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( 线性卷积计算方法列举 | 线性卷积计算案例一 | 根据 线性卷积 定义直接计算 卷积 )
  3. GIt版本回退还不会用?轻松学会不怕失误
  4. OpenGL text rendering文字渲染的实例
  5. mysql文本自动递增_mysql-如何创建自动递增的字符串?
  6. php基础是什么,php基础学什么?
  7. php爱奇艺筛选标签,三种排序 快速筛选好视频_软件资讯技巧应用-中关村在线
  8. python加密敏感信息_仅需10行代码,使用python加密用户敏感数据
  9. 关于Google Guava的几个问题
  10. eve星战前夜登录提示服务器维护中,EVE星战前夜进不去怎么办 游戏进不去问题解决方法...
  11. 2020-09-14 编译Qt的MySQL 5.7插件: qsqlmysql.dll
  12. php--PDO操作数据库
  13. python中的元组字符串整数浮点数都是不可变的数据类型,Python不可变数据类型总结...
  14. 群晖3617可以有几个网卡_【群晖系统】黑群晖洗白13问~经典QA
  15. TA技术美术学习路线
  16. 2018年Linux发行版颜值排行榜发布啦!
  17. 21年GitHub上最牛批的《Java工程师成神之路》最新版文档!限时开源
  18. 【考研数学】五. 二重积分
  19. 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力!希望大家多补充或回答!
  20. 数据库批量插入和存在的问题

热门文章

  1. java将一个大文件拆分成几个小文件输出
  2. 物料搬运单审批工作流流程
  3. yacc语法分析minipascal_高分急求类pascal编译器的源代码(用lex和yacc做的,能够运行成功的 )...
  4. 一维稳态对流扩散问题,无源项,QUICK格式的python程序
  5. matlab做三次拉格朗日插值多项式_从零开始的matlab学习笔记——(24)曲线拟合...
  6. AVID Pro Tools 12 HD v12.5.0 PC 中文版音频后期制作软件
  7. 【linux】循序渐进学运维-cp
  8. Python爬虫笔记——Pycharm的官网下载与安装教程
  9. 玩游戏不如学js之数据类型和类型转换
  10. 基于Matlab的火灾图像预处理