APDU指令集合
- 格式:doc
- 大小:71.51 KB
- 文档页数:5
APDU指令介绍1. APDU指令格式根据7816-4规范,从终端发出的命令和卡片响应的信息必须遵从以下4种格式。
情形1:命令:响应:情形2:命令:响应:情形3:命令:响应:情形4:命令:响应:1.1 APDU命令格式1.1.1 命令头域命令头定义报文的内容如下表所示:表1命令头域1.1.2 命令体命令体中各项是可选的。
Lc 命令数据域中D A TA的长度,该长度不可超过255字节。
Data 命令和响应中的数据域。
Le 响应数据域中期望数据的长度。
Le=00,表示需要最大字节数,该长度不可超过255字节。
1.2 APDU响应数据格式APDU命令1.2.1 返回数据返回数据域是可选项。
1.2.2 返回状态字(SW1SW2)SW1 SW2是卡片执行命令的返回代码,任何命令的返回信息都至少由一个状态字组成。
1.3 状态字SW1SW2意义状态字说明了命令处理的情况,即命令是否被正确执行,如果未被正确执行,原因是什么。
状态字由2部分组成:SW1(status word1):表示命令处理状态;SW2(status word2):表示命令处理限定。
表2 状态字SW1-SW2当SW1的高半字节为‘9’,且低半字节不为‘0’时,其含义依赖于相关应用。
当SW1的高半字节为‘6’,且低半字节不为‘0’时,其含义与应用无关。
2. APDU指令2.1 常见APDU指令介绍以下介绍的指令均为交通行业常见指令,涵盖ED/EP应用和电子现金应用,针对非接触卡片。
●通用指令────SELECT(选择)────READBINARY(读二进制)────READRECORD(读记录)────UPDATE BINARY(修改二进制)────UPDATE RECORD(修改记录)────GETRESPON SE(取响应)────GETCHALLE NGE(产生随机数)────EXTERN AL AUTHEN TICAT ION(外部认证)────INTERN AL AUTHEN TICAT ION(内部认证)────VERIFY(校验)────PINCHANGE/UNBLOC K(个人密码修改/解锁)────APPLIC ATION BLOCK(应用锁定)────APPLIC ATION UNBLOC K(应用解锁)────CARDBLOCK(卡片锁定)●电子钱包\电子存折一般交易相关指令────GET BALANCE(读余额)────GET TRANSA CTION PROVE(取交易认证)────CHANGE PIN(修改个人密码)────INITIA LIZEFOR LOAD(圈存初始化)────CREDIT FOR LOAD(圈存)────INITIA LIZEFOR PURCHA SE(消费初始化)────INITIA LIZEFOR CASH WITHDR AW(取现初始化)────DEBITFOR PURCHA SE/CASH WITHDRA W(消费/取现)────INITIA LIZEFOR UNLOAD(圈提初始化,仅用于电子存折)────DEBITFOR UNLOAD(圈提,仅用于电子存折)────INITIA LIZEFOR UPDATE(修改透支限额初始化,仅用于电子存折)────UPDATE OVERDR AW LIMIT(修改透支限额,仅用于电子存折)────APPEND RECORD(增加记录)●复合应用模式专用指令────INITIA LIZEFOR CAPP PURCHA SE(复合应用消费初始化)────UPDATE CAPP DA TA CACHE(更新复合应用数据缓存)────DEBITFOR CAPP PURCHA SE(复合应用消费)●电子现金专用指令────GENERA TE AC(生成应用密文)────GET DA TA(取数据)────PUT DA TA(设置数据)────GET PROCES SINGOPTION S(获取处理选项)通用指令是电子钱包、电子存折、电子现金都支持的,但是针对不同的应用,某些指令的具体参数细节可能略有差异,可参照相关规范。
usb枚举apdu指令重复-回复usb枚举apdu指令重复,是指在USB设备的枚举过程中,APDU指令被重复发送。
APDU(Application Protocol Data Unit)是一种用于智能卡和读卡器之间通信的协议单元,它包含了命令和响应两个部分。
USB设备在被计算机识别并完成初始化过程时,需要发送一系列的APDU指令来完成设备的枚举,以便被操作系统正确识别和使用。
一、APDU指令重复的原因:1. 软件错误:在设备驱动程序或应用程序中,可能会出现重复发送APDU 指令的错误代码逻辑。
2. 通信错误:在USB通信中,数据的传输可能会出现错误,例如传输中的丢包、重发等情况,导致APDU指令被重复发送。
二、可能的后果:1. 设备响应错误:如果APDU指令被重复发送,设备可能无法正确处理重复的指令,导致设备响应错误。
2. 设备死锁:在设备枚举过程中,如果APDU指令重复发送到设备,可能导致设备进入死锁状态,无法继续进行枚举。
3. 数据损坏:如果APDU指令重复发送引起通信错误,在数据传输中可能造成数据损坏,导致设备响应错误或无法正确识别。
三、解决APDU指令重复问题的方法:1. 软件错误修复:在开发设备驱动程序或应用程序时,应仔细检查代码逻辑,避免出现重复发送APDU指令的错误逻辑。
2. 错误处理机制:在设备驱动程序或应用程序中,需要实现错误处理机制,当出现通信错误时能够正确识别并进行相应的处理操作,例如重发指令或重新初始化设备。
3. 设备固件更新:如果APDU指令重复问题是由设备固件引起的,可以考虑更新设备固件来修复问题。
4. USB稳定性测试:在开发过程中,可以进行USB稳定性测试,模拟各种通信错误情况,以确保设备在不同条件下的稳定性和正确性。
四、常见的APDU指令重复问题案例及解决方法:1. 设备枚举失败:在设备初始化阶段,APDU指令被重复发送,导致设备无法正确识别。
解决方法是检查设备驱动程序中的错误逻辑或重新初始化设备。
APDU指令集合1GP APDU 指令参考(GlobalPlatform 第九章)1.1State ReturnedSw1 sw2 meaning62 00 Logical Channel already closed62 83 Card Life Cycle State is CARD_LOCKED63 10 More data available64 00 No specific diagnosis65 81 Memory failure67 00 Wrong length in Lc68 81 Logical channel not supported or is not active68 82 Secure messaging not supported69 82 Security status not satisfied69 85 Conditions of use not satisfied6A 80 Incorrect values in command data6A 81 Function not supported e.g. card Life Cycle State is CARD_LOCKED6A 82 Selected Application / file not found6A 84 Not enough memory space6A 86 Incorrect P1 P26A 88 Referenced data not found6D 00 Invalid instruction6E 00 Invalid class94 84 Algorithm not supported1.2基本指令command CLA INFDelete command (80\84) E4 (9.2)GET DATA Command (00\80\84) CA (9.3)GET STATUS Command (80\84)F2 (9.4)INSTALL Command (80\84)E6 (9.5)LOAD Command (80\84)E8 (9.6)MANAGE CHANNEL Command 00 70 (9.7)PUT KEY Command (80\84)D8 (9.8)SELECT Command 00 A4 (9.9)SET STATUS Command (80\84)F0 (9.10)STORE DATA Command (80\84)E2 (9.11)2PBOC 指令参考(中国金融集成电路1、2) 2.1基本指令command CLA INF 说明APPLICATION BLOCK 84 1E 使当前选择的应用失效(6.2.3)APPLICATION UNBLOCK 84 18 用于恢复当前应用(6.2.4)CARD BLOCK 84 16 使卡中所有应用永久失效(6.2.5)EXTERNAL AUTHENTICATION 00 82 要求IC卡中的应用验证密码(6.2.6) GET CHALLENGE 00 84 请求一个用于安全相关过程的随机数(6.2.7)GET RESPONSE 00 C0 提供了一种从卡片向接口设备传送APDU 的传输方法 (6.2.8) INTERNAL AUTHENTICA TION 00 88 提供了利用接口设备发来的随机数和自身存储的相关密钥进行数据认证的功能(6.2.9)PIN UNBLOCK 84 24 为发卡方提供了解锁个人密码的功能(6.2.10)READ BINARY (00\04)B0 用于读取二进制文件的内容(6.2.11) READ RECORD (00\04)B2 用于读取记录文件的内容(6.2.12) SELECT 00 A4 通过文件名或AID来选择IC卡中的PSE、DDF或ADF(6.2.13) UPDATE BINARY (00\04)D6 报文使用命令APDU中给定的数据修改EF文件中已有的数据(6.2.14) UPDATE RECORD (00\04)DC 报文用命令APDU中给定的数据更改指定的记录(6.2.15)VERIFY 00 20 用于校验命令数据域中的个人密码的正确性(6.2.16)(1)CHANGE PIN(修改个人密码) 80 5E 01 00 (5.2.2)CREDIT FOR LOAD(圈存) 80 52 00 00 (5.2.3)DEBIT FOR PURCHASE/CASH WITHDRAW(消费/取现) 80 54 01 00 (5.2.4)DEBIT FOR UNLOAD(圈提) 80 54 03 00 (5.2.5)GET BALANCE(读余额) 80 5C 00 0x (5.2.6)GET TRANSACTION PROVE(取交易认证) 80 5A 00 xx (5.2.7)INITIALIZE FOR CASH WITHDRAW(取现初始化) 80 50 02 01 (5.2.8)INITIALIZE FOR LOAD(圈存初始化) 80 50 00 0x (5.2.9)INITIALIZE FOR PURCHASE(消费初始化) 80 50 01 0x (5.2.10) INITIALIZE FOR UNLOAD(圈提初始化) 80 50 05 01 (5.2.11)INITIALIZE FOR UPDATE(修改初始化) 80 50 04 01 (5.2.12)RELOAD PIN(重装个人密码) 80 5E 00 00 (5.2.13)UPDATE OVERDRAW LIMIT(修改透支限额) 80 58 00 00 (5.2.14)(2) 2.2State ReturnedSw1 sw2 meaning 性质61 xx 正常处理62 00 无信息提供警告62 81 回送数据可能出错警告62 82 文件长度<le< p="">62 83 选择文件无效警告63 00 认证失败警告63 cx 使用内部重试程序更新成功警告64 00 状态位未变错误65 81 内存错误错误67 00 Lc长度错误错误68 82 不支持安全报文错误69 00 不能处理69 01 命令不接受(无效状态) 错误69 81 命令与文件结构不相容错误69 82 不满足安全状态错误69 83 认证方法锁定错误69 84 引用数据无效错误69 85 使用条件不满足错误69 86 不满足命令执行的条件(非当前EF) 错误69 87 安全报文数据项丢失错误69 88 安全报文数据项不正确错误6A 80 数据域参数不正确错误6A 81 不支持此功能警告6A 82 文件未找到错误6A 83 未找到记录错误6A 84 文件中存储空间不够错误6A 86 参数P1 P2不正确错误6A 88 未找到引用数据错误6B 00 参数错误(偏移地址超出了EF) 错误6C xx 长度错误(Le不正确,xx表示实际长度) 错误6D 00 INS不支持或错误错误6E 00 CLA不支持或错误错误6F 00 数据无效错误93 02 MAC无效错误93 03 应用永久锁定警告\错误(block\unblock)94 01 金额不足错误94 03 密钥索引不支持错误94 06 所需MAC不可用错误37816 指令参考(7816-4)3.1基本指令command CLA INF 说明READ BINARY 00 B0 (6.1)WRITE BINARY command 00 D0 (6.2)UPDATE BINARY command 00 D6 (6.3)ERASE BINARY command 00 0E (6.4)READ RECORD(S) command 00 B2 (6.5)WRITE RECORD command 00 D2 (6.6)APPEND RECORD 00 E2 (6.7)UPDATE RECORD command 00 DC (6.8)GET DATA command 00 CA (6.9)PUT DATA command 00 DA (6.10)SELECT FILE command 00 A4 (6.11)VERIFY command 00 20 (6.12)INTERNAL AUTHENTICA TE command 00 88 (6.13)EXTERNAL AUTHENTICATE command 00 B2 (6.14)GET CHALLENGE command 00 B4 (6.15)MANAGE CHANNEL command 00 70 (6.16)3.2State ReturnedSw1 sw2 meaning62 00 No information is given62 81 Part of returned data may be corrupted62 82 End of file reached befeore reading Le bytes62 83 Selected file invalidated62 84 FCI not formatted according to 5.1.562 CX Counter (successful writing, but after using an internal retry routine. 'X'!='0'indicates the number of retries: 'X'='0' means that no counter is provided)63 00 No information given (verification failed)63 CX Counter (successful storing, but after using an internalretry routine, 'X'!='0'indicates the number of retries. 'X'='0' means that no counter is provided65 81 Memory failure (unsuccessful writing)67 00 Wrong length (wrong Le field)69 81 Command incompatible with file structure69 82 Security status not satisfied69 83 Authentication method blocked69 84 Referenced data invalidated69 85 Conditions of use not satisfied69 86 Command not allowed (no current EF)6A 80 Incorrect parameters in the data field6A 81 Function not supported6A 82 File not found6A 83 Record not found6A 84 Not enough memory space in the file6A 85 Lc inconsistent with TLV structure6A 86 Incorrect parameters P1-P26a 87 Lc inconsistent with P1-P26A 88 Referenced data (data objects) not found6B 00 Wrong parameters (offset outside the EF)6C XX Wrong length (wrong Le field: 'XX' indicates the exact length)</le<>。
1.APDU命令集命令格式:1.READ BINARY的命令报文:如果在P1中b8=1,则P1的b7和b6置为0(RFU若干位) P1的b5至b1是短EF标识符并且P2是在从文件开始的数据单元中被读的第1个字节的偏移。
如果在P1中b8=0,则P1_P2是在从文件开始的数据单元中被读的第1个字节的偏移。
如果Le字段仅包含若干“0” 则对于短的长度在不超过256的范围内或者对扩充长度在不超过65536的范围内所有字节(直到文件结束为止)应被读出。
READ BINARY的响应报文:如果在P1中b8=1,则P1的b7和b6显域0(RFU若干位) P1的b5至b1是短EF标识符并且P2是在从文件开始的数据单元中被写的第1个字节的偏移。
如果在P1中b8=0,则P1_P2是在从文件开始的数据单元中被写的第1个字节的偏移。
WRITE BINARY的响应报文:3.UPDATA BINARY命令报文:说明:如果在P1中b8=1,则P1的b7和b6置为0(RFU若干位), P1的b5至b1是短EF标识符,并且P2是在从文件开始的数据单元中被更新的第1个字节的偏移。
如果在P1中b8=0,则P1_P2是在从文件开始的数据单元中被更新的第1个字节的偏移。
UPDATE BINARY的响应报文:说明:如果在P1中b8=1,则P1的b7和b6显示0(RFU若干位), P1的b5至b1是短EF标识符,并且P2是在从文件开始的数据单元中被写的第1个字节的偏移。
如果在P1中b8=0,则P1_P2是在从文件开始的数据单元中被写的第1个字节的偏移。
如果数据字段呈现,它编码不被擦除的第1个数据单元的偏移,该偏移应大于在P1 —P2中编码的一个偏移,当数据字段为空时,该命令擦除到该文件的结束端。
WRITE RECORD的响应报文:7.APPEND RECORD命令报文:UPDATE RECORD的响应报文:9.GET DATA命令报文:PUT DATA的响应报文:12.VERIFY命令报文:说明:P1=‘00’表示没有信息被给出,在发出命令之前引用的算法为已知,或在数据字段中提供。
ETSI TS 102 221UICC与终端接口;物理和逻辑特性1USIM-ME命令结构本章节描述了UICC(USIM)所支持的命令和响应APDU格式。
1.1命令APDU结构本章节描述了一个通用的应用协议数据单元(APDU)的基本结构。
APDU是指在传输层之上的应用层的数据(移动设备和卡之间)传输协议。
一个命令APDU包含数据包头和数据体。
见下表,其中,数据包头包含CLA字段,INS 字段,P1和P2字段,其是命令APDU的必要组成部分。
数据体部分是可选部分,包括Lc,Data和Le。
表10.1:命令APDU的内容对于 C-APDU 结构的四种可能组合见下表:表10.2:C-APDU组合2.1.1Class字段编码Class类字段的最高4位(b8-b5)的含义参见下表,位4和3表示安全数据标识,位2和1表示所用的逻辑通道,逻辑通道可以从0到3。
如果UICC卡支持逻辑通道机制,那么最大可获得的逻辑通道数标识在ATR的卡兼容性数据对象中,如果该数据对象不存在,则只支持b2 = b1 = 0的数据通道。
一个运行在支持逻辑通道的UICC上的应用,应该要么在消息校验中,从签名的计算中去除类字节,或者将其设置为缺省值。
移动终端可以改变应用所使用的逻辑通道,与所使用的逻辑通道比较安全消息校验签名。
表10.3:类字节编码缺省情况下,卡不采用安全消息,除非由应用特别指出。
2.1.2指令字段编码参见下表表10.5:电信应用的指令字节编码2.1.3参数字段编码参数字节P1和P2的使用和具体的命令有关。
如果参数未被使用,则设置未'00'。
具体编码方式参见具体的命令。
2.1.4Lc字段的编码该字段表示数据的长度,其为可选项。
如果该字段存在,则在其后将跟着相应长度的数据字节。
移动设备可以发送1到255各字节。
2.1.5数据体编码数据体的编码与具体的命令有关。
参见下面章节。
2.1.6Le字段的编码该字段表示命令发送后所期望的最大返回数据长度,其为可选项。
CPU卡常用的APDU指令错误码状态码性质错误解释--------------------------------9000 正常成功执行6200 警告信息未提供6281 警告回送数据可能出错6282 警告文件长度小于Le6283 警告选中的文件无效6284 警告FCI格式与P2指定的不符6300 警告鉴别失败63Cx 警告校验失败(x-允许重试次数)6400 出错状态标志位没有变6581 出错内存失败6700 出错长度错误6882 出错不支持安全报文6981 出错命令与文件结构不相容,当前文件非所需文件6982 出错操作条件(AC)不满足,没有校验PIN6983 出错认证方法锁定,PIN被锁定6984 出错随机数无效,引用的数据无效6985 出错使用条件不满足6986 出错不满足命令执行条件(不允许的命令,INS有错)6987 出错MAC丢失6988 出错MAC不正确698D 保留6A80 出错数据域参数不正确6A81 出错功能不支持;创建不允许;目录无效;应用锁定6A82 出错该文件未找到6A83 出错该记录未找到6A84 出错文件预留空间不足6A86 出错P1或P2不正确6A88 出错引用数据未找到6B00 出错参数错误6Cxx 出错Le长度错误,实际长度是xx 6E00 出错不支持的类:CLA有错6F00 出错数据无效6D00 出错不支持的指令代码9301 出错资金不足9302 出错MAC无效9303 出错应用被永久锁定9401 出错交易金额不足9402 出错交易计数器达到最大值9403 出错密钥索引不支持9406 出错所需MAC不可用6900 出错不能处理6901 出错命令不接受(无效状态)61xx 正常需发GET RESPONSE命令6600 出错接收通讯超时6601 出错接收字符奇偶错6602 出错校验和不对6603 警告当前DF文件无FCI6604 警告当前DF下无SF或KF。
c语言实现apdu格式解析
C语言是一种非常适合实现APDU格式解析的编程语言。
APDU (Application Protocol Data Unit)是用于智能卡和读卡器之间通信的协议数据单元。
在C语言中,你可以使用结构体来表示APDU 格式,然后编写相应的函数来解析和处理这些结构体。
首先,你需要定义一个结构体来表示APDU格式的数据。
这个结构体可能包括APDU的CLA(类)、INS(指令)、P1(参数1)、P2(参数2)、长度和数据等字段。
你可以使用C语言中的结构体来定义这些字段,以便在程序中方便地操作和解析APDU格式的数据。
接下来,你可以编写函数来解析和处理APDU格式的数据。
这些函数可以接受一个表示APDU格式的结构体作为参数,并根据实际需求进行解析和处理。
例如,你可以编写一个函数来解析APDU格式的数据,并将解析后的结果存储在另一个结构体中,以便进一步处理或返回给调用者。
在编写这些函数的过程中,你需要考虑各种可能的情况,例如错误处理、异常情况等。
你可能需要使用C语言中的条件语句、循环语句和指针等特性来实现这些功能。
除了解析函数之外,你可能还需要编写其他辅助函数来处理APDU格式的数据,例如校验函数、打印函数等。
这些函数可以帮助你更好地理解和处理APDU格式的数据。
总之,使用C语言实现APDU格式解析需要你熟练掌握C语言的基本语法和特性,并考虑各种可能的情况和需求。
通过合理地设计结构体和编写相应的函数,你可以实现一个高效、稳定的APDU格式解析程序。
希望这些信息能够帮助你更好地理解和实现APDU格式解析的过程。
魔兽秘籍+dota指令(秘籍)-apakduscstfrfnnengul-apduscstfrfnnengul-scstnengWhosYourDaddy1、单人模式下使用。
2、按回车输入相应内容再次回车即可启用秘籍;重复操作一次可以取消该秘籍(资源类除外)。
3、输入不分大小写。
WarpTen: 快速建造IocainePowder : 快速死亡WhosYourDaddy : 无敌KeyserSoze [amount] : 得到黄金[数字]LeafItToMe [amount] : 得到木头[数字]GreedIsGood [amount] : 得到黄金+木头PointBreak : 得到食物ThereIsNoSpoon : 得到魔力TheDudeAbides : cooldown(CD归零)StrengthAndHonor : nodefeatItVexesMe : novictoryWhoIsJohnGalt : 搜索ISeeDeadPeople : 显示地图Synergy : 科技树RiseAndShine : 黎明LightsOut : 黄昏DaylightSavings [hour] : 时间[数字]SharpAndShiny : 升级Motherland [race] [level] : 升级 [人物] [级别]somebobysetupusthebomb : 击败敌人AllYourBaseAreBelongToUs : 完全胜利魔兽争霸超级密集:无限力量:thereisnospoon(魔法无限) somebodysetupusthebomb =立即战败ItVexesMe =不会被判定获胜StrengthAndHonor =不会被判定战败thereisnospoon =法力无限WhoIsJohnGalt =研发加速WarpTen =快速建筑SharpAndShiny =建筑物升级Synergy =科技全开WarpTen 快速建造WhosYourDaddy 无敌ThereIsNoSpoon 魔力无限ISeeDeadPeople 显示地图SharpAndShiny 升级SombodySetUpUsTheBomb 击败敌人在游戏中按下回车,输入以下密码后再按下回车即可:iseedeadpeople 地图全开allyourbasearebelongtous 立即获胜somebodysetupusthebomb 立即失败thereisnospoon 无限魔法whosyourdaddy 无敌模式strengthandhonor 在胜利或者失败了之后继续玩warpten 快速建设keyseroze 增加500金钱iocainepowder 快速灭亡leafittome 增加500木材pointbreak 获得食物thedudeabides 安静下来itvexesme 拒绝胜利whoisjohngalt 研究synergy 科技树全开sharpandshiny 升级riseandshine 设置早上时间lightsout 设置晚上时间daylightsavings (hour) 设置一天的指定时刻daylightsavings 白昼连续开关motherland (race) (level) 选关注:以上魔兽秘籍适合所有魔兽争霸3的版本:)魔兽争霸秘籍在战役模式下(多人游戏不可),敲回车,会出来对话框,然后把下面字符输入即可无敌并一击必杀: whosyourdaddy无限能量: thereisnospoon 魔兽争霸秘籍任务模式里即使失败也继续游戏: strengthandhonor地图全开: iseedeadpeople 魔兽争霸秘籍立即胜利: allyourbasearebelongtous立即失败: somebodysetusupthebomb禁止任务默认的胜利条件: itvexesme加黄金: keysersoze [黄金数量](如果未指定数量默认增加500)加木材: leafittome [木材数量](如果未指定数量默认增加500)加黄金和木材: greedisgood [数量](如果未指定数量默认增加500)魔兽争霸秘籍快速建造: warpten无人口上限: pointbreak快速研究技能: whoisjohngalt快速升级: sharpandshiny解除科技树限制: synergy魔兽争霸秘籍将时间直接设定到白昼: riseandshine将时间直接设定到夜晚: lightsout设定具体时间: daylightsavings [小时数]让时间永远停留在白昼: daylightsavings魔兽争霸秘籍等级选择: motherland [种族] [等级]Fast death(?): iocainepowderCool down时间为0。
APDU指令介绍1. APDU指令格式根据7816-4规范,从终端发出的命令和卡片响应的信息必须遵从以下4种格式。
情形1:命令:响应:情形2:命令:响应:情形3:命令:响应:情形4:命令:响应:1.1 APDU命令格式1.1.1 命令头域命令头定义报文的内容如下表所示:1.1.2 命令体命令体中各项是可选的。
Lc 命令数据域中DATA的长度,该长度不可超过255字节。
Data 命令和响应中的数据域。
Le 响应数据域中期望数据的长度。
Le=00,表示需要最大字节数,该长度不可超过255字节。
1.2 APDU响应数据格式APDU1.2.1 返回数据返回数据域是可选项。
1.2.2 返回状态字(SW1SW2)SW1 SW2是卡片执行命令的返回代码,任何命令的返回信息都至少由一个状态字组成。
1.3 状态字SW1SW2意义状态字说明了命令处理的情况,即命令是否被正确执行,如果未被正确执行,原因是什么。
状态字由2部分组成:SW1(status word1):表示命令处理状态;SW2(status word2):表示命令处理限定。
表2 状态字SW1-SW2当SW1的高半字节为‘9’,且低半字节不为‘0’时,其含义依赖于相关应用。
当SW1的高半字节为‘6’,且低半字节不为‘0’时,其含义与应用无关。
2. APDU指令2.1 常见APDU指令介绍以下介绍的指令均为交通行业常见指令,涵盖ED/EP应用和电子现金应用,针对非接触卡片。
●通用指令────SELECT(选择)────READ BINARY(读二进制)────READ RECORD(读记录)────UPDATE BINARY(修改二进制)────UPDATE RECORD(修改记录)────GET RESPONSE(取响应)────GET CHALLENGE(产生随机数)────EXTERNAL AUTHENTICATION(外部认证)────INTERNAL AUTHENTICATION(内部认证)────VERIFY(校验)────PIN CHANGE/UNBLOCK(个人密码修改/解锁)────APPLICATION BLOCK(应用锁定)────APPLICATION UNBLOCK(应用解锁)────CARD BLOCK(卡片锁定)●电子钱包\电子存折一般交易相关指令────GET BALANCE(读余额)────GET TRANSACTION PROVE(取交易认证)────CHANGE PIN(修改个人密码)────INITIALIZE FOR LOAD(圈存初始化)────CREDIT FOR LOAD(圈存)────INITIALIZE FOR PURCHASE(消费初始化)────INITIALIZE FOR CASH WITHDRAW(取现初始化)────DEBIT FOR PURCHASE/CASH WITHDRAW(消费/取现)────INITIALIZE FOR UNLOAD(圈提初始化,仅用于电子存折)────DEBIT FOR UNLOAD(圈提,仅用于电子存折)────INITIALIZE FOR UPDATE(修改透支限额初始化,仅用于电子存折)────UPDATE OVERDRAW LIMIT(修改透支限额,仅用于电子存折)────APPEND RECORD(增加记录)●复合应用模式专用指令────INITIALIZE FOR CAPP PURCHASE(复合应用消费初始化)────UPDATE CAPP DATA CACHE(更新复合应用数据缓存)────DEBIT FOR CAPP PURCHASE(复合应用消费)●电子现金专用指令────GENERATE AC(生成应用密文)────GET DATA(取数据)────PUT DATA(设置数据)────GET PROCESSING OPTIONS(获取处理选项)表3 APDU命令集通用指令是电子钱包、电子存折、电子现金都支持的,但是针对不同的应用,某些指令的具体参数细节可能略有差异,可参照相关规范。
usb枚举apdu指令重复USB枚举APDU指令重复的情况可能是由于设备或系统出现问题导致的。
以下是一个USB 枚举流程:1. 枚举流程:- 连接了设备的HUB在HOST查询其状态改变端点时返回对应的bitmap,告知HOST 某个PORT状态发生了改变。
- 主机向HUB查询该PORT的状态,得知有设备连接,并知道了该设备的基本特性。
- 主机等待设备上电稳定,然后向HUB发送请求,复位并使能该PORT。
- HUB执行PORT复位操作,复位完成后该PORT就使能了。
现在设备进入到defalut 状态,可以从Vbus获取不超过100mA的电流。
主机可以通过0地址与其通讯。
- 主机通过0地址向该设备发送get_device_descriptor标准请求,获取设备的描述符。
- 主机再次向HUB发送请求,复位该PORT。
- 主机通过标准请求set_address给设备分配地址。
- 主机通过新地址向设备发送get_device_descriptor标准请求,获取设备的描述符。
- 主机通过新地址向设备发送其他get_configuration请求,获取设备的配置描述符。
- 根据配置信息,主机选择合适配置,通过set_configuration请求对设备而进行配置。
这时设备方可正常使用。
2. GET_DESCRIPTOR:总线复位及向默认地址0发送GET_DESCRIPTOR指令包,请求设备描述。
如图一所示:- Index(4-5):表示USB插入总线复位。
- Index(7-8):表示主机向默认地址发送GET_DESCRIPTOR指令包,详细信息也抓出来了。
- Index(15-17):表示设备向主机发送设备描述数据Index(16)。
- Index(18-19):表示主机完成GET_DESCRIPTOR指令后,给设备发送一个空应答。
3. SET_ADDRESS:再次复位总线及向设备发送SET_ADDRESS指令包,设置设备地址。
1GP APDU 指令参考(GlobalPlatform 第九章)1.1State ReturnedSw1 sw2 meaning62 00 Logical Channel already closed62 83 Card Life Cycle State is CARD_LOCKED63 10 More data available64 00 No specific diagnosis65 81 Memory failure67 00 Wrong length in Lc68 81 Logical channel not supported or is not active68 82 Secure messaging not supported69 82 Security status not satisfied69 85 Conditions of use not satisfied6A 80 Incorrect values in command data6A 81 Function not supported e.g. card Life Cycle State is CARD_LOCKED6A 82 Selected Application / file not found6A 84 Not enough memory space6A 86 Incorrect P1 P26A 88 Referenced data not found6D 00 Invalid instruction6E 00 Invalid class94 84 Algorithm not supported1.2基本指令command CLA INFDelete command (80\84) E4 (9.2)GET DATA Command (00\80\84) CA (9.3)GET STATUS Command (80\84)F2 (9.4)INSTALL Command (80\84)E6 (9.5)LOAD Command (80\84)E8 (9.6)MANAGE CHANNEL Command 00 70 (9.7)PUT KEY Command (80\84)D8 (9.8)SELECT Command 00 A4 (9.9)SET STATUS Command (80\84)F0 (9.10)STORE DATA Command (80\84)E2 (9.11)2PBOC 指令参考(中国金融集成电路1、2) 2.1基本指令command CLA INF 说明APPLICATION BLOCK 84 1E 使当前选择的应用失效(6.2.3)APPLICATION UNBLOCK 84 18 用于恢复当前应用(6.2.4)CARD BLOCK 84 16 使卡中所有应用永久失效(6.2.5)EXTERNAL AUTHENTICATION 00 82 要求IC卡中的应用验证密码(6.2.6) GET CHALLENGE 00 84 请求一个用于安全相关过程的随机数(6.2.7)GET RESPONSE 00 C0 提供了一种从卡片向接口设备传送APDU的传输方法 (6.2.8) INTERNAL AUTHENTICA TION 00 88 提供了利用接口设备发来的随机数和自身存储的相关密钥进行数据认证的功能(6.2.9)PIN UNBLOCK 84 24 为发卡方提供了解锁个人密码的功能(6.2.10)READ BINARY (00\04)B0 用于读取二进制文件的内容(6.2.11) READ RECORD (00\04)B2 用于读取记录文件的内容(6.2.12)SELECT 00 A4 通过文件名或AID来选择IC卡中的PSE、DDF或ADF(6.2.13) UPDATE BINARY (00\04)D6 报文使用命令APDU中给定的数据修改EF文件中已有的数据(6.2.14) UPDATE RECORD (00\04)DC 报文用命令APDU中给定的数据更改指定的记录(6.2.15)VERIFY 00 20 用于校验命令数据域中的个人密码的正确性(6.2.16)(1)CHANGE PIN(修改个人密码) 80 5E 01 00 (5.2.2)CREDIT FOR LOAD(圈存) 80 52 00 00 (5.2.3)DEBIT FOR PURCHASE/CASH WITHDRAW(消费/取现) 80 54 01 00 (5.2.4)DEBIT FOR UNLOAD(圈提) 80 54 03 00 (5.2.5)GET BALANCE(读余额) 80 5C 00 0x (5.2.6)GET TRANSACTION PROVE(取交易认证) 80 5A 00 xx (5.2.7)INITIALIZE FOR CASH WITHDRAW(取现初始化) 80 50 02 01 (5.2.8)INITIALIZE FOR LOAD(圈存初始化) 80 50 00 0x (5.2.9)INITIALIZE FOR PURCHASE(消费初始化) 80 50 01 0x (5.2.10)INITIALIZE FOR UNLOAD(圈提初始化) 80 50 05 01 (5.2.11)INITIALIZE FOR UPDATE(修改初始化) 80 50 04 01 (5.2.12)RELOAD PIN(重装个人密码) 80 5E 00 00 (5.2.13)UPDATE OVERDRAW LIMIT(修改透支限额) 80 58 00 00 (5.2.14)(2) 2.2State ReturnedSw1 sw2 meaning 性质61 xx 正常处理62 00 无信息提供警告62 81 回送数据可能出错警告62 82 文件长度<Le62 83 选择文件无效警告63 00 认证失败警告63 cx 使用内部重试程序更新成功警告64 00 状态位未变错误65 81 内存错误错误67 00 Lc长度错误错误68 82 不支持安全报文错误69 00 不能处理69 01 命令不接受(无效状态) 错误69 81 命令与文件结构不相容错误69 82 不满足安全状态错误69 83 认证方法锁定错误69 84 引用数据无效错误69 85 使用条件不满足错误69 86 不满足命令执行的条件(非当前EF) 错误69 87 安全报文数据项丢失错误69 88 安全报文数据项不正确错误6A 80 数据域参数不正确错误6A 81 不支持此功能警告6A 82 文件未找到错误6A 83 未找到记录错误6A 84 文件中存储空间不够错误6A 86 参数P1 P2不正确错误6A 88 未找到引用数据错误6B 00 参数错误(偏移地址超出了EF) 错误6C xx 长度错误(Le不正确,xx表示实际长度) 错误6D 00 INS不支持或错误错误6E 00 CLA不支持或错误错误6F 00 数据无效错误93 02 MAC无效错误93 03 应用永久锁定警告\错误(block\unblock)94 01 金额不足错误94 03 密钥索引不支持错误94 06 所需MAC不可用错误37816 指令参考(7816-4)3.1基本指令command CLA INF 说明READ BINARY 00 B0 (6.1)WRITE BINARY command 00 D0 (6.2)UPDATE BINARY command 00 D6 (6.3)ERASE BINARY command 00 0E (6.4)READ RECORD(S) command 00 B2 (6.5)WRITE RECORD command 00 D2 (6.6)APPEND RECORD 00 E2 (6.7)UPDATE RECORD command 00 DC (6.8)GET DATA command 00 CA (6.9)PUT DATA command 00 DA (6.10)SELECT FILE command 00 A4 (6.11)VERIFY command 00 20 (6.12)INTERNAL AUTHENTICA TE command 00 88 (6.13)EXTERNAL AUTHENTICATE command 00 B2 (6.14)GET CHALLENGE command 00 B4 (6.15)MANAGE CHANNEL command 00 70 (6.16)3.2State ReturnedSw1 sw2 meaning62 00 No information is given62 81 Part of returned data may be corrupted62 82 End of file reached befeore reading Le bytes62 83 Selected file invalidated62 84 FCI not formatted according to 5.1.562 CX Counter (successful writing, but after using an internal retry routine. 'X'!='0'indicates the number of retries: 'X'='0' means that no counter is provided)63 00 No information given (verification failed)63 CX Counter (successful storing, but after using an internal retry routine, 'X'!='0'indicates the number of retries. 'X'='0' means that no counter is provided65 81 Memory failure (unsuccessful writing)67 00 Wrong length (wrong Le field)69 81 Command incompatible with file structure69 82 Security status not satisfied69 83 Authentication method blocked69 84 Referenced data invalidated69 85 Conditions of use not satisfied69 86 Command not allowed (no current EF)6A 80 Incorrect parameters in the data field6A 81 Function not supported6A 82 File not found6A 83 Record not found6A 84 Not enough memory space in the file6A 85 Lc inconsistent with TLV structure6A 86 Incorrect parameters P1-P26a 87 Lc inconsistent with P1-P26A 88 Referenced data (data objects) not found6B 00 Wrong parameters (offset outside the EF)6C XX Wrong length (wrong Le field: 'XX' indicates the exact length)。