什么APDU命令可以获取卡片ID

9
哪个APDU命令可以获取7字节的卡片ID? 我使用T=CL (ISO7816)协议和ISO14443层。在检测到卡片时,我只能看到4字节的卡片ID。 我发现这应该是获取卡片ID的APDU命令。 例如:
0xFF, 0xCA, 0x00, 0x00, 0x00
但是这个命令的结果是:6E 00,根据APDU答案规范,这表示"不支持的类"

然后我发现它的APDU命令可能是:
0x00, 0xCA, 0x00, 0x00, 0x00
这个命令返回6A 88
其中6A XX - "错误的参数(P1-P2)"88 - "未找到引用数据"

你对此有何看法?

谢谢!

P.S. 所有命令格式为:CLA, INS, P1, P2, LenData, Data
我的其他命令正常工作(如选择应用程序并与其一起使用),问题只出现在获取卡片ID上。

5个回答

21
之前给出的答案是错误的。这是因为我们不是在讨论ISO 7816命令,而是PC/SC API的内部命令。
实际上,APDU“0xFF 0xCA 0x00 0x00 0x00”是正确的,我有一些卡片可以获得7字节的答案。请注意,这只适用于无接触(RFID)卡,因为UID是无线电协议的一部分。还请注意,有些芯片每次通电后都会返回一个新的随机UID。例如,我的护照芯片和德国国民身份证也是如此,并且这是防止跟踪持卡人的一种对策。理论上,这样的随机UID应以0x08开头,但并非总是如此。
由于UID是协议的“内部”值,因此所讨论的APDU未发送到卡片,而是仅作为从读卡器驱动程序获取UID的内部命令(PC/SC接口) 。CLA 0xFF通常不在正常使用中,因为它仅保留用于“协议参数选择”(PPS)。 PC / SC滥用此CLA进行内部命令。
此处的命令是PC / SC内部“获取数据”命令,在PC / SC规范的第3部分,第3.2.2.1.3节中指定。在此,P1和P2具有特殊的预定义含义,因此尝试不同的值没有意义。标准仅为获取UID定义了P1 = 0、P2 = 0,而定义了P1 = 1、P2 = 0以获取ISO 14443 A卡的所有历史字节(不包括CRC)。其他值不受支持。

有趣的是,答案0x6A 0x88在标准中没有被定义。0x6a 0x81的意思是“不支持的功能”,这种情况出现在没有UID的卡片上(标准提到了7816-10接触式卡)。其他两个定义好的答案(0x62 0x82和0x6C 0xXX)则表示请求的答案长度与实际数据量不匹配,但这里不会发生,因为我们只需通过在请求的最后一个字节中指定0来请求任意长度的数据。

那么为什么提交者无法使用呢?我不知道。对我来说,它可以工作,有些卡片返回4个字节,有些返回7个字节。

请参阅PC/SC标准,尤其是第3部分: http://www.pcscworkgroup.com/specifications/specdownload.php


本文档提供了有关RFID卡UID的更多信息,包括随机UID以及如何确定其他非唯一UID的方法:http://www.nxp.com/documents/application_note/AN10927.pdf - Michael

1

0xCA是GET DATA命令。您必须在P1-P2中提供一个TLV标记。

ISO 7816第6部分“交互行业数据元素”列出了这些标记,但没有一个明确对应于“卡ID”。我建议您尝试所有P2值,P1等于0x00、0x5F或0x7F,以找出您的卡支持哪些数据元素。


命令{0x00, 0xCA, 0x00, 0x5F, 0x00}或{0x00, 0xCA, 0x00, 0x7F, 0x00}返回错误6A 88。 - dr_begemot
当然。您必须尝试P2的所有值,从0x00到0xFF,以及与P1的三个值0x00、0x5F和0x7F一起使用。总共有768种组合。 - TonyK

0

我认为你的第二个命令是正确的,但是该卡未被编程为应用程序ID。

对于6A88,BasicCard手册上说:“如果在BasicCard中没有配置应用程序ID,则内置命令GET APPLICATION ID返回此错误代码”。


0

这是一个经常讨论的问题。

0xFF、0xCA、0x00、0x00、0x00 是正确的 PCSC 命令,用于获取卡片 UID。

如果你收到 6E00 的响应,则说明你的驱动程序存在错误。请更新驱动程序或尝试另一个读卡器。


0

我尝试了:

byte data[] = new byte[]{};
CommandApdu((byte)0xA0, (byte)0xC0, (byte)0x00, (byte)0x00, data)

我得到了SW1=(byte)0x9F SW2=(byte)0xXX

9FXX =“指令执行成功;'xx'字节的数据可用并可以通过GET RESPONSE请求。”

除了9F00和9F04,它们表示:

9F00= PIN被阻止,解锁尝试计数器为3

9F04=未成功验证PIN,PIN被阻止,解锁尝试计数器为3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接