【问题标题】:How do I distinguish different ISO 14443-4 cards?如何区分不同的 ISO 14443-4 卡?
【发布时间】:2015-07-04 10:22:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: smartcard apdu smartcard-reader contactless-smartcard


    【解决方案1】:

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

    【讨论】:

    • 是的,我知道,但是在 Mifare Plus 卡中可以更改 ATS,因此它不是 100% 可靠的。而且我怀疑可能存在具有相同 SAK 的其他卡(不是 Mifare 系列)。 NXP 建议仅评估 SAK 的第 6 位,以查看该卡是否支持 ISO 14443-4 并忽略其他位。
    • 可能最好的做法是实施“务实”的方法:首先使用 SAK 和 ATS(这样您将涵盖大多数卡)以及一些针对极端情况的测试命令。您的读卡器软件是否必须支持所有通用 Mifare Plus 卡,还是仅支持针对特定应用程序或服务的个性化卡?
    • 我认为处理个性化的就足够了,再加上个性化的新空白卡片。
    • 好的,我已经有了自己的答案。我认为 ISO 14443-4 的全部目的是提供一种与不同卡交换信息的通用方式。因此,为了区分卡片类型,需要使用卡片的数据表来发现行为的细微差异(即不同的命令集)。没有比这更聪明的方法了。
    • 没错——ISO 14443-4 定义了一个传输协议,但接下来由卡/应用程序实现者来设计什么命令。但是,ATS 仍然有一些有用的信息。例如,如果您身边有支持 NFC 的 Android 手机,您可以安装一个应用程序来快速查看此类信息。我通常使用 NXP 的 TagInfo。
    【解决方案2】:

    永远不要使用 ATQ!仅将 SAK 用于非 14443-4 卡(例如 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 级别错误 => 没有兼容的卡

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2014-05-11
      相关资源
      最近更新 更多