#driver #smartcard #apdu #smartcard-reader #pyscard
Вопрос:
У меня возникли проблемы с доступом к картам SLE4428 под Windows 10 с помощью ACS ACR38U-I1, Python 3.7 и pyscard. Я использую последний драйвер, который производитель в настоящее время предлагает для Windows.
Основная проблема заключается в том, что запуск определенных APDU завершается неудачно, с указанием Failed to transmit with protocol T0. Falscher Parameter
(= неверный параметр, код ошибки 87). Однако запуск одного и того же кода с одним и тем же считывателем на Raspberry Pi работает безупречно. Я не устанавливал никаких конкретных драйверов на Pi.
Я использую этот код для запуска APDUs:
from smartcard.CardType import AnyCardType
from smartcard.CardConnection import CardConnection
from smartcard.CardRequest import CardRequest
cardtype = AnyCardType()
cardrequest = CardRequest(timeout=1, cardType=cardtype)
cardservice = cardrequest.waitforcard()
cardservice.connection.connect(CardConnection.T0_protocol)
apdu = [0xff, 0xb0, 0x00, 0x00, 0xff] #READ_MEMORY_CARD
response, sw1, sw2 = cardservice.connection.transmit(apdu, CardConnection.T0_protocol)
print('response: ', response, ' status words: ', "%x %x" % (sw1, sw2))
Этот код отлично работает на обеих платформах. Попытка аутентификации с помощью
[0xff, 0x20, 0x00, 0x01, 0x03, 0xff, 0xff]
однако это приводит к сбою, описанному в Windows. Я пробовал стандартный драйвер Windows, а также играл с различными протоколами, но безуспешно.
Еще одно странное поведение, характерное исключительно для Windows: при вставке карты индикатор считывателя быстро мигает, и требуется около 9 секунд, прежде чем к карте вообще можно будет получить доступ.
Это первый раз, когда я пытаюсь взаимодействовать с оборудованием, так что, вероятно, это что-то очевидное, но я не могу этого понять. Я был бы признателен за любые вводные данные и/или рекомендации для (все еще доступных) читателей, которые, как известно, работают в этой конфигурации.
Комментарии:
1. Запись на мигание: вероятно, вам нужно отключить, чтобы отключить службу распространения сертификатов в Windows, и посмотреть, поможет ли это. Что касается аутентифицируемого APDU: 5-й байт имеет значение 0x03, что означает, что Nc имеет значение 3, но вы предоставляете только 2 байта в данных команды (0xFF и 0xFF).
2. Отключение службы распространения сертификатов несколько помогает в работе с не отвечающим считывателем: при недавно подключенном считывателе и отключенной службе первые 3-4 карты по-прежнему вызывают мигание светодиода и медленный доступ. Однако после этих первых нескольких карт карты становятся мгновенно доступными, а индикатор считывателей остается горящим.
Ответ №1:
Значение APDU CLA «FF» не допускается в соответствии с ISO 7816-4. Производители считывателей PC/SC иногда поддерживают команды APDU с CLA=FF для реализации некоторых конкретных функций, таких как доступ к картам MIFARE или настройка параметров протокола связи.
Комментарии:
1. SLE4428, упомянутый в вопросе, является картой памяти… Учитывая вопрос, я задаюсь вопросом, не известно ли это уже автору.