UICC——ETSI TS 102 221规范应用详解一篇就够了

 写在前面

写本文章的目的是自己在初学UICC相关规范时,发现网上相关资料甚少,且很多只是对规范的翻译,对于初学者来着不易于理解。所以在自己学习完毕并进行了一定的运用之后,就想写这么一篇文章,可以清晰的使用一篇文章讲解102221规范。所以本文章旨在介绍102221规范在Smart Cards中的实际的应用,暂不涉及物理和逻辑特性部分,主要从第七章开始讲解分析,可以说是作者的学习总结,有讲的不对,不全面的地方,或者有疑问的同学欢迎一起讨论学习!

一、传输协议 

ETSI TS 102 221定义了用于在终端和UICC之间交换数据的异步半双工传输协议,定义了两种不同的协议,基于字符的协议T = 0和基于块的协议T = 1。T = 0和T = 1两种协议对终端都是必需的,而UICC应支持T = 0或T = 1或两种协议。

• T=0通讯协议是异步半双工字符传输协议;
• T=1通讯协议是异步半双工块传输协议;

它们两的区别在与protocol T=0是基于字符的协议,也就是Terminal与UICC之间的交互以字节为单位,protocol T=1是基于块的协议。

一般情况下,UICC支持T=0协议较多(大多数智能卡使用T=0协议),下面对规范的具体讲解也是基于T=0协议。


二、 协议层架构

协议采用了osi-参考模型的分层原则,分为四层,这些层包括:

1.物理层(the physical layer

定义了协议T = 0和T = 1都有效的物理器件和特性框架(不做介绍)

2.数据链路层(the data link layer)

定义了协议T = 0和T = 1的时序、特定选项和错误处理

3.传输层(the transport layer)

描述了关于如何在终端和UICC之间传输APDU以及apdu中四个数据案例的定义

4.应用层与CAT层(the Application layer)

应用层面向终端或UICC的应用程序,可使用命令完成所需功能是命令传输的第一步,CAT层可以理解为应用层的一部分,CAT层主要用于主动式命令中,具体不在这里介绍,感兴趣可以参考TS-102223规范

三、APDU基本结构

APDU由CLA、INS、P1、P2(必需)和P3(Lc、Data和Le的可选主体部分构成)构成

命令的基本结构:

CLA:命令类别

INS:命令代码

P1、P2:命令附加参数(由INS决定,如INS=A4使用select命令时:p1表示使用什么方式去选择文件,P2表示选择文件的具体细节。)

P3:由INS的编码而定,或是表示命令中送给SIM卡的数据长度,或表示等待从SIM卡响应的数据最大长度。      

 Le:UICC返回给终端的数据的长度    

data:随命令头发送的数据体  

 Lc:命令中后面跟着的data的长度

四、过程字节和状态字节

T=0传输协议:从终端发送五字节的命令头开始,指令在终端与UICC之间的传输规则,终端发送指令给UICC,UICC返回过程字节和状态字节给终端

过程字节

NULL=60:UICC处理数据的时间较长,返回一个空值让终端再等待  

ACK=INS:UICC让终端发送剩余的数据字节                        

ACK=INS的补数:终端仅发送下一个字节(UICC暂时没有足够临时缓存的空间 )                  61XX:UICC告诉终端数据长度,终端发送GET指令00C00000XX,UICC再发送长度为XX的数据给终端(例如:SELECT指令,需要UICC返回FCP时,UICC收到指令会告知终端FCP的长度,终端需要发送GET指令,UICC将FCP发送给终端)                  

6CXX:UICC告诉终端数据长度,终端需要重新发送指令CLA INS P1 P2 XX,UICC再发送长度为XX的数据给终端(例如:读的指令,当不知道记录数据的长度,将Le设为00,UICC会返回6Cxx告诉数据的长度,需要重新发送一遍正确长度的指令,可用于试错)

状态字节

用于告知终端命令在UICC的执行状态,状态字节SW1和SW2组成一个结束序列  

 SW1:6x或9x(除60、61、6C)   SW1 SW2=90 00 时表示该指令正常完成并结束

注:过程字节只在数据链路层,不会传输到应用层 状态字节会传输到终端的应用层 

一些常用的状态字节:

五、四种命令格式

CASE 1:CLA  INS  P1  P2   

最简单的应用层命令格式,APDU中不包含Lc、Data、Le

case1命令数据的传输原理:

在终端和UICC之间的传输:

CASE 2: CLA  INS  P1  P2  Le

case2命令数据的传输原理:

实例说明:以指令 00 B2 01 04 00 读01号记录为例(指令含义文章指令部分详解)

1、终端传输层映射为:00 B2 01 04 00发送给UICC  

 2、UICC数据层收到指令读取01号记录,将要读取的记录缓存,Le为00,与记录长度不一致,发送6Cxx(xx为正确记录长度)给终端,指示传输层发送正确长度的指令     

3、终端传输层收到状态6Cxx,需要重新发送带有正确长度的指令即 00 B2 01 04 xx 给UICC

4、UICC数据层收到指令,将xx长的数据返回UICC并返回9000结束状态      

5、终端应用层收到01号记录的数据和9000

CASE 3:CLA  INS  P1  P2  Lc  Data 

case3命令数据的传输原理:

实例说明:以更新指令 00 D6 00 00 03 010101为例(指令含义文章指令部分详解)

1、终端传输层将指令映射为:00 D6 00 00 03发送给UICC    

2、UICC data层收到指令,Lc=02确认临时缓存空间足够发送INS=D6给终端表示接收全部的data   3、终端传输层发送010101给UICC    

4、UICC 应用层收到指令将数据更新为010101  

5、UICC data层发送结束状态9000给终端,终端应用层收到结束状态

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王桶桶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值