ISO 14443-3 和 ISO 7816-4 APDU 有什么区别?我问这个是因为似乎有些卡使用前者与读卡器通信,有些卡使用后者。我对此感到困惑,想对此有一个很好的了解。例如,我认为 Mifare Classic 使用 ISO 14443-3。但这里让我感到困惑的是,当我编写与 Mifare classic 通信的应用程序时,我正在向它发送 APDU。
2 回答
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 是接触式智能卡标准的集合。第 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://www.smartcardbasics.com/smart-card-standards.html。这个问题也可能提供相关信息。
实际上 14443-3 对应于 7816-3 因为我们在这里讨论协议问题。Mifare 卡(作为简单的存储卡)不理解 APDU。为了让它们完全通过 PCSC 解决,读卡器驱动程序提供了 APDU(它们不是标准化的,因此对于不同的读卡器品牌可能有所不同)。这些不会传递给卡,而是由阅读器或其驱动程序选择和解释。还有一系列智能卡使用 T-CL 协议在 14443 基础上理解真正的 APDU,例如符合 ICAO 标准的旅行证件。