ATS(Answer-to-Select)通过非接触式或 NFC 与 ATR(Answer-to-Reset)通过接触卡的区别

Posted

技术标签:

【中文标题】ATS(Answer-to-Select)通过非接触式或 NFC 与 ATR(Answer-to-Reset)通过接触卡的区别【英文标题】:Difference between ATS(Answer-to-Select) via Contactless or NFC vs ATR (Answer-to-Reset) via Contact Card 【发布时间】:2020-07-01 03:45:24 【问题描述】:

在非接触式和接触式读卡器上的同一张卡中,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 的读者翻译?)。


编辑:补充研究

有一些相关的问题开始讲述这个故事:

    Determine card type from ATR

详细说明ATRATQ-AATQ-B之间的转换过程,同时

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

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

我也在 PN532 屏蔽上测试了 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】:

这是一个复杂的问题。

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

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

【讨论】:

以上是关于ATS(Answer-to-Select)通过非接触式或 NFC 与 ATR(Answer-to-Reset)通过接触卡的区别的主要内容,如果未能解决你的问题,请参考以下文章

iOS ATS问题(补充中)

ats 安全

ats 反向代理和重定向

4Gwifi无线远程非接触红外测温传感器mqtt/http推送数据

4Gwifi无线远程非接触红外测温传感器mqtt/http推送数据

ATS回环检测