USB CCID类协议中的APDU命令详解

出处:http://blog.chinaunix.net/uid-29124653-id-4573075.html

最近在调试apdu 特说明如下:望能给后来者一点点参考
APDU命令
CLA INS P1 P2 Lc Data Le
其中CLA为指令类别;INS为指令码;P1、P2为参数;Lc为Data的长度;Le为希望响应时回答的数据字节数,0表最大可能长度。
一 命令分类:
COS命令由具体应用分为4种命令报文结构如下:
① 情形1
CLA INS P1 P2 00
② 情形2
CLA INS P1 P2 Le
③ 情形3
CLA INS P1 P2 Lc Data
④ 情形4
CLA INS P1 P2 Lc Data Le
二 响应报文
1) 响应结构
响应数据 响应状态码
Data SW1 SW1
DATA: 返回给用户的数据,即命令的执行结果。
SW1、SW2: 返回命令处理的状态。
三 命令集
1) Read Binary
功能:此命令用于读取二进制文件部分或全部的内容。
CLA 00
INS B0
P1 见参数说明
P2 从文件中读取的第一字节的偏移地址
Le 期望读出数据的长度
2) Update Binary
功能:此命令使用给定的数据来更新二进制文件部分或全部的内容。
CLA 00
INS D6
P1 见参数说明
P2 要修改的第一字节的偏移地址
Lc 后续数据域的长度
Data 修改用的数据
3) Read Record
功能:此命令用于读取记录文件中指定记录的内容。
CLA 00
INS B2
P1 记录号
P2 见参数说明
Le 期望读出数据的长度
4) Update record
功能:此命令使用给定的数据来更新记录文件中指定记录的内容。当所指定的文件非记录文件时,命令将终止。
CLA 00
INS DC
P1 P1= 00 表示当前记录
P1≠ 00 表示指定的记录号
P2 见参数说明
Lc 后续数据域的长度
Data 更新原有记录的新记录
5) Verify PIN
功能:此命令将校验给定的密码的正确性,根据比较的结果修改安全状态,若校验失败次数达到PIN尝试上限,则PIN自动锁定。
CLA 00
INS 20
P1 00
P2
Lc 02 ~ 10
Data 外部输入的个人密码
6) Select File
功能:此命令使用文件名或应用标示符来选择IC卡内DF或EF。
CLA 00
INS A4
P1 00
P2 00
Lc 00 (选择MF文件)/ 02
Data 无 / FID
7) Get Challenge
功能:此命令请求IC卡返回一个用于安全相关过程的随机数。
CLA 00
INS 84
P1 00
P2 00
Le 04
8) Get Response
功能:此命令为T=0协议情形4状态下,用来取卡中返回的数据。
格式:
CLA 00
INS C0
P1 00
P2 00
Le 响应的期望数据最大长度
9) Internal Authenticate
功能:此命令将为外部设备验证卡中的秘密模块的有效性提供数据。
CLA 00
INS 88
P1 00
P2 00 ~ 07 密钥号
Lc 04
Data 外部随机数(4字节)
10) External Authenticate
功能:此命令将验证外部设备中的秘密模块的有效性。
CLA 00
INS 82
P1 00
P2 00 ~ 07 密钥号
Lc 0C
Data 发卡方认证数据
11) Change / Unlock PIN
功能:修改、解锁、安装卡片个人密码。
CLA 00
INS 5E
P1 00 修改卡片个人密码
01 解锁卡片个人密码
02 安(重)装卡片个人密码
P2 密码号
Lc
Data
12) Unlock Key
功能:解锁卡片应用密钥。
CLA 00
INS 5C
P1 01 解锁应用密钥
02 安装卡片应用密钥
P2 密钥号
Lc 无 / 密钥长度
Data 无 / 加密的密钥
13) Create File
功能:此命令创建卡片文件系统。
CLA 00 / 80
INS F2
P1 00 / FTP 文件类型
P2 00 / FAC 文件访问控制条件
Lc 无 / 07
Data
示例:
1 应用选择
(1)选择MF(主文件)
CLA INS P1 P2 Lc Data
00 A4 00 00
P1=00选择主文件
(2)根据应用标识符选择应用
CLA INS P1 P2 Lc Data
00 A4 04 0C 07 A0 00 00 02 47 10 01
P1=04 选择DF(专用文件),此时数据域为DF的文件名(AID应用标识符)
DF包括EF(基本文件)和其他DF
DF1:EF.COM、EF.DG1........................EF.DG16、EF.Sod
2 使用SELECT命令选择基本文件
例:选择机读取区
CLA INS P1 P2 Lc Data
00 A4 02 0C 02 01 01
3读二进制
CLA INS P1 P2 Lc Data
00 B0 05 00 00 //读取文件前256Byte
如果P1的最高位b8为1时,b6和b7位必须为0,b5-b1位表示待读取的基本文件的SFI;这时P2表示要读取数据起始位置在文件中的偏移量。 如果P1的最高位为0时,P1的后7位和P2相连共同组成了一个超过256的整数,表示待读取数据块的起始位置在文件中的偏移量,可以用于超过256Byte文件的读取。
读取数据组1(机读取)的数据
读取数据组2(编码人脸)的数据
出处:http://blog.csdn.net/rastevil/article/details/4531409

本文记录 USB CCID 标准中几个"复杂"的命令,复杂在于在这些命令身上花的时间较之简单的命令多许多或者是理解的时间比较晚,可能就是刚才。
主要有以下几条:
ccid_T0APDU();
ccid_Secure();
ccid_Escape();
ccid_Abort();
ccid_Mechanical();
ccid_SetDataRateAndClockFrequency(); 

ccid_T0APDU(): 我们知道,当读卡器是APDU level时,并且卡片使用T=0协议进行通信,那么构造TPDU的任务就落在了读卡器身上。根据ISO7816规定,该角色需要将APDU构造成一组命令,其中包括GET_RESPONSE()和ENVELOPE()命令,同时,由于每张卡片的CLA字段可以不同,这时,读卡器就需要一个规则来确定发送这2条命令时,选择的CLA是什么了。主机可以用ccid_T0APDU()来设置该值,以后读卡器就知道该怎么做了。

ccid_Secure(): 该命令用于 PIN_VERIFY 和 PIN_MODIFY 时,也就是校验PIN和修改PIN,该命令复杂在于命令后面的参数,需要根据卡片特性来填充并且构造合适的APDU命令,比较麻烦。

ccid_Escape(): 该命令用于传输厂家定义的特殊命令,可以理解为扩展命令,比如有的卡片PIN_VERIFY和PIN_MODIFY就是通过这个命令来做的,是因为M$ ccid驱动不支持 ccid_Secure()命令吧,我不确定?!

ccid_Abort(): 该命令是最难理解的一个,首先要明确 abort 什么东西?根据CCID,能够被 abort 的命令有以下几个:
      PowerOn()、XfrBlock()、Escape()、Secure()、Mechanical() 和 Abort()本身。 从这些命令似乎很难看出 abort 到底有什么用处(个人原来一直认为没用,现在有所转变了),不过,根据标准和实际场景分析得出,这条诡异的命令主要有以下2个功能:
      1)帮助 CCID 读卡器同步状态:
             如何同步呢?这个太细节了,其实就是因为读卡器因为某些原因已经堵死了或者将要堵死,主机发送一对 abort 命令来救活读卡器;
      2)帮助 HOST 端同步状态:
            根据个人的理解,在主机端,靠状态机驱动时,增加这个 abort 状态和处理,能够达到同步状态,把状态机跑顺的作用。
      我们可以假设一些使用该命令的场景:
      1)读卡器执行一条需要等待对方应答或用户输入才能结束的命令,但应答或输入迟迟不到,这就堵死了?是的,标准没为它加超时机制(不绝对),所以它就只能死等,后续再来的命令当然也就无能为力了,不过我们可以用 abort 拯救它 -- 读卡器。
      2)主机某个应用程序启动,准备操作读卡器读卡片,可能此时卡片状态或读卡器状态比较混沌,也许是上一个使用读卡器的应用没有安全退出,烂摊子留下来了,但我们不能被这种小事给弄死吧,我们可以发送2对 abort 命令来把之前的命令取消掉(如果有的话),至于为什么是2对,分析分析就知道了。不过后来发现,PowerOff 命令好像也可以做到,晕!
      3)还是主机应用,可能需要读取很多数据,读到几片数据时,发现不爽了,不想读了(可能是超时了),自己来个 abort, 标记下,以后到的数据我都不当成是正常的数据,为什么还有数据到呢? 不是给 abort 了吗? 因为我还不知道如何 abort 卡片正在进行的操作,如果卡片有数据传回来,我们没有办法打断,只能都收回来,结果就要看接收者如何利用这些数据,如果被 abort 了的话,可认为是无效数据而简单丢弃。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: USB CCID是一种安全性高、速度快、易于管理的智能卡读取器标准,其全称是Universal Serial Bus Chip/Smart Card Interface Devices,文译为“通用串行总线芯片/智能卡接口设备”。在智能卡的应用领域,USB CCID提供了一种在电脑与智能卡之间进行数据传输的接口,从而使智能卡可以更加方便地应用于各种领域。 USB CCID支持多种操作系统,包括Windows、Linux和Mac OS等,并且管理也十分方便。在使用过程USB CCID的用户可以通过电脑来进行对智能卡的读取、写入、验证以及加密等操作。它可以读取各种型的智能卡,例如金融卡、医保卡、居民身份证等,因此具有很高的实用价值。 USB CCID不仅可以提高智能卡的使用便捷性,还可以有效提高数据交换的安全性和速度。通过USB CCID可以避免智能卡读取器的驱动程序不兼容或版本不同导致的问题,同时也避免了移动数字签名的复杂程序和安装所需时间。 在国内,智能卡技术的应用已经逐步普及,随着智能卡应用场景的增多,USB CCID的应用也将越来越广泛。 ### 回答2: USB CCIDUSB Chip Card Interface Device)是一种使用USB接口连接智能卡或芯片卡的设备协议。它提供了一种标准化的接口,使得智能卡设备与计算机之间可以进行通信和交互。 USB CCID协议定义了智能卡读卡器与计算机之间的通信规范,包括数据传输协议、命令格式等。智能卡读卡器通过USB接口与计算机连接,将智能卡信息传递给计算机进行处理。在系统层面,操作系统会为智能卡读卡器分配一个设备驱动程序,使其可以被识别和使用。 通过USB CCID协议,智能卡读卡器可以与计算机进行安全的数据交换。智能卡可以存储个人身份认证、支付信息、加密密钥等重要数据。通过智能卡读卡器,计算机可以读取和写入智能卡的数据,并进行相应的验证和处理。这样可以提高数据的安全性,防止未经授权的访问。 USB CCID协议的出现,方便了各个领域对智能卡的应用。例如在金融领域,智能卡读卡器可以用于实现电子银行、电子钱包等支付功能。在身份认证领域,智能卡读卡器可以用于实现电子身份证的读取和验证。在网络安全领域,智能卡读卡器可以用于实现安全存储和传输加密密钥。而USB CCID协议在这些应用起到了关键的作用。 总之,USB CCID是一种通过USB接口与计算机通信的智能卡读卡器设备协议。它提供了一种标准化的接口,使得智能卡可以与计算机进行安全的数据交互,广泛应用于金融、身份认证、网络安全等领域。 ### 回答3: USB CCID 是指USB智能卡读卡器设备 (USB Smart Card Reader Device Class) 规范,其全称为Universal Serial Bus Chip / Smart Card Interface Devices。USB CCID 是一种基于智能卡技术的USB设备别,用于连接计算机和智能卡,实现智能卡的读取、写入及交互功能。 CCID 是一个沟通和管理智能卡读卡器设备和计算机之间通信的协议。通过 USB CCID 规范,计算机可以与智能卡读卡器进行数据传输,实现对智能卡上存储的信息的读取和写入。智能卡读卡器通过 CCID 协议将智能卡与计算机进行连接,使得计算机可以与智能卡进行通信,实现对智能卡的各种操作。 使用 USB CCID,智能卡读卡器可以通过 USB 接口与计算机连接,并通过 CCID 协议进行数据传输。用户可以通过计算机与智能卡进行交互,如读取智能卡上的身份认证信息、存储电子证书、进行数字签名、加解密等操作。同时,通过 USB CCID 规范,可以方便地使用智能卡进行各种安全认证应用,如电子银行、电子身份认证等。 USB CCID 不仅提供了一个标准的通信协议,也提供了一个标准的设备驱动程序接口,使得不同厂商的智能卡读卡器可以统一兼容,减少了对不同供应商的设备进行适配、驱动的问题。同时,使用 USB 接口也使得智能卡读卡器的使用更加便捷,不再依赖于特定的硬件接口。 总之,USB CCID 是一种用于智能卡读卡器的通信协议和设备别规范,通过 USB 接口连接计算机和智能卡,实现智能卡的读写、交互功能,为各种安全应用提供了便利性和统一性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值