smartcard - 智能卡通信标准

标签 smartcard iso rfid mifare apdu

ISO 14443-3 和 ISO 7816-4 APDU 之间有什么区别? 我问这个是因为似乎有些卡使用前者与读卡器通信,有些卡使用后者。 我对此感到困惑,想对此有一个很好的了解。 例如,我认为 Mifare Classic 使用 ISO 14443-3。但让我困惑的是 当我编写与 Mifare classic 通信的应用程序时,我向它发送 APDU。

最佳答案

ISO 14443 标准定义了卡和读卡器之间通信的物理 RF 传输协议(protocol)(请参阅 http://www.openpcd.org/ISO14443 以获取快速概述)。它对奇偶校验位的使用、CRC 算法、帧大小、确认机制等进行了标准化。本质上定义了 2 种不同类型的通信:A 类和 B 类。其原因很大程度上是历史性的:存在不同类型的通信。标准定义之前市场上的产品,或多或少对应于 ISO 14443 第 3 部分中的 A 型和 B 型。

该标准的第 4 部分本质上定义了一个通信层,在该通信层之上,通用类型的通信成为可能。这通常是 ISO 7816-4,尽管有一些非接触式卡(例如 MIFARE DESFire 和 MIFARE Plus)也使用自己的 native 命令结构来代替它。

ISO 7816 是接触式智能卡标准的集合。 Part 4标准化命令响应格式和许多命令:APDU。这就造成了这样一种情况:从软件的角度来看,与接触式智能卡读卡器和非接触式智能卡读卡器的通信之间没有真正的区别。在这两种情况下,软件都可以使用 APDU 与智能卡进行通信。许多实现智能卡读卡器的软件库都支持使用 APDU 作为与卡的基本通信单元。

这非常方便,除了一些流行的非接触式卡(例如 MIFARE Classic)不理解 APDU(因为它们甚至不支持 ISO 14443-4)。因此,非接触式读卡器制造商创建了一种“虚拟”APDU 格式(使用 APDU 中的专有类字节)来解决此问题。读卡器固件(或 PC 上的驱动程序)拦截 C-APDU 并将其转换为正确的 MIFARE Classic 命令,并将卡响应转换为 R-APDU。通过这种方式,软件开发人员可以使用他们首选的智能卡通信库,同时仍然与 MIFARE Classic 卡进行通信。

MIFARE DESFire 卡提供了类似的机制,但实际上是卡本身管理 APDU 与其 native 命令集之间的转换。这是可能的,因为该卡使用 ISO 14443-4 通信。

可以在 http://open-nfc.org/documents/PRE_NFC_0804-250%20NFC%20Standards.pdf 找到一个很好的信息图,显示了许多非接触式智能卡和 NFC 标准及彼此相关的规范。

有关更多智能卡标准的概述,请参见http://www.smartcardbasics.com/smart-card-standards.htmlThis question也可提供相关信息。

关于smartcard - 智能卡通信标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153173/

相关文章:

python - 在 Raspi 2 上使用 mxgxw/MFRC522-python 库和 MFRC522 读取器编写 ntag213 (Mifare Ultralight C)

c - TRF7970 : Mifare Classic authentication

smartcard - Java Card 3.0 连接版本中 Web 服务器的 IP 地址是多少?

Java Card 客户端-服务器可共享接口(interface)返回 6F00

Go:使用存储在 SmartCard 上的客户端证书的 HTTPS 请求 (Windows)

java - 如何在java中将ISO代码转换为本地化度量单位?

java - 如何在应用程序中将粤语设置为语音搜索语言?

带有标志和获取 iso 移动代码可用性的 Android 国家/地区列表

c++ - 从 USB 读取 rfid 标签

带有 opensc pkcs#11 提供程序的 java keytool 仅适用于启用调试选项