APDU指令小记

前言:

为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。

在这里插入图片描述


1. 简述

APDU: Application Protocol data unit,,是智能卡与智能卡读卡器之间传送的信息单元, (向智能卡发送的命令)指令(ISO 7816-4规范有定义):CLA INS P1 P2 Lc Data Le。

CLA:指令类别;INS:指令码;P1、P2:参数;Lc:为Data的长度;Le:为希望响应时回答的数据字节数,0表最大可能长度。

在这里插入图片描述
必选部分:CLA, INS, P1, P2
可选部分:Lc, 数据段: Le
CLA 确定 APDU 的类别,INS 确定要执行的指令,P1 和 P2 是参数。

2. 指令解释

指令格式
命令APDUCLA INS P1 P2 Lc Data Le
响应APDUData SW1 SW2

命令 APDU 的四种组成格式:

在这里插入图片描述
解释:

Case1
命令中没有数据送到卡( Lc)中,也没有数据从卡中返回( Le)。
不含安全报文的命令: CLA | INS | P1 | P2
含安全报文的命令: CLA | INS | P1 | P2 | Lc | MAC

注: Lc = MAC 的长度, 4 字节。

Case2
命令中没有数据送到卡( Lc)中,有数据从卡中返回( Le)。
不含安全报文的命令: CLA | INS | P1 | P2 | Le
含安全报文的命令: CLA | INS | P1 | P2 | Lc | MAC | Le

注: Lc = MAC 的长度, 4 字节。

Case3
命令中有数据送到卡( Lc)中,没有数据从卡中返回( Le)。
不含安全报文的命令: CLA | INS | P1 | P2 | Lc | Data
含安全报文的命令: CLA | INS | P1 | P2 | Lc | Data+MAC

注: Lc = 数据的长度 + MAC 的长度( 4 字节)。

Case4
命令中既有数据送到卡( Lc)中,也有数据从卡中返回( Le)。
不含安全报文的命令: CLA | INS | P1 | P2 | Lc | Data | Le
含安全报文的命令: CLA | INS | P1 | P2 | Lc | Data+MAC | Le

注: Lc = 数据的长度 + MAC 的长度( 4 字节)。

通用APDU命令集:

指令名称CLAINS解释
READ BINARY00/04B0读出带有透明结构的EF内容的一部分
WRITE BINARYD0将二进制值写入 EF
UPDATE BINARY00/04D6启动使用在命令 APDU 中给出的位来更新早已呈现在EF中的位
ERASE BINARY0E顺序地从给出的偏移开始,将 EF 的内容的一部分置为其逻辑擦除的状态
READ RECORD00/04B2给出了EF的规定记录的内容或EF的一个记录开始部分的内容
WRITE RECORDD2WRITE RECORD命令报文启动下列操作之一:a. 写一次记录;b. 对早已呈现在卡内的记录数据字节与在命令 APDU 中给出的记录数据字节进行逻辑“或”运算;c. 对早已呈现在卡内的记录数据字节与在命令 APDU 中给出的记录数据字节进行逻辑“和”运算
APPEND RECORD00/04E2启动在线性结构 EF 的结束端添加记录,或者在循环结构的 EF 内写记录号 1
UPDATE RECORD00/04DC启动使用命令 APDU 给出的位来更新特定记录
GET DATACA可在当前上下文(例如应用特定环境或当前 DF )范围内用于检索一个原始数据对象,或者包含在结构化数据对象中所包含的一个或多个数据对象
PUT DATADA可在当前上下文(例如应用特定环境或当前 DF )范围内用于存储一个原始数据对象,或者包含在结构化数据对象中的一个或多个数据对象正确的存储功能(写一次和/或更新和/或添加)通过数据对象的定义和性质来引出
SELECT FILE00A4设置当前文件后续命令可以通过那个逻辑信道隐式地引用该当前文件
VERIFY00/0420启动从接口设备送入卡内的验证数据与卡内存储的引用数据(例如口令)进行比较
INTERNAL AUTHENTICATE0088启动卡使用从接口设备发送来的询问数据和在卡内存储的相关秘密(例如密钥)来计算鉴别数据,当该相关秘密被连接到 MF 时,命令可以用来鉴别整个卡当该相关秘密被连接到另一个 DF 时命令可以用来鉴别那个 DF。
EXTERNAL AUTHENTICATE0082使用卡计算的结果(是或否)有条件地来更新安全状态而该卡的计算是以该卡先前发出(例如通过 GETCHALLENGE 命令)的询问在卡内存储的可能的秘密密钥以及接口设备发送的鉴别数据为基础的
GET CHALLENGE0084要求发出一个询问(例如随机数)以便用于安全相关的规程(例EXTERNAL AUTHENTICATE 命令)
MANAGE CHANNEL70打开和关闭逻辑信道
GET RESPONSE00C0用于从卡发送至接口设备用可用的协议不能传送的那一些的 APDU (或APDU的一部分)
ENVOLOPE80C2用来发送那些不能由有效协议来发送的 APDU 或 APDU 的一部分或任何数据串

响应APDU:

在这里插入图片描述

常用SW1-SW2值:

SW1SW2解释
9000执行成功
6100数据被截断
6200警告,信息未提供
6281警告,回送数据可能出错
6282警告,文件长度小于Le
6283应用无效
6284FCI格式与P2指定的不符
6300认证失败
63Cx校验失败(x-允许重试次数)
6400原因不明
6581内存失败
6700长度不对
6900不能处理
6901命令不接受(无效状态)
6981命令与文件结构不相容,当前文件非所需文件
6982要PIN验证
6983文件无效,PIN被锁定
6984数据无效,随机数无效,引用的数据无效
6985条件不满足
6986不允许该命令
6982安全条件不满足
6987安全消息丢失
6988安全消息不正确
6999应用选择失败
6A80数据错误
6A81功能不支持
6A82文件找不到
6A83记录找不到
6A84没有足够的空间
6A86不正确的参数(P1,P2)
6A88引用数据没找到
6B00错误的参数 (P1,P2)
6C00长度错误 (Le)
6D00INS不支持
6E00CLA 不支持
6F00未知错误
9301资金不足
9302MAC无效
9303应用被永久锁定
9401交易金额不足
9402交易计数器达到最大值
9403密钥索引不支持
9406所需MAC不可用
SW1 与 SW2 状态码
正常处理警告错误执行错误检测错误
61XX或者900062XX或者63XX64XX或者65XX67XX直到6FXX

参考:

1.APDU常用指令

2.APDU命令格式

3.常用APDU指令错误码

4.APDU命令集

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值