Какая команда APDU получает идентификатор карты - PullRequest
8 голосов
/ 01 марта 2012

Какая команда APDU получает 7 байт идентификатора карты?Я использую T = CL (ISO7816) pritocol со слоем ISO14443.При обнаружении карты я вижу только 4 байта идентификатора карты.Я искал, то есть команда APDU для получения идентификатора карты.Например, это:
0xFF, 0xCA, 0x00, 0x00, 0x00
, но результат этой команды: 6E 00, что в спецификациях APDU говорит, что "Класс не поддерживается"

ТогдаЯ считаю, что его команда APDU может иметь вид:
0x00, 0xCA, 0x00, 0x00, 0x00
эта команда возвращает 6A 88
где 6A XX - "Неправильный параметр (ы) P1-P2" и 88 - «Ссылочные данные не найдены»

Что вы думаете об этом?

Спасибо!

ps Все командыas: CLA, INS, P1, P2, LenData, Data
Другие мои команды работают нормально (например, выбирают aplet и работают с ним), проблема только в получении идентификатора карты

Ответы [ 4 ]

16 голосов
/ 01 ноября 2012

Ответ, данный ранее, неверен.Это потому, что речь идет не о команде ISO 7816, а о внутренней команде API PC / SC.

APDU "0xFF 0xCA 0x00 0x00 0x00" на самом деле правильный, и у меня есть карты, для которых яполучить 7-байтовый ответ.Обратите внимание, что это будет работать только с бесконтактными (RFID) картами, поскольку этот UID является частью протокола радиосвязи.Также обратите внимание, что некоторые чипы будут возвращать новый случайный UID после каждого включения.Это относится, например, к моей паспортной карточке, а также к моей немецкой национальной идентификационной карточке и контрмерам для предотвращения слежения за держателями карточек.Теоретически такие случайные UID должны начинаться с 0x08, но это не всегда так.

Поскольку UID является «внутренним» значением протокола, рассматриваемый APDU НЕ отправляется на карту, а является тольковнутренняя команда (интерфейса ПК / SC) для получения UID из драйвера устройства чтения карт.CLA 0xFF обычно не используется в обычном режиме, так как он используется только для зарезервированного для «Выбор параметра протокола» (PPS).PC / SC использует этот CLA для внутренних команд.

Данная команда является внутренней командой «Get Data» для PC / SC, описанной в части 3, раздел 3.2.2.1.3 спецификации PC / SC.Здесь P1 и P2 имеют специальные предопределенные значения, поэтому нет смысла пробовать разные значения.Стандарт определяет только P1 = 0, P2 = 0 для получения UID и P1 = 1, P2 = 0 для «всех исторических байтов из ATS карты 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

1 голос
/ 01 марта 2012

0xCA - это команда GET DATA. Вы должны предоставить тег TLV в P1-P2.

ISO 7816 часть 6 «Межотраслевые элементы данных для обмена» содержит список этих тегов, но ни один из них однозначно не соответствует «идентификатору карты». Я предлагаю вам попробовать все значения P2, где P1 равен 0x00, 0x5F или 0x7F, чтобы выяснить, какие элементы данных поддерживаются вашей картой.

0 голосов
/ 09 июля 2018

Это очень часто обсуждаемая проблема.

0xFF, 0xCA, 0x00, 0x00, 0x00 - правильная команда pcsc для получения идентификатора карты.

Если вы получили ответ 6E00, значит, в вашем драйвере есть ошибка. Обновите драйвер или попробуйте другой ридер.

0 голосов
/ 30 ноября 2013

Я думаю, что ваша вторая команда верна, но карта не была запрограммирована с идентификатором приложения.

Для 6A88 руководство BasicCard говорит: «Встроенная команда GET APPLICATION ID возвращает этот код ошибки, еслив BasicCard не настроен идентификатор приложения ".

...