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给终端,终端应用层收到结束状态

CASE4:CLA  INS  P1  P2  Lc  Data  Le  

case4命令数据的传输原理:

实例说明:以选择文件并要求返回FCP,00A40004027F10为例(命令部分详解)

1、终端传输层将指令映射为:00 A4 00 04 02发送给UICC    

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

3、终端传输层发送7F10给UICC    

4、UICC data层收到选择文件7F10并将该文件FCP的长度1d发送字节61 1d给终端    

5、终端收到字节发送GET指令00 C0 00 00 1d表示需要UICC返回长度为1d的数据    

6、UICC data层发送FCP和结束状态9000给终端    终端应用层收到FCP和结束状态

六、文件结构

文件的基本类型

MF——主文件

DF——专用文件:可以用来对文件进行分类

ADF——应用文件:包含一个APP的全部DFs和EFs

EF——基本文件:记录数据

3种EF文件类型(3种记录数据的方式)      

透明EF文件(Transparent EF ):一条单一的连续数据(又称二进制文件)      

线性定长EF文件(Linear fixed EF):将数据记录在相同长度的记录号里,第一条记录号为01(又称记录文件)      

循环EF文件(Cyclic EF):记录号按时间分布,第一条01是最新,最后一条n为最旧的数据。更新数据时,更新的数据设为记录01,最旧的数据n将被删除。

文件的选择逻辑

通过FID选择文件

可选:       

当前目录的直接子文件;        

当前DF父文件的直接子文件的任何DF;        

当前目录的父文件;        

当前DF;        

当前活动应用程序的ADF;        

MF

       

通过路径选择文件

SELECT指令中        

当p1=08时,通过以MF为起始点的路径选择文件        

当p1=09时,通过以当前DF为起点点的路径选择文件

通过SFI

使用文件的SFI可以选择到想要选择的EF文件,而不用发送选择指令

SFI由文件FCP中的’88‘头的TLV表示              

当一个文件的FCP返回值中有8800,表示该文件不支持SFI,FCP中没有88则表示该文件的SFI为该文件的FID的b5-b1。)      

例如:88 01 30 该文件的SFI为 30 即 0011 0000 ,该文件的SFI就是(B8-B4)00110

可以使用SFI的指令有 :

READ BINARY;                                  

UPDATE BINARY;                                  

READ RECORD;                                  

UPDATE RECORD;                                  

INCREASE;                                  

SEARCH RECORD;                                  

RETRIEVE DATA;                                  

SET DAT

七、安全内容

安全架构

我们在使用某些命令与UICC交互时, 需要满足特定的安全要求才可以访问 如果不满足或者UICC也无法确定是否满足安全条件,命令将执行失败UICC将返回错误码’6982’ (Security status not satisfied) 这些安全要求记录在安全属性之中

安全属性

安全属性:一个访问规则集合

访问规则:由一个访问模式和一个或多个安全条件组成

访问模式(AM):指示安全条件将应用到那些操作当中

安全条件(SC):对一些具体的操作,所定义的具体安全要求

访问规则

访问规则是为了对文件执行操作 而必须满足的一组要求, 为AM-byte/AM_DO 中指示的每个命 令/命令组定义了访问文件的 安全条件SC-byte/SC_DO

访问规则附加到 ADF/DF/EF,它们是 FCP 的一部分。 在 FCP 中使用标签“8B”、标签“8C”或标签“AB”来表示, 这取决于所使用的存储格式

EFARR

可以通过引用使 UICC 中的文件 共享访问规则,这是通过将访问规则 以扩展格式存储在线性固定文件 中来实现,这个文件就是EFARR ( Access Rule Reference)

EFARR中一个访问规则由一个AM_DO和一系列sc_do组成。AM_DO的内容是 由它所指示的标签定义,紧随AM_DO之后的sc_do序列与AM_DO中指定的 所有命令相关,不同的sc_do可以形成OR或AND条件(通过实例讲解)

EFARR的结构:

举例说明EFARR文件的作用:

00 A4 00 04 02 2F06(选择2F06文件)

返回FCP(具体含义下面会讲到):621A 82054221002C05 83022F06 8A0105 8B032F0602 800200DC 880130        

8B 03 2F06 02:8B:访问规则引用。可知安全信息被放在2F06(EF_ARR)的02条记录里        结构为 

00 B2 02 04 2C(读取第02条记录)

得到: 800101 9000 80011A A40683010A950108        

AM_DO(80 01 01):80访问模式,01长度,01(00000001)对照下表:

可以有指令:READ BINARY, READ RECORD (S), SEARCH  BINARY, SEARCH RECORD 需要权限SC_DO(9000)

800101 9000 80011A A40683010A950108   SC_DO(9000)对照下表:

 可知always 所以:对于指令:READ BINARY, READ RECORD (S), SEARCH  BINARY, SEARCH RECORD不需要验证    

80 01 1A(00011010):权限UPDATE BINARY, UPDATE RECORD, ERASE BINARY, ERASE RECORD (S)

需要验证A40683010A950108即ADM1

PIN

PIN(Personal identification number 个人身份识别码) PIN主要用于验证、更改、禁用/启用 验证和解锁命令等场景中

PIN的几种类型

Universal PIN 用在multi-application environment中,实现多个Application共享一个PIN, 它并不属于任何Application,single verification capable UICC中不会使用这种PIN

Application PIN 一个Application PIN对应一个application Security Environment, 在这个application SE中的ADF/DFs都可以被Application PIN访问

Local PIN 存在于某个ADF/DF中的PIN,可以通过文件的FCP获取

PIN和密钥的引用关系

单个可验证的 UICC应使用密钥参考“01”作为 PIN1密钥参考“81”作为 PIN2

具有多重验证能力的 UICC 应使用“01”至“08” 范围内的密钥引用作为 PIN1, 并可使用“81”至“88”范围内的密钥引用作为 PIN2

八、命令

选择命令--select command

select file命令用于选择一个文件 并将这个文件设置为当前文件, 可对选中的文件进行后续的操作

命令结构

select command——P1

用什么方法选择文件?(p1参数的作用)

当p1=00时,代表通过文件的FID选择MF、DF或EF

当p1=01时,代表通过DF的FID选择当前DF的子DF

当p1=03时,代表通过DF的FID选择当前DF的父DF

当p1=04时,代表通过DF的AID选择

当p1=08时,代表通过以MF为起始点的路径选择文件(绝对路径)

当p1=09时,代表通过以当前DF为起点点的路径选择文件(相对路径)

实例说明:

p1=00,选择7F10 00 A4 00 0C 02 7F10

p1=01,当前文件为7f10(可选择的文件只有5F50) 00 A4 01 04 02 5F50

如果为:00 A4 01 0C 02 6F3A  00 A4 01 04 02 7F20 则会返回状态码 6A82(找不到文件)

p1=03,当前文件为5F50(可选择的文件只有7F10) 选择其他文件会报6A82        

p1=04,根据文件的AID选择ADF 00 A4 04 0C 08 XXXXXXXXXXXXXXXX

p1=08,当前文件为3F00,选择6F3A 00 A4 08 0C 04 7F10 6F3A

注:当P1=08&current file=3f00,选择file的路径3f00默认存在,不需要写(否则报错6a82)

p1=09,当前文件为7F10,只能选择5F50和6F3A

如当前文件是3F00,要选择6F3A文件,用p1=00的方式需要两条命令,先选7F10再选6F3A,如果用p1=08或09的方式只需要一条命令

select command——P2

p2主要用于控制文件是否需要返回FCP和当p1=04时对选择文件的进一步补充

当p1不等于04时,p2的b1和b2位没有意义都为0

故: p2=04,表示需要返回文件的FCP

p2=0C,表示不需要返回文件的FCP

当p1=04时,p2的b1和b2位有四种情况

b1b2为00,表示第一次或仅出现一次

b1b2为01,表示最后出现

b1b2为10,表示下一次出现

b1b2为03,前一次出现

select command——response(FCP)

上文讲到,当p2=04,表示需要返回文件的FCP,那么何为FCP?FCP的作用是什么?

FCP,即文件控制参数模版,包含这个文件的一些基本信息,FCP的内容取决于所选的文件 MF,DF,ADF和EF的FCP略有不同。

MF,DF,ADF独有:tag84,tagC6

EF独有:tag80,tag88

下图为FCP中各个tag所代表的具体含义

UICC中的数据格式基本都为TLV格式,即TLV (tag, length, value) ,FCP也是TLV格式。

举两个例子说明一下:

00a4040410A0000000871002FF86FFFF89FFFFFFFF(选择ADF)

FCP:622D82027821 83027FF0 8410A0000000871002FF86FFFF89FFFFFFFF 8A0105 8B032F0605 C6099001C0830101830181

82(tag) 文件描述标识符 --02长度(length) --78(value) 文件描述符字节,21(value) 数据编码字节。文件描述符指定了文件的可访问性,以及文件的类型和结构。78换为8位bit  0111 1000 对应表中可知 此文件是一个可共享的 DF或ADF           

83 文件标识符 02长度 7FF0 文件id          

84 文件AID 10长度(十六进制) A0000000871002FF86FFFF89FFFFFFFF AID (DF独有)

8A 生命周期状态数 01长度 05 激活状态          

8B 安全属性 03长度 2F06 EFARR文件id 05 记录号          

C6 PIN 状态模板 09 长度  90 PS_DO模板标签  01 长度 C0 PS_DO       

83关键参考标签  01长度  01关键参考值

00 A4 00 04 02 2F06(EF)

FCP:621A 82054221002C05 83022F06 8A0105 8B032F0602 800200DC 880130

621A:长度为1A的FCP    

82054221002C05:线性固定结构的保留文件,记录长度为002C,记录数量为05    

83022F06:该文件的FID为2F06    

8A0105:运行已激活    

8B032F0602:安全属性访问规则应用在FID为2F06下记录数为02    

800200DC:80文件大小,文件中已分配的数据字节数为00DC(对于透明的EF,文件大小是EF的主体部分的长度,而对于线性固定或循环的EF,它是记录长度乘以EF的记录数量。)即2C是一条记录数据的长度    DC是文件中数据的长度 故 DC➗2C=5    得知2F06中共有五条记录    

880130: 该文件的SFI为30即00110000,SFI就是(B8-B4)00110

读透明文件(二进制文件)--Read Binary command

用于从当前二进制 EF中读取一串字节。仅当满足该EF的读取访问条件时,才能执行此命令,若操作失败,记录指针不改变。

命令结构

Read Binary command-P1P2

当P1的b8为=0时,b7-b1位表示要读取的数据偏移量的高位 P2表示要读取的数据偏移量的地位

当P1的b8为=1时,b7b6置0,b1-b5位表示文件的SFi P2表示要读取的数据的偏移量

若P1的b8-b7为 0000 0001     P2为 0000 0001

则00 B0 0101 00  表示从数据的第101字节往后读取

若文件的SFI为10  P1的b8为1 b7-b1为 0000101  P2为00000001

则 00 B0 45 01 00  表示从数据的第1字节往后读取

返回值即为所要读取的数据

注:使用SFI可以不做选择操作(不经常使用)

更新透明文件(二进制文件)--Update Binary command

用于更新二进制文件,仅当满足 该 EF 的更新访问条件时,才能更新。更新命令可以被认为是用命令中给出的字符串替换已经存在的字符串。

命令结构

由上图命令结构可以看出,更新二进制文件命令的P1&P2和读取二进制文件命令一致,故不做赘述,更新二进制文件命令的Lc也可以称为P3是控制要更新的数据的长度,Data即为要更新的数据

实例说明

00 D6 00 01 02 01 01      

P1=00、P2=01:表示从第一个字节往后更新      

Lc=02:要更新的数据长度为2个字节      

DATA=0101:更新的数据为0101

即将当前文件的第二个字节和第三个字节更新为 01 01

读取记录文件命令--Read Record command

读取当前线性固定或循环 EF 中的 一个完整记录,仅当满足该EF的读取访问条件,才能执行此命令。若操作失败,记录指针不改变。

命令结构

Read Record command-P1P2

P1为要读取的记录的记录号

P2为02,表示读取下一条记录

P2为03,表示读取上一条记录

P2位04,表示读取当前/绝对记录

当P2为02或03时,P1应为00

如: 00 B2 01 04 00  读取当前的第一条记录

00 B2 00 02 00  读取当前的下一条记录

P2的b8-b5位还可以表示文件的SFI

四种记录模式

CURRENT模式:读当前的记录,记录指针不变

ABSOLUTE模式:读给定记录号的记录,记录指针不变

NEXT模式:功能执行前记录指针加一,然后读取指针指向的记录

PREVIOUS模式:功能执行前记录指针减一,然后读取指针指向的记录

实例说明:

00 B2 01 04 00  CURRENT/ABSOLUTE模式:P1=记录号  P2=04

00 B2 00 02 00  NEXT模式:P1=00  P2=02 当线性EF文件指针为最后一个记录时,NEXT报错6a83  当循环EF文件指针为第n号记录时,NEXT为第01号记录

00 B2 00 03 00  PREVIOUS模式:P1=00  P2=03 当线性EF文件指针为01记录时,PREVIOUS报错6a83 循环EF文件指针为第01号记录时,PREVIOUS为第n号记录

更新记录文件命令--Update Record command

此命令更新当前线性固定或循环EF中的一个特定的完整记录,仅当满足该EF的更新访问条件时才能执行此命令。更新可以被认为是用命令中给出的记录数据替换EF的相关记录数据

命令结构

由上图命令结构可以看出,更新记录文件命令的P1&P2和读取记录文件命令一致,故不做赘述,更新记录文件命令的Lc也可以称为P3是控制要更新的数据的长度,Data即为要更新的数据。

四种更新模式:

00 DC 01 04 Lc data  CURRENT/ABSOLUTE模式:P1=记录号  P2=04

00 DC 00 02 Lc data  NEXT模式:P1=00  P2=02

00 DC 00 03 Lc data  PREVIOUS模式:P1=00  P2=03          

注:循环EF文件更新只能使用 PREVIOUS模式:更新的数据为01号,最老的记录n被更新,n-1号记录成n号记录。

验证PIN--VERIFY PIN command

该命令启动从终端发送的 PIN与 卡中存储的 PIN 比较验证,无论在哪个逻辑信道上执行验证,作为验证结果安全状态都是有效的。验证之前需要保证PIN是未禁用状态或者PIN未被阻止。

注:如果PIN是出于禁用状态或者PIN被阻止,发送VERIFY PIN command报错6984

命令结构

P1为00,P2为需要验证的PIN的值

如:

验证01PIN         00 20 00 01 08 31323334FFFFFFFF

验证ADM1         00 20 00 0A 08 3030303030303030

禁用PIN--DISABLE PIN command

禁用PIN命令用于关闭PIN的验证 当命令所需要验证的安全条件的PIN 被关闭时,此命令执行将不需要验证。

命令结构

P1为00,P2为需要关闭的PIN的值

如: 002600010831323334FFFFFFFF 关闭01PIN

几个非常用指令

SEARCH RECORD命令

INS=A2 CLA  A2  P1  P2  Lc  Data  

指令作用:在当前的文件中查找给定的记录

适用文件:线性EF或循环EF

使用条件:要满足该EF的读取访问条件

指令构成:P1:记录号,从第几号开始(“00”表示:当前记录)                  

P2:搜索方式                  

Lc:要搜索数据的长度                  

data:要查找的具体数据

搜索方式:P2=04从P1向后简单搜索,P2=05从P1向前简单搜索

举例:查找数据“010203” 是7F20文件下6F39循环EF的第几号记录          

00A40804047F206f39(选择文件)          

002000010831323334FFFFFFFF(READ访问条件要验证PIN1 01)          

00 A2 01 04 03 010203

P1、P2=01 04表示从第01号记录开始向后,搜索数据010203,长度为03        

返回01:该数据保存在01号记录里

INCREASE指令

INS=32 CLA  32  P1  00  Lc  data  Le

指令作用:终端给出的值加到当前循环EF的更新的记录的值中

适用文件:循环EF

使用条件:要满足该EF的增加访问条件

指令构成:

CLA:8X/CX/EX                  

P1:00或SFI                  

P2:00                  

Lc:数据长度                  

data:要加的值                  

Le:响应数据长度

举例说明:

80 32 00 00 03 030303(加030303)

80 32 00 00 03 121314(加121314)

UNBLOCK PIN命令

INS=2C  CLA  2C  P1  P2  Lc  Data

指令作用:用来解锁被锁住的PIN

指令构成:

P1:00                  

P2:PIN的值                  

Lc:空或10(16进制表示16个字节)                  

data:PUK,PIN

PIN的验证只有三次机会,验证错误会有63Cx(x表示剩余的机会),三次机会全用完PIN会锁住需要解锁才能使用验证PIN

举例:

00 2C 00 01 10 3131313131313131 31323334FFFFFFFF

DEACTIVATE FILE命令

指令作用:启动一个EF的可逆失活

适用文件:EF文件

使用条件:满足EF的停用文件访问条件

指令构成:

P1:为00 通过FID选择文件  为08以MF为起点通过路径选择文件  为09以当前文件为起点路径选择文件          

P2=00          

LC:data长度          

Data:根据P1决定

举例:

禁用文件6F39

00 04 08 00 04 7F20 6F39

通过路径7F20下的6F39选择文件并禁用

也可以 00 04 00 00 (P1=P2=00且data为空表示当前文件) 禁

用文件后再次选择该文件会报错6283

ACTIVATE FILE 命令

INS=44  CLA  44  P1  P2  Lc  DATA

指令作用:重新激活一个停用的EF

适用文件:EF文件

使用条件:满足EF的激活文件访问条件

指令构成:

P1:为00 通过FID选择文件 08以MF为起点通过路径选择文件 为09以当前文件为起点路径选择文件          

P2=00          

LC:data长度          

Data:根据P1决定

举例:

激活文件6F39

00 44 08 00 04 7F20 6F39

通过路径7F20下的6F39选择文件并激活

也可以 00 44 00 00 (P1=P2=00且data为空表示当前文件)

九、命令讲解

读取7f10下6f54的数据并更改

1.选择到6f54,读6f54,正常读取或报错6982(不满足安全条件

2.如果不满足安全条件,则需要验证安全信息,满足安全条件后再读取数据,如何选择到6f54?

如设置P1=00(by file id),则需要两条选择命令,先选择7f10 再选择6f54

注:选择文件只能选择当前文件的子文件,不能越级选择(6a82,找不到文件)

如设置P1=08(by path from MF),则只需要一条选择命令,按照路径顺序直接选择到6f54

select command:

p1=00

00 a4 00 0c 02 7f01 00 a4 00 04 02 6f54

p1=08

00 a4 08 04 04 7f10 6f54

p2=0c(不需要返回FCP) p2=04(需要返回FCP) 

6f54的FCP: 62 16 82 02 41 21 83 02 6F54 8A 01 05 8B 03 6F06 05 80 02 01 07 88 00

6f54的FCP解析: 62168202412183026F548A01058B036F0605800201078800

62 FCP标识 16 FCP长度

82 文件描述符标识 02 文件描述长度 41(01000001)可共享二进制文件 21数据编码字节

83 文件标识符 02长度 6F54 文件id

8A 生命周期状态数 01长度 05 激活状态

8B 安全属性 03长度 6F06 EFarr文件id 05 记录号

80 文件大小 02 长度 0017 文件中分配的字节数

88 段文件标识符 00 (未设置)

获取安全信息:8B 03 6F06 05 6f54的安全信息记录在6F06的05数据中

读取6F06的05数据,需要先选后读

command: 00 a4 00 0c 02 6f06

00 b2 05 04 00

response data: 80 01 1B A4 06 83 01 0A 95 01 08 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

response data解析: 80 01 1B(AM_DO)           A4 06 83 01 0A 95 01 08(SC_DO)

80 访问模式字节 01 长度 1B(00011011) A D W R 有效\无效\写\读

80 01 1B(AM_DO)

A4 06 83 01 0A 95 01 08(SC_DO) A4 控制引用模板 06 长度 )

0A 代表需要验证的ADM1

95用法限定符标识 01长度 08 值 由此得到欲读6f54,要先验证0A

VERIFY PIN command: AMD1=30 30 30 30 30 30 30 30 (制卡者应有实际值)

00 20 00 00 0A 08 30 30 30 30 30 30 30 30

验证成功后再次选择6f54后可成功读取

00 a4 00 0c 02 6f54

00 b0 00 00 00     

AD:8509804E2D56FD5E7F7535     FFFFFFFFFFFFFFFFFFFFFFFF

更新6f54数据(将FF的第一个字节改为10)

00 d6 00 00 17 8509804E2D56FD5E7F753510 FFFFFFFFFFFFFFFFFFFFFF

再次读取可验证数据已被修改

00 b0 00 00 00

本次所有命令按步骤梳理:

00 a4 08 04 04 7f10 6f54    选择6f54

00 a4 00 0c 02 6f06     根据6f54安全信息存储位置的选择6f06

00 b2 05 04 00  读取6f06的第5号记录   6f54的安全信息就记录在其中

00 20 00 0A 08 30 30 30 30 30 30 30 30  得到需要验证的ADM 验证是否通过

00 a4 00 0c 02 6f54   验证成功后再次选择并读取

00 b0 00 00 00

00 d6 00 00 17 8509804E2D56FD5E7F753510 FFFFFFFFFFFFFFFFFFFFFF  在验证读取时同时同时满足了更新的安全条件故可以直接更新,若不满足更新的安全条件,还需要重新验证

00 b0 00 00 00  再次读取  与原值对比

 

 

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王桶桶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值