3

我正在使用 Java Smart Card API 进行访问。我有 NXP Mifare desfire 4K、1K、超轻智能卡,并试图在 JAVA 中以编程方式找出它的类型。

我参考了 NXP 网站 ( http://www.nxp.com/documents/application_note/AN10833.pdf ) 的文档 AN10833。我有以下相关查询:

  1. 如何使用 JAVA 获取 SAK?
  2. 执行 REQA 命令的 APDU 是什么?
4

3 回答 3

5

找出卡的ATR,ATR包含卡类型信息。在这里我正在上传图片查看 ATR 的结构... 更多信息在这里 查看第 6 页的完整 PDF 。

在此处输入图像描述

在此处输入图像描述

于 2013-04-15T07:51:05.307 回答
1

编辑:很抱歉,这并没有直接回答问题,但当前的最佳答案可能有害。我正在尝试发现如何获得 SAK,我自己会尝试在我这样做时发布更新。

从 ATS/ATR 中确定卡片类型是司空见惯的,但却是错误的。NXP 建议使用 SAK。

“由于不同MIFARE IC的ATS都可以定制,当然不建议依靠ATS来区分IC类型”

参考:http ://www.nxp.com/documents/application_note/AN10833.pdf

相反,请在此处查看如何从 SAK 确定卡类型的详细树: http ://www.nxp.com/documents/application_note/130830.pdf

顺便说一句,在生产中,如果您可以确信您将始终在所有卡上获得相同格式的 ATR/ATS,这可能是一个可行的选择。但不能保证。

我不知道 VCA 到底是什么,但从第一个文件来看:

“未来,NXP 建议使用“Virtual Card Architecture (VCA)”进行 PICC 选择和类型识别。如果安装不依赖于 ATQA、SAK 和/或 ATS 的实际内容进行卡选择和识别,这允许更多“而不是在单个设备中同时启用一个 MIFARE 产品。在这种情况下,VCA 允许对目标 MIFARE 产品进行高效且隐私友好的选择。这在单独的应用说明中进行了描述。”

于 2015-01-12T19:44:21.787 回答
1

我知道这是一个旧博客,但我一直在研究同样的问题并想分享我的发现。

在 AN10833 中,它明确指出 UID + SAK 是通过执行选择返回的。使用 java smartcard io 库,我可以执行如下选择:

// Send pseudo APDU to retrieve the card serial number (UID)
int cla = 0xFF;
int ins = 0xCA;
int p1 = 0x00;
int p2 = 0x00;
byte[] data = null;
int dataOffset = 0x00;
int dataLength = 0x00;
int le = 0x00;

CommandAPDU getDataApdu = new CommandAPDU(cla, ins, p1, p2, data, dataOffset, dataLength, le);
ResponseAPDU r1 = channel.transmit(getDataApdu);

但是,我只返回了 UID。我在 PC/SC API 上找到了更改 P1 = 0x01 将更改对历史字节的响应的文档(这对我有用)。

(此处的第 3.2.2.1.3 节:http: //pcscworkgroup.com/Download/Specifications/pcsc3_v2.01.09.pdf

不幸的是,对于我可以访问的现成读者,我找不到返回 SAK 的参数。在另一个阅读器的 API 文档中,我发现如果 p2 = 0x01,则返回 ATQA + UID + SAK(此阅读器是专用的,我无法共享该文档)。

我相信如果您的阅读器支持它(或者您的编码水平足够低以控制阅读器本身),您可以获得/请求确切的 SAK。否则您可能需要使用 ATS/ATR 来确定卡类型。

请注意,在 Java 中,这里是获取 ATS/ATR 的代码:

// wait 10 seconds for a card
CardTerminal terminal = terminal.waitForCardPresent(10000);

Card card = terminal.connect("*");
ATR atr = card.getATR();

从那里,ATR 可以按照上面提到的 vikky 进行处理。

我会用我学到的任何其他东西来回应。

于 2018-01-17T22:13:58.557 回答