智能卡通信标准

8

ISO 14443-3和ISO 7816-4 APDUs有什么区别呢? 我问这个问题是因为似乎有些卡使用前者与读卡器通信,有些则使用后者。 我对此感到困惑,希望能够更好地理解这一点。 例如,我认为Mifare Classic使用ISO 14443-3。但让我困惑的是, 当我编写与Mifare Classic通信的应用程序时,我曾经向它发送APDUs。

2个回答

15
ISO 14443标准定义了卡片和读卡器之间的物理RF传输协议(例如,请参见http://www.openpcd.org/ISO14443 进行快速概述)。它标准化了奇偶校验位、CRC算法、帧大小、确认机制等内容。实际上有两种不同类型的通信被定义:Type A 和 Type B。这主要是历史原因:在标准定义之前市场上存在不同类型的产品,这些产品或多或少对应于 ISO 14443 第3部分中的 Type A 和 Type B。
标准的第4部分本质上定义了一个通信层,使得一种常见的通信方式变得可能。通常情况下使用的是 ISO 7816-4,尽管还有一些非接触式卡片(例如 MIFARE DESFire 和 MIFARE Plus)也使用自己的本地命令结构。
ISO 7816是一系列接触式智能卡标准。第4部分标准化了命令响应格式和许多命令:APDU。这创造了这样的情况,从软件角度来看,与接触式智能卡读卡器和非接触式智能卡读卡器通信没有实质性区别。在这两种情况下,软件都可以使用APDU与智能卡通信。因此,许多实现智能卡读卡器支持的软件库使用APDU作为与卡片的基本通信单元。
这非常方便,但事实上有些流行的非接触式卡,如MIFARE Classic不理解APDU(因为它们甚至不支持ISO 14443-4)。因此,非接触式智能卡读卡器制造商创建了一种“虚拟”APDU格式(使用APDU中的专有类字节)来解决这个问题。读卡器固件(或PC上的驱动程序)拦截C-APDU并将其转换为适当的MIFARE Classic命令,并将卡片响应转换为R-APDU。通过这种方式,软件开发人员可以使用其首选的智能卡通信库,并仍然与MIFARE Classic卡进行通信。
MIFARE DESFire卡提供了类似的机制,但实际上是卡本身管理APDU的翻译,从而将其转换为其本地命令集。这是因为该卡使用ISO 14443-4通信。
一个漂亮的信息图表展示了许多非接触式智能卡和NFC标准及其规范之间的关系,可以在http://open-nfc.org/documents/PRE_NFC_0804-250%20NFC%20Standards.pdf找到。
有关更多智能卡标准的概述,请参见例如http://www.smartcardbasics.com/smart-card-standards.html这个问题也可能提供相关信息。

感谢 NFC 专家,现在我或多或少地理解了这些东西。1. 所以每个读卡器都将 APDU 翻译为 Mifare 命令,是吗?但这如何反映在互操作性上呢?如果我使用特定的 APDU 来与 Mifare Classic 通信,那么我能否使用相同的 APDU 但不同的读卡器来与 Mifare Classic 进行通信呢? - user2568508
此 APDU 转换并未标准化,据我所知,在其他读卡器上可能会失败。 - NFC guy
我想借此机会再问您一个问题:Mifare Plus 和 Desfire EV,哪个更容易实现? - user2568508
如果您正在从现有的MIFARE Classic系统迁移,我建议使用MIFARE Plus。在所有其他情况下,我建议使用DESFire EV1。 - NFC guy
那么,Ultralight C 怎么样?无论如何,现在我看看,我认为首先我应该看看我拥有的读卡器(不是吗?)看看它对某些特定的 Mifare 卡有什么样的支持(例如 SDK 等),好或坏。然后再看看如何实现它,这不是一般的指导方针吗?(附言:这是新系统,不是迁移) - user2568508

0

实际上,14443-3对应于7816-3,因为我们在这里讨论的是协议问题。Mifare卡(作为简单的存储卡)不理解APDU。为了让它们通过PCSC进行寻址,读卡器驱动程序提供了APDU(这些APDU并没有标准化,因此可能对不同的读卡器品牌有所不同)。这些APDU不会传递给卡片,而是由读卡器或其驱动程序选择和解释。还有一类智能卡基于14443协议使用T-CL协议理解真正的APDU,例如符合ICAO标准的旅行文件。


嗯...好的,我使用ACR122U读卡器的手册来组装APDU命令,以便向读卡器发送与Mifare Classic通信的命令。但是,我使用这些APDU命令通过Omnikey读卡器与Mifare Classic进行通信,它仍然可以正常工作,因此似乎这两个读卡器使用了相同的APDU格式,对吧? - user2568508
你这次很幸运,这就是为什么我写了“可能不同”的原因。(制造商可能足够聪明以收敛。)但从技术角度来看,它们可能完全不同,因为它们不依赖于卡片。 - guidot
谢谢guidot。你能告诉我在哪里可以学到更多关于这个话题的知识吗?(例如,你所描述的基本上是什么)。我在Mifare上做了一点编程,但你所说的信息对我来说是新的,所以我想要深入了解事情的运作方式。另外,我看过的大多数与Mifare Classic通信的示例似乎使用类似的APDU - 所以也许对于Classic来说,这些APDU大多数都是相同的。 - user2568508

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接