从 ATR 获取卡类型

Posted

技术标签:

【中文标题】从 ATR 获取卡类型【英文标题】:Get card type from ATR 【发布时间】:2018-04-12 09:40:45 【问题描述】:

当我使用 springcard 读卡器扫描我的卡时,我需要知道这张卡是否属于以下类型之一:CTS 或 CD_97 或 ISO_A 或 ISO_B 或 FRD 如何从 ATR 中获取这些类型?

这些是一些 ATR 示例,我得到了:

导航3B 88 80 01 00 00 00 00 00 71 81 00 F9

Técély3B 8F 80 01 80 5A 0A 01 01 20 03 11 10 1D 86 BC 82 90 00 C9

欧拉3B 8F 80 01 80 5A 0A 01 02 20 03 11 03 53 52 A2 82 90 00 5D

城市卡3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 02 00 00 00 00 69

有没有关于我们如何从 ATR 中获取这些类型的详细说明?

我正在使用SpringCard读卡:http://files.springcard.com/pub/pmd841p-fa.pdf

我能够在第 27 页和 28 中找到部分解决方案 http://files.springcard.com/pub/%5bpma13205-bd%5d_Smart_Readers_and_RFID_Scanners_Template_System.pdf

我仍然需要找到命令来获取 OPT REGISTER

【问题讨论】:

据我所知,没有全局 ATR 注册表或 ATR 历史字节的注册表。不过,查看 ATR 中的历史字节可能是区分卡片的最佳方式(无论如何都是低级别)。 pcsc-tools 的 ATR 工具是一个很好的起点。我猜您的意思是 ISO 14443 A 型和 B 型。不仅,此信息在 ATR 中不可见,根据使用的协议,您不会分别获得 ATQB 或 ATS。 所以您认为使用 ATR 无法找到 CTS 或 CD_97 或 ISO_A 或 ISO_B 或 FRD 类型?我们永远无法确定类型? 【参考方案1】:

关于“OPT 寄存器”——据我了解,您设置此寄存器是为了控制 SpringCard 的模板系统(可选)如何将卡片系列编码到其输出中的方式。我敢打赌,你根本不想使用他们的模板系统......


要获取有关通用卡技术/系列的信息,请使用以下GET DATA 命令获取 PIX.SS 和 PIX.NN(参见第 2.2.1 章):

FF CA F1 00 00

响应的第一个字节是 PIX.SS(参见第 5.1.4 章):

0x00 -> 未提供任何信息 0x01 -> ISO 14443 A,1 级 0x02 -> ISO 14443 A,2 级 0x03 -> ISO 14443 A,3 或 4 级(和 Mifare) 0x05 -> ISO 14443 B,1 级 0x06 -> ISO 14443 B,2 级 0x07 -> ISO 14443 B,3 或 4 级 0x09 -> ICODE 1 0x0B -> ISO 15693

以下两个字节包含 PIX.NN(见第 5.1.5 章):

0x0001 -> NXP Mifare Standard 1k 0x0002 -> NXP Mifare 标准 4k 0x0003 -> NXP Mifare UltraLight + 其他类型 2 NFC 标签,容量 0x0006 -> ST 微电子 SR176 0x0007 -> ST MicroElectronics SRI4K, SRIX4K, SRIX512, SRI512, SRT512 0x000A -> 爱特梅尔 AT88SC0808CRF 0x000B -> 爱特梅尔 AT88SC1616CRF 0x000C -> 爱特梅尔 AT88SC3216CRF 0x000D -> 爱特梅尔 AT88SC6416CRF 0x0012 -> Texas Intruments 标记它 0x0013 -> ST 微电子 LRI512 0x0014 -> 恩智浦 ICODE SLI 0x0016 -> 恩智浦 ICODE1 0x0021 -> ST 微电子 LRI64 0x0024 -> ST 微电子 LR12 0x0025 -> 意法半导体 LRI128 0x0026 -> NXP Mifare Mini 0x002F -> Innovision Jewel 0x0030 -> Innovision Topaz(NFC 论坛类型 1 标签) 0x0034 -> 爱特梅尔 AT88RF04C 0x0035 -> 恩智浦 ICODE SL2 0x003A -> NXP Mifare UltraLight C + 其他类型 2 NFC 标签,容量 > 64 字节 0xFFA0 -> 通用/未知 14443-A 卡 0xFFA1 -> Kovio 射频条码 0xFFB0 -> 通用/未知 14443-B 卡 0xFFB1 -> 询问 CTS 256B 0xFFB2 -> 询问 CTS 512B 0xFFB3 -> 预标准 ST MicroElectronics SRI 4K 0xFFB4 -> 预标准 ST MicroElectronics SRI X512 0xFFB5 -> 预标准 ST MicroElectronics SRI 512 0xFFB6 -> 预标准 ST MicroElectronics SRT 512 0xFFB7 -> 内部非接触式 PICOTAG/PICOPASS 0xFFB8 -> 通用 Atmel AT88SC / AT88RF 卡 0xFFC0 -> 使用 Innovatron 协议的 Calypso 卡 0xFFD0 -> 来自未知制造商的通用 ISO 15693 0xFFD1 -> 来自 EMMarin(或 Legic)的通用 ISO 15693 0xFFD2 -> 来自 ST MicroElectronics 的通用 ISO 15693,8 位块号 0xFFD3 -> 来自 ST MicroElectronics 的通用 ISO 15693,16 位块号 0xFFFF -> 虚拟卡(仅测试)

请注意以下关于以 0xFF(SpringCard 专有代码)开头的 PIX.NN 值的注意事项:

在撰写本文时,PC/SC 规范未引用此列表中的卡。如果它们被添加到规范中, 未来的固件版本必须使用新值。因此,建议不要在应用程序中检查这些值,因为 它们将来可能会被删除。

关于 PIX.NN 可用性的说明:

注意:PIX.NN 仅适用于存储卡。即使 GET DATA 指令允许 即使对于基于微处理器的卡(智能卡)也可以检索 PIX.NN,返回值为 未指定,不得用于识别卡。

免责声明:我不再可以访问 SpringCard 读卡器,因此我无法使用我的卡对其进行测试,但鉴于 the documentation 它应该可以这样工作。


我过去处理过一个非常相似的问题(处理不同的卡片,有些提到here),最有效的方法是(考虑到我的卡片“混合”):

使用 ATR 值创建“候选列表”(在许多情况下 ATR 值导致单个卡方案候选)

如果有更多候选人考虑以下方式来确认其中之一:

特定于技术的“目录服务”(例如 MAD、获取应用程序 ID、PSE/PPSE、PTSE...)

反复试验的应用程序选择(如果候选列表非常短,这可能比使用目录服务更快)

(作为最少的手段)专有卡方案检测

这种方法假设您知道旧卡的所有可能 ATR 值 - 如果不知道,您必须将其替换/结合上述卡技术/系列检测。


注意:cmets 中提到的 pcsc-tools ATR 列表可用here 和here (我不确定哪个是规范的)

祝你好运!

【讨论】:

我会测试一下,谢谢你的详细回答;) @haythemsouissi CTS 应提供0xFFB10xFFB2 的PIX.NN。 谢谢@vlp 最后一件事,对 Calypso 卡有什么想法吗? :) @haythemsouissi 链接手册在 5.1.1.c 部分的注释中给出了一些提示。 (第 60 页)——您应该获得 0xFFC0(Innovatron)的 PI​​X.NN 或通用 T=CL 卡(可能是 14443-B 变体之一)。如果给定通用 T=CL 卡,您应该尝试“选择应用程序”以验证它的存在(这与我的回答一致)......我无法帮助 Calypso 的具体细节,因为它们不公开......好运气! 0xFFC0 -> 使用 Innovatron 协议的 Calypso 卡 我们是否只有使用 Innovatron 的 Calypso?我们没有其他使用其他协议的 Calypso 吗?对不起,我不是专家 :)【参考方案2】:

你可以在这里找到春天卡的答案,对不起,他们用法语回答了我,所以如果有什么不清楚的地方,把它放在你的评论中:

ATR

1- Envoyer d'abord FF CA FA 00 : - Avez-vous au moins 14 octets, et les octets 7-11 sont-ils : A0 00 00 03 06 ? -> Si oui, alors vous êtes sur une carte à logique câblée, Il faut récupérer le PIX.SS et le PIX.NN (octets 12-13-14 de la réponse) et retrouver la techno de la carte selon les 段落 4.1。 4 和 4.1.5。 La détection de la technologie s'arrête là。 Vous pouvez envoyer la commande décrite dans NUM_PROTOCOL pour connaître le numéro protocolaire de la carte。 -> Si non, alors vous êtes sur une "vraie" carte à puce。 Envoyer la commande décrite dans NUM_PROTOCOL

NUM_PROTOCOL

2- Envoyer FF CA 00 00, et analyzer le nombre d'octets dans la réponse : - réponse sur 7 ou 11 octets: la carte est forcément en ISO A, la réponse est l'UID de la carte。 L'algo peut s'arrêter là si vous n'avez pas besoin de plus de détail - 对 4 个八位字节的回应:c'est le numéro protocolaire。 2个选项: * si vous avez détecté que c'est une carte à logique câblée à l'étape précédente, alors l'algo peut s'arrêter là si vous n'avez pas besoin de plus de détail * Si vous êtes sur une carte à puce, alors il faut envoyer la commande COMPLETE_ID - response sur un nombre d'octet différent : on est forcément sur de la logique câblée (ou carte à mémoire),dont la techno est déja identifiée。 La réponse 对应 au numéro protocolaire。 L'algo peut s'arrêter là si vous n'avez pas besoin de plus de tétail

COMPLETE_ID

3- On n'arrive ici que quand la carte est une carte avec une "vraie" puce (DONC : pas une carte à mémoire, ni une carte à logique câblée) Envoyer FF CA F0 00 et analyzer le nombre d'octets dans la réponse: -11 或 12 个八位组:c'est forcément de l'ISO B - la valeur obtenue est l'ATQB - le numéro protocolaire a été obtenu à l'étape suivante / la carte est identifiée - resultat sur un nombre d'octets différent : 验证者 si cela 对应 à 3 octets suivi du numéro protocolaire obtenu à la commande précédente a) si oui, c'est de l'ISO A - les deux Premiers octets sont l'ATQA, et le troisième est le SAK (le reste forme l'UID) b) si non alors on a reçu le REPGEN, la carte répond sur le protocole INNOVATRON (le PUPI a été obtenu à l'étape précédente)。

Avec cela, normalement, vous devriez être en mesure de reconnaître toutes vos cartes.

【讨论】:

以上是关于从 ATR 获取卡类型的主要内容,如果未能解决你的问题,请参考以下文章

RFID转发卡没有唯一的atr

是否可以从 Apple Pay 令牌中获取卡类型?

如何从 NFC 卡获取 cardnummer - 而不是 UID

如何将 ATR 发送到卡

IC卡复位应答ATR的数据元和它们的意义

ATS(Answer-to-Select)通过非接触式或 NFC 与 ATR(Answer-to-Reset)通过接触卡的区别