T0协议下智能卡区分Case2/Case3 APDU头及INS值限制的疑问
ISO/IEC 7816-3 T0协议常见问题解析
1. 卡片如何判断P3(如示例中的EE)对应Case2/Case3/Case4类型?
卡片无法仅通过P3的数值判断其含义,核心依赖INS命令的预定义规则,结合P1/P2参数确定:
- 每个支持的INS命令(由卡片应用层如ISO7816-4定义)都明确了自身支持的APDU Case类型。例如SELECT命令(INS=A4)会根据P1/P2的取值,区分是Case2(仅请求返回数据)还是Case4(先发送数据再请求返回);
- 若INS命令定义为Case2,则P3表示
Le(期望返回的数据长度,00代表请求最大长度); - 若定义为Case3,则P3表示
Lc(需要发送的数据长度); - 若定义为Case4,则P3先表示
Lc(待发送的数据长度),阅读器发送完对应长度的数据后,卡片会根据命令规则处理后续的Le(返回数据长度要求)。
2. 为何6X和9X不能用作INS值?
这是为了彻底避免过程字节的歧义:
- T0协议中,
6X(非60)和9X被定义为响应状态的SW1字节,阅读器收到这类字节后会等待对应的SW2; - 若INS取值为
6X或9X,当卡片返回INS或INS^FF作为ACK(确认字节)时,阅读器会误将其识别为SW1,进而等待SW2而非发送剩余数据,直接导致通信中断; - 禁止这类取值,是确保ACK字节与SW1字节的取值范围完全隔离,让阅读器能准确区分过程字节的类型。
3. APDU与TPDU的关系
两者是不同层级的协议单元:
- APDU(应用协议数据单元):是应用层(如ISO7816-4)定义的逻辑命令/响应格式。命令APDU包含
CLA-INS-P1-P2-[Lc]-[Data]-[Le],响应APDU包含[Data]-SW1-SW2,用于定义应用层面的操作指令和结果; - TPDU(传输协议数据单元):是传输层(如T0协议)实际传输的字节块。T0协议通过TPDU的分段交互(如阅读器发送5字节命令头、卡片返回过程字节、阅读器发送数据块等),实现APDU的完整传输。简单来说,APDU是要传递的“内容”,TPDU是传递内容时用的“运输包装”。
内容的提问来源于stack exchange,提问作者E...
相关产品推荐
相关产品推荐

