智能卡APDU的命令格式及其分析
- 格式:doc
- 大小:17.50 KB
- 文档页数:7
APDU(Application Protocol Data Unit)是应用协议数据单元,用于在智能卡和智能卡应用之间传输数据。
APDU 是命令/响应协议的数据单元,包含命令、数据和状态信息。
APDU 的结构包括:
命令字节:用于标识APDU 命令的类型,如CLA(Class)字节。
长度字节:用于表示APDU 的长度,包括命令字节和数据字节的总长度。
数据字节:包含实际要传输的数据,可以是参数或命令中的数据。
状态字节:用于表示响应的状态信息,例如成功或失败状态。
APDU 的命令/响应结构包括:
命令格式:包含APDU 命令字节和数据字节,用于向智能卡发送指令和数据。
响应格式:包含APDU 状态字节,用于返回响应状态信息。
APDU 的数据域可以有不同的长度,根据实际情况而定。
如果数据域为空,则APDU 只包括头标。
根据应用协议的规定,不同的APDU 命令有不同的命令码和参数格式。
以上内容仅供参考,如需更准确全面的信息,可以咨询银行智能卡相关技术领域的专业人员或查阅相关技术手册。
智能卡APDU命令格式及分析数据结构APDU命令CLA INS P1 P2 Lc Data Le其中CLA为指令类别;INS为指令码;P1、P2为参数;Lc为Data的长度;Le 为希望响应时回答的数据字节数的最大可能长度。
一命令分类:COS命令由具体应用分为4种命令报文结构如下:① 情形1CLA INS P1 P2 00② 情形2CLA INS P1 P2 Le③ 情形3CLA INS P1 P2 Lc Data④ 情形4CLA INS P1 P2 Lc Data Le二响应报文1)响应结构响应数据响应状态码Data SW1 SW1DATA:返回给用户的数据,即命令的执行结果。
SW1、SW2:返回命令处理的状态。
三命令集1) Read Binary功能:此命令用于读取二进制文件部分或全部的内容。
CLA 00INS B0P1 见参数说明P2 从文件中读取的第一字节的偏移地址Le 期望读出数据的长度2) Update Binary功能:此命令使用给定的数据来更新二进制文件部分或全部的内容。
CLA 00INS D6P1 见参数说明P2 要修改的第一字节的偏移地址Lc 后续数据域的长度Data 修改用的数据3) Read Record功能:此命令用于读取记录文件中指定记录的内容。
CLA 00INS B2P1 记录号P2 见参数说明Le 期望读出数据的长度4) Update record功能:此命令使用给定的数据来更新记录文件中指定记录的内容。
当所指定的文件非记录文件时,命令将终止。
CLA 00INS DCP1 P1= 00 表示当前记录P1≠ 00 表示指定的记录号P2 见参数说明Lc 后续数据域的长度Data 更新原有记录的新记录5) Verify PIN功能:此命令将校验给定的密码的正确性,根据比较的结果修改安全状态,若校验失败次数达到PIN尝试上限,则PIN自动锁定。
CLA 00INS 20P1 00P2Lc 02 ~ 10Data 外部输入的个人密码6) Select File功能:此命令使用文件名或应用标示符来选择IC卡内DF或EF。
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(获取处理选项)通用指令是电子钱包、电子存折、电子现金都支持的,但是针对不同的应用,某些指令的具体参数细节可能略有差异,可参照相关规范。
APDU命令CLA INS P1 P2 Lc Data Le其中CLA为指令类别;INS为指令码;P1、P2为参数;Lc为Data的长度;Le为希望响应时回答的数据字节数的最大可能长度。
一命令分类:COS命令由具体应用分为4种命令报文结构如下:① 情形1CLA INS P1 P2 00② 情形2CLA INS P1 P2 Le③ 情形3CLA INS P1 P2 Lc Data④ 情形4CLA INS P1 P2 Lc Data Le 二响应报文1)响应结构响应数据响应状态码Data SW1 SW1DATA:返回给用户的数据,即命令的执行结果。
SW1、SW2:返回命令处理的状态。
三命令集1) Read Binary功能:此命令用于读取二进制文件部分或全部的内容。
CLA 00INS B0P1 见参数说明P2 从文件中读取的第一字节的偏移地址Le 期望读出数据的长度2) Update Binary功能:此命令使用给定的数据来更新二进制文件部分或全部的内容。
CLA 00INS D6P1 见参数说明P2 要修改的第一字节的偏移地址Lc 后续数据域的长度Data 修改用的数据3) Read Record功能:此命令用于读取记录文件中指定记录的内容。
CLA 00INS B2P1 记录号P2 见参数说明Le 期望读出数据的长度4) Update record功能:此命令使用给定的数据来更新记录文件中指定记录的内容。
当所指定的文件非记录文件时,命令将终止。
CLA 00INS DCP1 P1= 00 表示当前记录P1≠ 00 表示指定的记录号P2 见参数说明Lc 后续数据域的长度Data 更新原有记录的新记录5) Verify PIN功能:此命令将校验给定的密码的正确性,根据比较的结果修改安全状态,若校验失败次数达到PIN尝试上限,则PIN自动锁定。
CLA 00INS 20P2Lc 02 ~ 10Data 外部输入的个人密码6) Select File功能:此命令使用文件名或应用标示符来选择IC卡内DF或EF。
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’表示没有信息被给出,在发出命令之前引用的算法为已知,或在数据字段中提供。
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)。
apdu select指令APDU(Application Protocol Data Unit)是应用层协议数据单元的缩写,它是指在智能卡与读卡器之间进行通信时所使用的数据单元。
而在智能卡与读卡器之间的通信中,APDU select指令是一种重要的指令,用于选择特定的应用或文件。
APDU select指令用于在智能卡上选择应用或文件,其格式如下:CLA INS P1 P2 Lc Data Le其中,CLA(Class)字段用于指示指令的类型;INS(Instruction)字段用于指示具体的操作;P1(Parameter 1)和P2(Parameter 2)字段用于传递额外的参数;Lc(Length of command)字段用于指示数据域的长度;Data字段用于传递数据;Le(Length of expected data)字段用于指示期望的返回数据的长度。
APDU select指令的INS字段为0xA4,表示选择操作。
而具体选择的应用或文件则通过P1和P2字段来指定。
例如,选择一个应用时,P1和P2字段可以指定应用的AID(Application Identifier);选择一个文件时,P1和P2字段可以指定文件的标识符。
选择应用的APDU select指令示例为:00 A4 04 00 Lc Data其中,00表示标准指令;A4为INS字段,表示选择操作;04和00分别为P1和P2字段,用于指定选择的应用;Lc为Data字段的长度;Data为应用的AID。
选择文件的APDU select指令示例为:00 A4 00 00 Lc Data其中,00表示标准指令;A4为INS字段,表示选择操作;00和00分别为P1和P2字段,用于指定选择的文件;Lc为Data字段的长度;Data为文件的标识符。
在使用APDU select指令时,需要注意以下几点:1. 应用或文件的AID或标识符需要提前了解或获取,以便正确指定选择的对象;2. 如果选择的应用或文件不存在,则会返回相应的错误码;3. 如果选择的应用或文件存在多个匹配项,则通常选择第一个匹配项;4. 在选择应用或文件之前,通常需要进行卡片复位操作。
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格式解析的过程。
apdu select指令摘要:1.简介2.APDU(应用层协议数据单元)3.APDU select 指令4.指令结构5.应用场景6.结论正文:1.简介APDU select 指令是智能卡(Smart Card)通信中常用的一种指令,用于从智能卡中读取或写入数据。
它属于APDU(应用层协议数据单元)指令族的一员,应用在ISO/IEC 7816 协议中。
2.APDU(应用层协议数据单元)APDU 是智能卡通信中的基本数据单元,用于在智能卡与外部设备之间传递信息。
它包含了应用层协议的命令和响应数据,以及与数据传输相关的附加信息。
3.APDU select 指令APDU select 指令用于选择特定的文件或应用,以便进一步执行读取或写入操作。
它的主要功能是从智能卡中获取数据,或者将数据写入智能卡。
4.指令结构APDU select 指令的基本结构如下:起始字符(Start of File Identifier,SOFI)文件标识符(File Identifier,FID)保留字(Reserved,RES)数据长度(Data Length,DL)数据(Data,D)校验和(Check Sum,CS)结束字符(End of File Identifier,EOFI)其中,文件标识符用于指定要访问的文件,数据长度表示实际传输数据的字节数,数据则是具体的读取或写入内容。
5.应用场景APDU select 指令广泛应用于智能卡的各类应用场景,如金融、通信、医疗等。
例如,在金融领域,它可用于从智能卡中读取余额信息;在通信领域,它可用于从智能卡中读取套餐信息;在医疗领域,它可用于从智能卡中读取患者信息等。
6.结论APDU select 指令作为智能卡通信中的重要组成部分,为各类应用场景提供了便捷的数据读取和写入功能。
pdu指令应答解析
APDU(Application Protocol Data Unit)指令是智能卡应用中的通信单位,用于在终端和智能卡之间传递命令和数据。
APDU指令有两种类型:命令APDU和响应APDU。
命令APDU由以下四个部分组成:
CLA(1 byte):指令的类型,表示命令的类别。
INS(1 byte):指令码,表示具体的指令。
P1(1 byte):对指令的补充说明。
P2(1 byte):对指令的补充说明。
Lc(1 byte或3 bytes):数据长度,表示数据域的长度,可以为1 byte 或3 bytes,根据具体的指令而定。
Data field(0~65535 bytes):数据域,表示需要传输的数据。
Le(1 byte或2 bytes):期望的响应长度,可以为1 byte或2 bytes,
根据具体的指令而定。
响应APDU由以下三个部分组成:
DATA(0~65535 bytes):响应数据域,表示指令执行后返回的数据。
SW1(1 byte):状态字1,表示指令执行的状态。
SW2(1 byte):状态字2,表示指令执行的状态。
APDU指令的应答解析需要根据具体的指令和协议进行解析。
一般来说,响应APDU的状态字1和状态字2组合在一起表示了指令执行的结果,根据状态字的不同可以判断指令是否执行成功以及出错的原因。
同时,响应APDU的数据域中也可能包含指令执行后返回的数据,需要根据具体的指令和协议进行解析。
一条命令APDU含有一个头标和一个本体。
本体可有不同长度,或者在相关数据字段为空时,整个可以不存在。
头标由四个数据元组成,它们是类CLA(ClAss)字节,命令INS(INStructic,n)字节和两个参数Pl和P2 (Parameters 1 and 2)字节,如图1所示。
类字节仍旧用于识别应用和它们专有的命令组。
例如,GSM使用类字节‘AO’,而代码‘8X’则最常用于公司专用(私用)命令。
相反,基于ISO的命令都用类字节‘OX’ 编码。
标准另外规定了类字节用于识别安全报文和逻辑通道。
虽然如此,仍然和前面所述把类字类当做应用识别符使用是相容的。
类字节的编码参见表1和表2图1 命令APDU的结构表1 按照ISO/IEC 7816-4的最重要的类别字节(CLA)的编码在命令APDU中的下一个字节是指令字节,它对实际的命令编码。
这个字节的几乎全部的地址空间都可以使用,而惟一的限制是只可以使用偶编码。
这是因为T=0协议允许在回送的命令字节中用把先前的字节增量1来激活可编程电压。
因此,命令字节永远是偶数的。
表2 关于类字节的适用概况的补充说明两个参数字节主要用来提供更多的关于指令字节选择命令的信息。
于是,它们主要用来作为命令不同选项的选择开关。
例如,把它们用来选择SELECT FLE的不同选项或是规定READ BINARY的区距。
接着头标的下一段是本体,除有了长度规定之外,它可以被略去,本体承担了双重角色。
首先,它规定了送给卡的数据部分的长度(在Lc字段),以及由卡回送的数据部分的长度(在Le字段)。
其次,它含有发送给卡的有关命令的数据。
如果Le字段之值为‘00’,则终端期待着卡传送这条命令最大可用数量的数据,这是关于长度的数值规定的惟一例外。
Le和L字段通常为1字节长。
然而能够把它们转换为每个有3字节长的字段,这样可用来表示高达65 536的长度,因为第1字节中含有扩展符序列‘∞’,参见图2。
标准已经规定这个三字节长度的规格是为将来的应用的,但由于目前可用存储器大小的限制这一点尚未能实现。
APDU命令信息APDU有四种情况:1.无命令数据,无应答数据2.无命令数据,有应答数据3.有命令数据,无应答数据4.有命令数据,有应答数据Lc :命令体内的数据长度Data:要发送的数据Le:期望中的应答APDU命令数据字段的字节数Le=0 请求送回最大应答数据字节数Licc:IC卡在响应接收到的情况2或情况4命令时卡内有效或剩余的数据(由IC卡决定)的实际长度T=0时IC卡返回数据的方式:当向IC卡发送的命令需要返回结果时即情况二,四,需要两种情况:1.Le正确时:(Le<Licc )向卡发命令,卡先返回61XX,此处XX代表实际应返回的数据的长度,此时再向卡发送GETRESPONSE命令,其中Le置为XX,卡最后返回XX长度的数据。
(Le=Licc )在INS、INS 或‗60‘及相关过程字的控制下返回长度为Le(=Licc)的数据2.Le不正确时(Le=‗00 (数据长度不是256)或Le>Licc):向卡发命令,卡先返回6CXX,此处XX代表实际应返回的数据的长度,此时再向卡重发该命令,其中Le置为XX,卡最后返回XX长度的数据。
理解机卡通讯的过程。
举例。
****************************************************************** **************>> IDF:80 32 00 00 74 80 30 71 11 02 B2 66 1B 50 84 FD.....### 我有一个数据0x74 个字节,属于安全报文,帮忙解一下。
<<IC: 61 25### 共解出 0x25 个字节(即37 字节)>> IDF: 00 C0 00 00 25### 那就拿来吧。
<< ret:1, wReplyLen:39,reply: 02 B2 84 03 00 01 02 B4 04 00 00 00 00 83 16 9F 66...### 给你。
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的响应报文:2.WRITE 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个字节的偏移。
如果在P1中b8=1,则P1的b7和b6显示0(RFU若干位), P1的b5至b1是短EF标识符,并且P2是在从文件开始的数据单元中被写的第1个字节的偏移。
如果在P1中b8=0,则P1_P2是在从文件开始的数据单元中被写的第1个字节的偏移。
如果数据字段呈现,它编码不被擦除的第1个数据单元的偏移,该偏移应大于在P1 —P2中编码的一个偏移,当数据字段为空时,该命令擦除到该文件的结束端。
ERASE BINARY的响应报文:5.READ RECORD命令报文:READ RECORD的响应报文:7.APPEND RECORD命令报文:GET DATA的响应报文:10.PUT DATA命令报文:11.SELECT FILE命令报文:SELECT FILE的响应报文:VERIFY的响应报文:13.INTERNAL AUTHENTICATE命令报文:INTERNAL AUTHENTICATE的响应报文:说明:P1=‘00’表示没有信息被给出,在发出命令之前引用的算法为已知,或在数据字段中提供。
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命令集通用指令是电子钱包、电子存折、电子现金都支持的,但是针对不同的应用,某些指令的具体参数细节可能略有差异,可参照相关规范。
智能卡APDU命令格式及分析
数据结构
APDU命令
CLA INS P1 P2 Lc Data Le
其中CLA为指令类别;INS为指令码;P1、P2为参数;Lc为Data的长度;Le 为希望响应时回答的数据字节数的最大可能长度。
一命令分类:
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.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文件的读取。