ISO 7816-3 T=0是如何工作的?

8

我正在尝试理解发送APDU命令-响应对的通信。请问有人能简单地解释一下T=0是如何工作的吗?

APDU和TPDU有什么区别?

例如,命令头是CLA、INS、P1、P2和P3=0x20 32字节数据。卡片如何知道命令的第5个字节是Lc还是Le?卡片如何知道不需要期望任何命令数据,并且它如何知道读卡器是否期望在响应中接收数据?

还有一件事,过程字节在什么情况下参与到场景中?它是过程字节吗?或者说过程字节?卡片是否必须发送过程字节?


除非您正在尝试实现此协议,否则此问题与 [so] 无关。网上有许多资源可以帮助您。Google 是您的好朋友。 - user1864610
你应该一次只问一个问题。 - Jitendra
2
尽管第一条评论原则上是正确的,但我确实看到需要了解该协议才能开发智能卡。我真的不知道其他地方可以提出这个问题。没有(可能也不会有)智能卡相关的SE网站。 - Maarten Bodewes
3个回答

11

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则不包含过程字节。


根据https://cardwerk.com/iso-7816-4-annex-a-smart-card-standard/,看起来长的APDU可能会被分割成较短的T=0 TPDUs,也许在传输层面上,可以清楚地确定何时到达了一个未知APDU指令的结尾。 - undefined
是的,可以使用“命令/响应链”技术,你可以说这定义了将APDU分割为TPDU的过程。从宏观角度来看,你只会得到单独的APDU,通常你可能需要将它们分割和合并。请注意,这方面有多种实现方式,我曾经遇到过不兼容的情况。实际上,处理命令/响应链的内存需求是相当困难的。如果你有足够的内存,那么使用扩展长度会更有意义。 - undefined

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。


0
假设通信分为三部分: - PC到控制器(控制器有两个部分 - 一个连接到Rcontroller单元的MCU,通过i2c或SPI或UART和无线电控制器单元) - 控制器到无线电控制器(天线和无线电传输芯片) - 无线电控制器到目标或其他NFC设备。 APDU是PC到控制器的,TPDU是从控制器到无线电控制器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接