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

How do I distinguish different ISO 14443-4 cards?

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

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

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

在连接协议期间会交换一些参数,您可以使用这些参数来确定卡的功能。例如,SAK 字节将通知 reader 卡是否为 ISO 14443-4,即使它是 MIFARE Plus(有一份 NXP 文档解释了您必须阅读哪些位)。 然后你有 ATS (Answer To Select),它包含很多关于卡片的有用信息。查看 ISO 14443-4 和 ISO 7816-4。

切勿使用 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)

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

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

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

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

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

P.S。还有一些更复杂的情况,例如 "one app over two protocols/types of cards" 但它们也可以轻松处理。