как отправить apdu на бесконтактную смарт-карту

У меня есть апплет, который отлично работает на карточке контакта. Теперь у меня есть карта с двойным интерфейсом (IDCore 3020), и я загружаю на нее свой апплет через контактный интерфейс. Также у меня есть бесконтактный считыватель смарт-карт (acr122u), и я хочу отправить команду APDU через бесконтактный интерфейс и получить ответный APDU. я отправил SelectApplet APDU на карту, как это, но я потерпел неудачу (SW = 6300):

00 A4 04 00 09 [A0,00,00,03,08,00,00,10,00] 00

У меня три вопроса:

1- Могу ли я использовать свой апплет в бесконтактном режиме, например, в контакте с теми же APDU?

2- нужно ли что-то сделать, чтобы бесконтактный считыватель распознал мою карту?

3- работает ли текущий минидрайвер, который работает с контактной картой, и с бесконтактной картой?


person Mohsen Gorgani    schedule 09.06.2016    source источник
comment
63 00 — довольно необычный код ошибки в ответ на команду SELECT, но этот код ошибки часто используется ACR122U для обозначения общей ошибки. Может ли быть так, что ваш ридер (пока) не обнаружил карту? Включен ли на вашем считывателе автоматический опрос PICC и автоматическая генерация ATS для ISO 14443 Type A / Type B (в некоторых версиях ACR122U это не включено по умолчанию)?   -  person Michael Roland    schedule 09.06.2016
comment
Используете ли вы APDU.getProtocol() во время выбора апплета для фильтрации доступа? Реализует ли ваша карта Глобальную поправку к платформе C (AFAIK IDCore 3020 — нет, но я не уверен…)? Работает ли выбор любого другого приложения (например, ISD) с использованием бесконтактного интерфейса?   -  person vlp    schedule 09.06.2016
comment
Спасибо Михаил за ответ. Правда и мой ридер еще не определил карту. я могу получить прошивку считывателя с помощью следующего apdu: FF 00 48 00 00 [] 00, но когда я хочу получить параметр picc с помощью следующей команды: FF 00 50 00 00 [] 00, я не могу, и он возвращает 6300, также когда я хочу чтобы установить эти параметры с помощью следующей команды: FF 00 51 00 00 [] 00, она также возвращает 6300. почему это происходит?   -  person Mohsen Gorgani    schedule 11.06.2016
comment
Вам тоже спасибо влп. в выбранном апплете нет фильтра для бесконтактного интерфейса. Я проверил считыватель транспортной картой Mifare1K и отправил следующую команду: FF 00 00 00 02 [D4,04] 00, чтобы получить текущую настройку бесконтактного интерфейса, и считыватель вернул D5 05 00 00 00 80 90 00, что означает, что есть нет тега в поле. я должен упомянуть, что мой mifare1K обнаружен моим телефоном Android с помощью приложения с открытым исходным кодом.   -  person Mohsen Gorgani    schedule 11.06.2016
comment
Это странно (я предполагаю, что вы на самом деле не отправляете Lc = 0x00 и Le = 0x00, но на самом деле это означает, что вы не отправляете Lc (поскольку он равен нулю), а отправляете только Le как 0x00 (что указывает на до 256 байтов ответа). данные), не так ли?). Тогда вы можете попытаться вручную опросить теги (команда опроса: FF 00 00 00 07 [D4 60 FF 01 10 20 23]).   -  person Michael Roland    schedule 24.06.2016
comment
Спасибо, Майкл. После выполнения (команда опроса: FF 00 00 00 07 [D4 60 FF 01 10 20 23]) ответ будет следующим: (D5 61 01 10 09 01 00 04 28 04 49 6B FF 5D 90 00). вероятно, читатель сможет успешно обнаружить мою карту IDCore 3020. Затем, когда я отправляю (FF 00 00 00 02 [D4,04] 00), ответ (D5 05 01 00 01 01 00 00 00 80 90 00), который отличается старым ответом (D5 05 00 00 00 80 90 00 ). Это означает, что считыватель может успешно обнаружить карту, но любая другая команда возвращает 6300. Я думаю, что считыватель еще не подключен к карте. Как мне подключиться к карте и отправить на нее апплет выбора?   -  person Mohsen Gorgani    schedule 28.06.2016
comment
Я использую JSmartcardExplorer для подключения к карте (или считывателю) (ссылка). когда я нажимаю кнопку подключения, кажется, что JSmartcardExplorer подключается к считывателю, а не к карте. Как подключить карту и получить АТС?   -  person Mohsen Gorgani    schedule 28.06.2016


Ответы (1)


1- Могу ли я использовать свой апплет в бесконтактном режиме, например, в контакте с теми же APDU?

Да, конечно, если вы явно не запретите это в своем коде (используя getProtocol.

2- нужно ли что-то сделать, чтобы бесконтактный считыватель распознал мою карту?

Нет, если у вас есть считыватель, совместимый с PCSC и ISO/IEC 14443, вы должны иметь возможность общаться с ним (и у вас есть). Я не уверен, что вы имеете в виду под «распознать» здесь, но он, безусловно, должен быть в состоянии это увидеть.

Это может дать другой ATS, чем ATR, заданный контактным интерфейсом. ATR/ATS генерируется до более общего интерфейса APDU.

3- работает ли текущий минидрайвер, который работает с контактной картой, и с бесконтактной картой?

Это может иметь место, но обратите внимание на замечание о ATR/ATS выше.

person Maarten Bodewes    schedule 11.06.2016
comment
Спасибо, Мартан, за ответ. Но почему мой ридер (ACR 122U) не видит мои карты. Я протестировал считыватель с Mifare1K с помощью следующей команды: FF 00 00 00 02 [D4,04] 00, чтобы получить текущую настройку бесконтактного интерфейса, и считыватель вернул D5 05 00 00 00 80 90 00, что означает, что в поле нет тега. Кажется, ридер не опрашивает карты. - person Mohsen Gorgani; 12.06.2016
comment
Может проблема в самой карте? У него действительно есть антенна? Использование команд MIFARE для проверки других карт, вероятно, не является хорошей идеей; это может быть специфично для реализации, что вы получите обратно. Обычно я бы предложил и другого читателя; может быть, в вашем мобильном телефоне есть считыватель NFC, который вы можете использовать для проверки тегов? - person Maarten Bodewes; 12.06.2016
comment
У меня есть еще одна бесконтактная карта. Моя транспортная карта — карта Mifare1K. Я проверил его на своем телефоне, и он смог успешно обнаружить карту, поэтому карта (MIFARE1K) работает правильно. предыдущие команды тестировались картой MIFARE1K. Думаю, проблема с картридером ACR122U. Как проверить правильно ли работает ридер? Я должен отметить, что команда get firmware работает правильно, но не может обнаружить ни одну карту. - person Mohsen Gorgani; 12.06.2016