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

时间:2015-07-04 10:22:24

标签: smartcard apdu smartcard-reader contactless-smartcard

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

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

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

永远不要使用ATQ!仅对非14443-4卡使用SAK(例如Mifare Classic)! 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)

当然每个层之间必须有一些接口。

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

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

CardProtocol level =>上的

错误没有兼容卡

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

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