获取智能卡UID的APDU命令

11

我正在寻找用于查找ISO 14443非接触式智能卡UID并在Linux终端中打印的APDU。问题是我发现很多人在谈论它,但没有解决方案。有人能在这方面帮忙吗? 谢谢。

2个回答

24

"获取数据命令"在PCSC 3 v2中定义。如果您的驱动程序符合PCSC v2标准,则可以使用它获取UID:

Class = 0xFF
INS = 0xCA
P1 = 0x00
P2 = 0x00
Le = 0x00 (return full length: ISO14443A single 4 bytes, double 7 bytes, triple 10 bytes, for ISO14443B 4 bytes PUPI, for 15693 8 bytes UID)

返回值是:

Data+SW1SW2

2
使用opensc读取UID的Linux命令: opensc-tool --send-apdu FF:CA:00:00:00 --wait - Gabriel Klein
感谢@nchokoev!通过pcsclite(节点适配)解决了我的问题。 - Stilmittel

6
请看其他答案,现在大多数读者可能已经支持通过到读卡器的传递。
由于UID在ISO 14443 T=CL传输协议中指定,而APDU在ISO 7816应用层协议中指定,因此没有人能够提供帮助。
因此,您需要访问低级别API以获取您的非接触式读卡器。除非为特定读卡器实现了传递,否则PCSC将不起作用(返回UID)。

那么,在使用PCSC-Lite时,读取智能卡UID的可能方法是什么? - Salman
我会查看底层的读卡器库。PCSC最初就是为接触式读卡器设计的。问题在于超出PCSC的任何内容很可能都是专有驱动程序。 - Maarten Bodewes
UID是每张非接触式卡片都有特定的吗?(即,是否存在两张具有相同UID的不同卡片?)它是固定的还是每个会话都随机生成一个号码?我们为什么需要它?仅仅为了防冲突机制吗? - Ebrahim Ghasemi
据我所知,它只有7字节,因此我们可以拥有2^56个具有不同AID的非接触式卡片,对吗? - Ebrahim Ghasemi
1
通常是一个静态 UID,还有 4 字节的随机 UID。初始位指定了它是哪种 UID。请注意,2^56 很大(至少有 16 个数字),但这些位并不都是唯一 ID 的一部分。编辑 把这个写反了,7 字节通常是非随机的。 - Maarten Bodewes

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