SIM卡APDU指令
一个APDU可以是一个命令,也可以是命令的响应。
命令APDU的一般格式: CLA INS P1 P2 P3 Data
响应APDU的一般格式: Data SW1 SW2
各个字节的意义如下: CLA: 是指令类型,GSM应用为0xA0。
INS:每个命令的指令编码,下面有定义。
P1,P2,P3:指令参数。0xFF是个无效值,P3给出了数据单元的长度。对于传送命令,当SIM 流出数据时,P3=0表示数据的长度为256,而SIM 流入数据时P3=0表 示没有数据。
SW1,SW2:命令结果是否成功的状态。
指令的5种情况
情况1:没有输入/没有输出 CLA INS P1 P2 P3(lgth=0x00) SW1=0x90 SW2=0x00
情况2:没有输入/输出长度已知 CLA INS P1 P2 P3(长度值lgth) DATA(长度为lgth) SW1=0x90 SW2=0x00
情况3:没有输入/输出长度未知 CLA INS P1 P2 P3(lgth=0) SW1=0x9F SW2=lgth1 GET RESPONSE CLA INS P1 P2 P3(lgth2) DATA(长度leth1<=leth2) SW1=0x90 SW2=0x00
情况4:有输入/没有输出 CLA INS P1 P2 P3(lgth) DATA(长度为lgth) SW1=0x90 SW2=0
情况5:有输入/输出长度未知或已知 CLA INS P1 P2 P3(lgth) DATA(长度为lgth) SW1=0x9F SW2=lgth1 GET RESPONSE CLA INS P1 P2 P3(lgth2) DATA(长度lgth2<=lgth1) SW1=0x90 SW2=0x00
11.11中命令集如下:
(1) SELECT 选择一个文件的方法:
ATR(复位)之后,MF将取消被选择,并且成为当前的目录。每个文件必须通过SELECT功能通过下面的规则来选择。 这时,你可以选择MF,也可以选择MF目录下的DF和MF目录下EF,若想要选择某一DF中的EF,必须先选择该DF成为当前目录,再选择DF中的EF。
例:
//SELECT A0 A4 00 00 02 3F00 9F 17//SELECT A0 A4 00 00 02 7F10 9F 17//SELECT A0 A4 00 00 02 6F3A 9F 0F
CLA=A0:表示GSM应用 INS=A4:表示SELECT P1P2=0000:表示参数 P3=02:表示输入文件ID的长度 3F00,7F10,6F3A表示选择的文件ID SW1=9F SW2=17(23)/0F(15)表示命令正确结束,其中SW2表示响应值长度
(2) STATUS
此功能返回与当前文件目录(根目录或应用目录)有关的信息,此操作不会改变当前EF内容; 这条命令可在任何时候使用,以获得与GSM应用有关的信息; 输入:无; 输出:文件标识符,总的可用存储空间,CHV激活/屏蔽,CHV状态和其他的GSM详细数据
例:
//SELECTA0 A4 00 00 02 7F109F 22//STAUTSA0 F2 00 00 2290 0000005DD07F1002000000000015B10114060085838583000083830000000000000000
CLA=A0:表示GSM应用 INS=F2:表示STATUS P1P2=0000:表示参数 P3=22:表示返回响应值长度(从SELECT的返回值中获取) SW1=90 SW2=00 表示命令正确结束 00005DD07F1002000000000015B10114060085838583000083830000000000000000表示返回的响应值(响应的参数/数据同使用SELECT命令选中MF和DF时的响应数据相同。)
(3) GET RESPONSE
此功能返回与当前文件目录(根目录或应用目录)有关的信息 这条命令可在任何时候使用,以获得与GSM应用有关的信息; 输入:无; 输出:文件标识符,总的可用存储空间,CHV激活/屏蔽,CHV状态和其他的GSM详细数据 STATUS与GET RESPONSE:区别在于STATUS命令不适用与EF,其中P3所需要的len为select响应的参数SW2//SELECTA0 A4 00 00 02 3F009F 17//SELECTA0 A4 00 00 02 7F10 9F 17//SELECTA0 A4 00 00 02 6F3A9F0F//GET RESPONSEA0 C0 00 00 0F0000 0AF0 6F3A 04 00 11 FF 44 01 02 01 1C90000000 0AF0 6F3A 04 00 11 FF 44 01 02 01 1C//--00 00 保留//--0A F0 占用的空间大小,表示7000字节//--6F 3A 选中File的ID//--04 文件类型,见11.11 9.3//----'00':保留 '01':MF '02':DF '04':EF//----此文件类型 EF//--00 见11.11 9.2.1 detail 3//----对于二进制和记录文件,该字节为保留字节。对于循环文件,除b6(0 based)外所有的bit都是保留的,b6=1表示当前所选择的循环文件可以执行INCREASE命令//--11 FF 44 访问权限//--01 文件状态,见11.11 9.3//----+--+--+--+--+--+--+--+--+//----|b7|b6|b5|b4|b3|b2|b1|b0|//----+--+--+--+--+--+--+--+--+//---- | | | | | | | +-b0=0文件无效, b0=1文件有效//---- | | | | | | +----RFU//---- | | | | | | b2=0: 当文件无效时不允许读和写//---- | | | | | +-------b2=1: 当文件无效时允许读和写//---- +--+--+--+--+----------RFU//----本字节表示文件有效,当文件无效时不允许读/写//--02 后面数据的长度,表示2//----01 文件结构,见11.11 9.3//------'00':二进制文件(透明文件) '01':记录文件(线性定长) '03':循环文件//------此文件结构记录文件//----1C 记录长度,见11.11 9.2.1 detail 4
(4)READ BINARY
此功能允许SIM卡从当前透明文件中读取字节串; 如果不满足EF文件READ指令的访问准予条件,SIM卡拒绝该功能; 输入:字节串的偏移地址和长度; 输出:字节串;
//SELECT A0 A4 00 00 02 2F05 9F 0F
//GET RESPONSE A0 C0 00 00 0F 0000 0008 2F05 04 00 01FF55 01 02 0000 90 00
//READ BINARY A0 B0 00 00 08 6573656E66727074 90 00
//READ BINARY A0 B0 00 01 04 73656E66 90 00
CLA=A0:表示GSM应用 INS=B0:表示READ BINARY P1P2=0000:表示高低位偏移 P3=08:表示返回响应值长度(从SELECT的返回值中获取) (当P1P2=0001,P3=04时表示向右偏移1位,返回长度为4的响应值) SW1=90 SW2=00 表示命令正确结束
(5)UPDATE BINARY
此功能用于更新当前透明文件的字节串; 如果不满足EF文件UPDATE指令的访问准予条件,SIM卡拒绝该功能; 输入:字节串的偏移地址和长度; 输出:无;
//SELECT A0 A4 00 00 02 2F05 9F 0F
//GET RESPONSE A0 C0 00 00 0F 0000 0008 2F05 04 00 01FF55 01 02 0000 90 00
//READ BINARY A0 B0 00 00 08 6573656E66727074 90 00
//UPDATE BINARY A0 D6 00 00 08 0000000000000001 90 00
//READ BINARY A0 B0 00 00 08 0000000000000001 90 00 更新成功!
(6)READ RECORD 此功能用于读取线性固定文件或循环文件的记录; 如果不满足EF文件READ指令的访问准予条件,SIM卡拒绝该功能。若操作失败,记录指针不改变; 读指令定义了4种模式: CURRENT模式(04):读当前的记录,记录指针不变; ABSOLUTE模式(04+记录号):读给定记录号的记录,记录指针不变; NEXT模式(02):功能执行前记录指针加一,然后读取指针指向的记录。 PREVIOUS模式(03):功能执行前记录指针减一,然后读取指针指向的记录。 输入:模式、记录号(ABSOLUTE模式)、记录长度; 输出:记录;
//SELECT A0A4000002 3F00 9F17
//SELECT A0A4000002 7F10 9F17
//SELECT A0A4000002 6F3A 9F0F
//GET RESPONSE A0C000000F 00000AF06F3A040011FF440102011C 9000
//READ RECORD A0B201041C 80aabbccddFFFFFFFFFFFFFFFFFF07812143658709F1FFFFFFFFFFFF 9000
(7)UPDATE RECORD
向线性定长记录的EF文件或循环记录EF文件中写入一条完整的记录; 如果不满足EF文件UPDATE指令的访问准予条件,SIM卡拒绝该功能。若操作失败,记录指针不改变;
//SELECT A0A4000002 3F00 9F17
//SELECT A0A4000002 7F10 9F17
//SELECT A0A4000002 6F3A 9F0F
//GET RESPONSE A0C000000F 00000AF06F3A040011FF440102011E 9000
//UPDATE RECORD A0DC01041E
输入数据: 111110000000000000000000000000000000000000000000000000000000
90 00
APDU= ApplicationProtocol data unit, 是智能卡与智能卡读卡器之间传送的信息单元, (给智能卡发送的命令)指令(ISO 7816-4规范有定义) CLA INS P1 P2 Lc Data Le
其中CLA为指令类别;INS为指令码;P1、P2为参数;Lc为Data的长度;Le为希望响应时回答的数据字节数,0表最大可能长度。
00A4040000:发送一个空的选择命令,获取卡和主安全域的信息。00A40400是select选择对应的CLA,INS,P1和P2,后面2位是发送的文件名的长度。此命令使用文件名或应用标示符来选择IC卡内DF(专用文件)或EF(基本文件)。
80此命令创建卡片文件系统,80CA9F7F00:获取CPLC信息。8050XXXXX: 双向认证并建立会话密钥。
非接触CPU卡应该支持以下与应用无关的常用指令命令:
编号 | 指令 | 指令类别 | 指令码 | 功能描述 |
APPLICATION UNBLOCK | 84 | 18 | 应用解锁 | |
APPLICATION BLOCK | 84 | 1E | 应用锁定 | |
CARD BLOCK | 84 | 16 | 卡片锁定 | |
EXTERNAL AUTHENTICATE | 00 | 82 | 外部认证 | |
GET CHALLENGE | 00 | 84 | 取随机数 | |
INTERNAL AUTHENTICATE | 00 | 88 | 内部认证 | |
PIN UNBLOCK | 84 | 24 | 个人密码解锁 | |
READ BINARY | 00 | B0 | 读二进制文件内容 | |
READ RECORD | 00 | B2 | 读记录文件指定内容 | |
SELECT | 00 | A4 | 选择文件 | |
UPDATE BINARY | 00/04 | D6 | 写二进制文件 | |
UPDATE RECORD | 00/04 | DC | 写记录文件 | |
VERIFY | 00 | 20 | 验证口令 |
编号 | 指令 | 指令类别 | 指令码 | 功能描述 |
CHANGE/PIN RELOAD | 80 | 5E | 重装/修改个人密码 | |
CREDIT FOR LOAD | 80 | 52 | 圈存 | |
DEBIT FOR PURCHASE/ CASE WITHDRAW/UNLOAD | 80 | 54 | 消费/取现/圈提 | |
GET BALANCE | 80 | 5C | 读余额 | |
GET TRANSCATION PROVE | 80 | 5A | 取交易认证 | |
INITIALIZE FOR XXX | 80 | 50 | 初始化XXX交易 | |
UNBLOCK | 80 | 2C | 解锁被锁住的口令 | |
UPDATE OVERDRAW LIMIT | 80 | 58 | 修改透支限额 |
-
NFC等不等于RFID?NFC的分类有哪些?[2020-04-20]
-
小『标签』,大作用!智能健康标签和包装如何成为抗疫利器[2020-06-11]
-
NFC在印刷传感器系统中的应用[2020-05-03]
-
一个RFID标签,可以为时装产业带来哪些改变?[2020-06-10]
-
NFC和RFID的区别[2020-04-28]
-
盘点RFID在零售业的四大应用场景[2020-03-16]
-
采用BIM、RFID等技术 连云港加快新型建筑工业化发展[2020-09-17]
-
各大城市推进RFID智慧交通建设[2020-08-21]
-
国际化RFID常用协议标准[2020-05-19]
-
FM1208 非接触 CPU卡芯片技术手册 V0.2 2[2020-12-02]
-
智能卡与COS技术简析[2014-12-03]
-
物联网常见通信协议RFID、NFC、Bluetooth、ZigBee等梳理[2020-06-02]