从 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ély:
3B 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 应提供0xFFB1
和0xFFB2
的PIX.NN。
谢谢@vlp 最后一件事,对 Calypso 卡有什么想法吗? :)
@haythemsouissi 链接手册在 5.1.1.c 部分的注释中给出了一些提示。 (第 60 页)——您应该获得 0xFFC0
(Innovatron)的 PIX.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 获取卡类型的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NFC 卡获取 cardnummer - 而不是 UID
ATS(Answer-to-Select)通过非接触式或 NFC 与 ATR(Answer-to-Reset)通过接触卡的区别