Запуск определенных APDU завершается неудачно, что указывает на невозможность передачи по протоколу T0. Параметр Фальшера

#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, упомянутый в вопросе, является картой памяти… Учитывая вопрос, я задаюсь вопросом, не известно ли это уже автору.