我正在尝试理解发送APDU命令-响应对的通信。请问有人能简单地解释一下T=0是如何工作的吗?
APDU和TPDU有什么区别?
例如,命令头是CLA、INS、P1、P2和P3=0x20 32字节数据。卡片如何知道命令的第5个字节是Lc还是Le?卡片如何知道不需要期望任何命令数据,并且它如何知道读卡器是否期望在响应中接收数据?
还有一件事,过程字节在什么情况下参与到场景中?它是过程字节吗?或者说过程字节?卡片是否必须发送过程字节?
我正在尝试理解发送APDU命令-响应对的通信。请问有人能简单地解释一下T=0是如何工作的吗?
APDU和TPDU有什么区别?
例如,命令头是CLA、INS、P1、P2和P3=0x20 32字节数据。卡片如何知道命令的第5个字节是Lc还是Le?卡片如何知道不需要期望任何命令数据,并且它如何知道读卡器是否期望在响应中接收数据?
还有一件事,过程字节在什么情况下参与到场景中?它是过程字节吗?或者说过程字节?卡片是否必须发送过程字节?
APDU是应用程序协议数据单元,TPDU是传输协议数据单元。如果为T=0定义了一个APDU命令响应对,而且它既有命令数据又有响应数据(情况4S),则会生成一个单独的TPDU来发送和接收数据(GET RESPONSE
)。请参见ISO/IEC 7816-3(2006)第12.2.1章。
卡片知道P3(第5字节)的含义,因为它是服务器。每个命令都应该被实现成只能有一个单一的含义。ISO/IEC 7816在这方面不符合OSI堆栈——各层之间并没有严格分离。这是ISO 7816的一个主要问题之一。
过程字节是T=0传输协议的一部分。它没有在应用程序协议中定义,尽管它可能映射到状态字的第一部分SW1。它仅用于指示接口设备(IFD)要执行什么操作。有关更多信息,请参见ISO/IEC 7816-3(2006)第10.3.3章。第10章定义了T=0,而T=1则不包含过程字节。
APDU是应用层协议数据单元,TPDU是物理层协议数据单元。 如果您向卡发送“00 84 00 00 08”,则卡可以响应“xx xx xx xx xx xx xx xx 90 00”。如果p3后面没有数据,则p3为le。否则,p3表示lc。 然而,我认为没有必要区分le和lc。