Как получить SAK для определения типа смарт-карты с помощью JAVA?

Вопрос:Я использую API Java Smart Card для доступа. У меня есть NXP Mifare desfire 4K, 1K, ультра легкие смарт-карты со мной и пытаются узнать его тип программно в JAVA. Я ссылался на документ AN10833 с сайта NXP ). У меня есть следующие связанные запросы: Как получить SAK с помощью JAVA? Что такое APDU для выполнения

Вопрос:

Я использую API Java Smart Card для доступа.
У меня есть NXP Mifare desfire 4K, 1K, ультра легкие смарт-карты со мной и пытаются узнать его тип программно в JAVA.

Я ссылался на документ AN10833 с сайта NXP ).
У меня есть следующие связанные запросы:

  • Как получить SAK с помощью JAVA?
  • Что такое APDU для выполнения команды REQA?

Ответ №1

Узнайте ATR карты, и ATR содержат информацию о типе карты. Здесь я загружаю изображение. Посмотрите структуру ATR…
Для получения дополнительной информации Здесь полный PDF
посмотрите на страницу № 6.

Ответ №2

edit: Извините, что это напрямую не отвечает на вопрос, но текущий верхний ответ потенциально опасен. Я пытаюсь выяснить, как заставить САК самостоятельно попытаться опубликовать обновление, когда я это сделаю.

Определение типа карты из ATS/ATR является обычным явлением, но неправильным. NXP советует использовать SAK.

“Поскольку ATS различных микросхем MIFARE можно настроить, это безусловно, нецелесообразно полагаться на САР для дифференциации ИС типа”

Ссылка:

Вместо этого посмотрите здесь подробное дерево определения типа карты из SAK:

Как в стороне, в производстве, если вы можете быть уверены, что всегда будете иметь одинаковый формат ATR/ATS на всех своих картах, это может быть жизнеспособным вариантом. Но это не гарантируется.

Я понятия не имею, что такое VCA в мире, но из первого документа:

“В будущем NXP рекомендует использовать” Virtual Card Architecture (VCA) “для выбора PICC и идентификации типа. Если установки не зависят от фактического содержимого ATQA, SAK и/или ATS для карты выбор и идентификация, это позволяет использовать более одного MIFARE продукт включен для активации в одном устройстве в одном и том же время. В этом случае VCA позволяет эффективно и конфиденциально выбор целевого продукта MIFARE. Это описано в отдельная заявка на замещение.”

Ответ №3

Я знаю, что это старый блог, но я работал над этой же проблемой и хотел поделиться своими выводами.

В 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. Я нашел документацию по 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, упомянутый выше.

Я отвечу от всего, что узнаю.

Оцените статью
Добавить комментарий