如何区分不同的ISO 14443-4卡?

Ale*_*kin 10 apdu smartcard smartcard-reader contactless-smartcard

有不同的智能卡支持ISO 14443-4.例如,Mifare Plus及其本机命令集.或其他具有不同命令集的卡(即7816-4 APDU).

我为读卡器开发了一些软件,我需要确定卡支持哪些命令(例如,它是否支持ISO 7816-4结构中的命令).

建议区分它们的方法是什么?我应该从Mifare Plus命令集中尝试一些命令并检查我是否得到正确的回复?或者有更聪明的方法吗?

mic*_*ter 8

在连接协议期间,会交换一些参数,您可以使用这些参数来确定卡的功能.例如,SAK字节将通知读卡器该卡是否为ISO 14443-4,即使它是MIFARE Plus(还有一个NXP文档说明您必须阅读哪些位).然后你有ATS(选择答案),它包含很多关于卡的有用信息.看看ISO 14443-4和ISO 7816-4.

  • 是的,我知道,但是 ATS 可以在 Mifare Plus 卡中更改,所以它不是 100% 可靠的。而且我怀疑可能存在具有相同 SAK 的其他卡(不是 Mifare 系列)。NXP 建议仅评估 SAK 的第 6 位,以查看该卡是否支持 ISO 14443-4 并忽略其他位。 (2认同)
  • 可能最好的行动方案是实施“务实”的方法:首先使用 SAK 和 ATS(因此您将涵盖大多数卡片)以及一些针对极端情况的测试命令。您的读卡器软件是否必须支持所有通用 Mifare Plus 卡,或仅支持针对特定应用程序或服务的个性化卡? (2认同)

Mar*_*ský 5

永远不要使用ATQ!仅对非 14443-4 卡(例如 Mifare Classic)使用 SAK!ATS 也是不好的做法,因为不同的卡供应商可以对其进行不同的设置。

现在怎么做:

唯一的方法是考虑卡片并且不要发疯,就是把它想象成一个完整的通信堆栈(参见 OSI 模型)。

请记住,您的目标是连接两个应用程序,一个在卡中,一个在您的计算机中。14443-4 提供了发送消息的机制并且不关心其内容。

最重要的是,有不同卡的实现接口,如果双方:卡 - 卡驱动程序兼容,它们将进行通信。否则,该级别将出现错误。所以你知道你需要使用不同的卡驱动程序。

完整的通信堆栈将如下所示:

  Your Application 
  |  CardProtocol/7816-4 
  |  |  14443-4 
  |  |  |  14443 
  |  |  |  |  radio waves 
  |  |  |  14443 (in card) 
  |  |  14443-4 (in card) 
  |  CardProtocol/7816-4 (in card) 
  Application/Appdata (in card)
Run Code Online (Sandbox Code Playgroud)

当然每一层之间都要有一些接口。

如果您有两个要通信的应用程序,请尝试一个,然后再尝试第二个。

应用程序级别错误 => 卡上没有兼容的应用程序

CardProtocol 级别的错误 => 没有兼容的卡

重点是您的通信必须在所有级别上都成功,所以不要担心尝试通过不兼容的协议与卡进行通信 - 如果您(奇迹般地)不会在 CardProtocol 级别上出错,那么您肯定会在应用程序级别上得到一个错误结果将是相同的。祝你好运!

PS 有一些更复杂的情况,例如“一个应用程序超过两种协议/类型的卡”,但它们也可以轻松处理。