智能卡通信标准
Posted
技术标签:
【中文标题】智能卡通信标准【英文标题】:Standards for smartcard communication 【发布时间】:2013-10-03 07:22:44 【问题描述】:ISO 14443-3 和 ISO 7816-4 APDU 有什么区别? 我问这个是因为似乎有些卡使用前者与读卡器通信,有些卡使用后者。 我对此感到困惑,想对此有一个很好的了解。 例如,我认为 Mifare Classic 使用 ISO 14443-3。但这里让我感到困惑的是 当我编写与 Mifare classic 通信的应用程序时,我正在向它发送 APDU。
【问题讨论】:
【参考方案1】:ISO 14443 标准定义了用于卡和读卡器之间通信的物理 RF 传输协议(例如,请参阅 http://www.openpcd.org/ISO14443 以获得快速概述)。它将奇偶校验位的使用、CRC 算法、帧大小、确认机制等标准化。基本上定义了 2 种不同类型的通信:A 类和 B 类。其原因很大程度上是历史原因:有不同种类的通信在标准定义之前市场上的产品,或多或少对应于 ISO 14443 第 3 部分中的 A 类和 B 类。
该标准的第 4 部分实质上定义了一个通信层,在该层之上,一种通用类型的通信成为可能。这通常是 ISO 7816-4,尽管有非接触式卡(例如 MIFARE DESFire 和 MIFARE Plus)(也)使用它们自己的本机命令结构而不是这个。
ISO 7816 是一组接触式智能卡标准。 Part 4 标准化命令响应格式和许多命令:APDU。这造成了从软件的角度来看,与接触式智能卡读卡器和非接触式读卡器进行通信之间没有真正区别的情况。在这两种情况下,软件都可以使用 APDU 与智能卡进行通信。许多实现智能卡读卡器支持的软件库都使用 APDU 作为与卡的基本通信单元。
这非常方便,除了一些流行的非接触式卡(例如 MIFARE Classic)不支持 APDU(因为它们甚至不支持 ISO 14443-4)。因此非接触式读卡器制造商创建了一种“虚拟”APDU 格式(在 APDU 中使用专有的 Class 字节)来解决这个问题。读卡器固件(或 PC 上的驱动程序)拦截 C-APDU 并将它们转换为正确的 MIFARE Classic 命令,并将卡响应转换为 R-APDU。通过这种方式,软件开发人员可以使用他们首选的智能卡通信库,并且仍然可以与 MIFARE Classic 卡进行通信。
MIFARE DESFire 卡提供了类似的机制,但实际上是卡本身管理着 APDU 与其本机命令集之间的转换。这可能是因为该卡使用 ISO 14443-4 通信。
可以在http://open-nfc.org/documents/PRE_NFC_0804-250%20NFC%20Standards.pdf 找到一个很好的信息图,其中显示了许多非接触式智能卡和 NFC 标准和规范之间的关系。
有关更多智能卡标准的概述,请参阅例如http://www.smartcardbasics.com/smart-card-standards.html。 This question也可以提供相关信息。
【讨论】:
谢谢 NFC 的家伙。我现在或多或少地理解了这些事情。 1. 那么每个阅读器都将 APDU 转换为 Mifare 命令是真的吗?但这如何反映在互操作性上?如果我使用特定的 APDU 集与 Mifare classic 对话,我能否使用相同的 APDU 但不同的阅读器与 Mifare Classic 对话? 这个 APDU 翻译不是标准化的,AFAIK,所以它可能会在另一个阅读器上失败。 我将借此机会再问您一个问题:Mifare Plus 哪个更容易实现?还是 Desfire EV? 如果您要从现有的 MIFARE Classic 系统迁移,我建议您使用 MIFARE Plus。在所有其他情况下,我会推荐 DESFire EV1。 Ultralight C 怎么样?无论如何,现在我看到它,我想首先我应该看看我拥有的阅读器(不是吗?)看看它对某些特定的(好或坏)有什么样的支持(例如,SDK 等)米法卡。再看看怎么实现,这不是一般的指导方针吗? (ps.这是新系统,不是迁移)【参考方案2】:实际上 14443-3 对应于 7816-3,因为我们在这里讨论的是协议问题。 Mifare 卡(作为简单的存储卡)不理解 APDU。为了让它们完全通过 PCSC 进行寻址,读卡器驱动程序提供了 APDU(它们不是标准化的,因此对于不同的读卡器品牌可能有所不同)。这些不会传递给卡,而是由阅读器或其驱动程序选择和解释。还有一系列智能卡使用 T-CL 协议在 14443 基础上理解真正的 APDU,例如符合 ICAO 标准的旅行证件。
【讨论】:
hm... 好的,我使用 ACR122U 阅读器的手册来组装 APDU 命令以发送给阅读器以与 Mifare Classic 通信。但后来我使用这些 APDU 使用 Omnikey 阅读器与 Mifare Classic 通信 - 它仍然有效,所以这两个阅读器似乎碰巧使用常见的 APDU 格式,对吧? 这次你很幸运,这就是我写“可能不同”的原因。 (制造商可能足够聪明,可以融合。)但从技术角度来看,它们可能完全不同,因为它们不依赖于卡。 感谢 guidot。您能告诉我在哪里可以了解有关此主题的更多信息吗? (例如,您基本上描述的内容)。我在 Mifare 上做了一些编程,但你说的这个信息对我来说是新的,所以我想知道那里的事情是如何发生/工作的。附言。我在 SO 上看到的大多数与 Mifare Classic 通信的示例似乎都使用类似的 APDU - 所以对于 Classic,这些 APDU 可能大部分恰好是相同的以上是关于智能卡通信标准的主要内容,如果未能解决你的问题,请参考以下文章
合作式智能运输系统-车用通信系统应用层及应用数据交互标准 第一阶段2020