使用非接触式或NFC的ATS(答案选择)与使用接触式智能卡的ATR(复位回答)之间的区别

4
同一张双界面卡上的接触式和非接触式读卡器的ATSATR是否应该相同?对于双界面卡上运行的JavaCard应用,如果其响应不同的ATSATR,是否会影响该应用程序的执行? 这里有另一个相关问题: Difference between contact card and contactless(RF) card ,它似乎表明如果它们使用相同的传输协议,则它们可以是相同的。
举个具体的例子,我有一张JavaCard J3H145,它在非接触式读卡器和接触式读卡器上提供不同的ATR(通过pcsc_scan显示)。这是否意味着读卡器正在进行某些操作(例如 the Identiv 3700f )? 我有几个javacard应用程序在接触式读卡器上工作但在非接触式读卡器上不工作。当我通过pcscd跟踪ADPU时,一切都是Attempting PTS to T=1(这是否需要读卡器从T = CL进行转换?)。

编辑:附加研究

有一些相关问题可以开始讲述故事:

  1. Determine card type from ATR

详细说明了如何在ATRATQ-A以及ATQ-B之间进行转换的过程,而

  1. Smartcard with different historical bytes depending on interface
  2. How to change applet's privilege and the card Historical Bytes?

表明历史字节可以从GP API中更改(因此ATS/ATR可编辑),因此我认为有一种方法可以手动将它们修复为相同的。

我也在PN532 shield上测试了J3H145(测试我的特定读卡器转换),我得到了一个似乎被截断的 ATR: 3B 80 80 01 01 (ISO 14443 Type B without historical bytes),以及在接触式通信中(当一切正常时!)ATR: 3B DC 18 FF 81 91 FE 1F C3 80 73 C8 21 13 66 05 03 63 51 00 02 50 (JCOP3 SecID P60 CS (JavaCard))
为了完整起见,我试图在非接触界面上运行 https://github.com/ANSSI-FR/SmartPGP,目前这个在双界面卡上的接触式界面可以正常工作。是 ATR/ATS 的不同导致这个问题吗?
相关的SO问题:ATR command when programming PC/SC reader
1个回答

9

这是一个复杂的问题。

表面上看很简单的答案是:由于它们的格式完全不同,因此它们不能相同。ATR以3B / 3F开头,后跟T0、TAx / TBx / TCx / TDx(其中x在[1..4]中),最多15个历史字节和一个单字节校验和。根据您的卡是使用ISO 14443的A型还是B型进行通信,您将获得ATS或ATQB,它们具有不同的格式,但都以两个字节的校验和结尾。

现在事情变得复杂了,因为PCSC急需ATR,因此为非接触式读卡器创建了一个合成的ATR(通常由读卡器或驱动程序创建)。这个合成的ATR通常非常短(只符合格式),并且不会与ATR / ATS / ATQB有很大的相似之处。由于传输速率协商发生在读卡器和卡之间,因此对于应用程序而言,合成的ATR无关紧要。虽然读卡器将使用原始的ATS / ATQB进行冲突解决等操作,但您在主机上看不到它。友好的读卡器名称足以将信息传送到正确的读卡器接口。


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