#smartcard #javacard #apdu #globalplatform
#смарт-карта #javacard #apdu #globalplatform
Вопрос:
Изображение ниже выводится pcsc_scan
в ubuntu, и, как вы видите в ATR analyse, моя javacard поддерживает 3 логических канала.
И это часть стандарта ISO 7816-4, в котором упоминаются младшие биты в CLA, указывающие номер логического канала:
Вопрос в том, почему, когда я хочу отправить команду APDU НАЧАЛЬНОГО ОБНОВЛЕНИЯ через другой логический канал, отличный от базового логического канала, происходит сбой?
Начальное обновление с CLA = 80
помощью [базового логического канала]
< 80 50 00 00 08 00
< 00 00 00 00 00 00 00 00
> 611C
< 00 C0 00 00 00 1C
> 00 11 60 01 03 8A 79 0A F9 FF 02 00 35 F3 92 EC 2B 6F F5 10 2E BD 74 41 2F 25 B4
> 90 00
Начальное обновление с CLA = 81 or 82
помощью [Дополнительных логических каналов]
< 81 50 00 00 08 00
< 00 00 00 00 00 00 00 00
> 6881
< 82 50 00 00 08 00
< 00 00 00 00 00 00 00 00
> 6881
Как вы видите, я получил SW = 6881
, [= Логический канал не поддерживается]. почему?
Обновить :
«Если javacard имеет два / три логических канала, это означает, что мы можем выбрать два / три апплета одновременно», и это правильно? если да, каковы другие преимущества наличия более одного канала? если нет, для чего нужны эти каналы?
Ответ №1:
Это скорее зависит от интерпретации ISO 7816-4, как это обрабатывается. ISO 7816-4 очень мало указывает на внутреннее состояние смарт-карт. Это, безусловно, достаточно расплывчато, чтобы оставить эту конкретную проблему открытой для интерпретации.
Теперь обычно вы можете иметь несколько логических каналов, используя APDU УПРАВЛЕНИЯ КАНАЛОМ (INS = 70h). Вы не можете просто переключиться на другой канал, указав биты в байте CLA; канал должен быть открыт первым. Кроме того, не сказано, что аутентификация или состояние файловой системы передаются новому каналу.
Вы должны рассматривать логический канал как возможность одновременного запуска нескольких приложений, где логические каналы используются для чередования команд по одному (полудуплексному) каналу связи. Это полезно, если у вас есть разные службы, требующие обмена данными по смарт-картам на вашем терминале (ПК).
Очевидно, что логические каналы имеют большие недостатки; вам нужно сохранять состояние для каждого логического канала. Возможно, вам также может потребоваться смешать состояние (т. Е. Проверка PIN-кода может использоваться для обоих каналов). Это очень специфическая проблема, связанная с использованием временной памяти (ОЗУ).
Обычно вы видите только карты с 2 логическими каналами. В большинстве случаев будет использоваться только один из них. в 99% случаев лучше разрешить эксклюзивный доступ только к одной службе и позволить службам смарт-карт работать последовательно. Обратите внимание, что многие карты теперь работают на частоте 30 МГц или выше, но по-прежнему имеют всего 8 КБ оперативной памяти.
Вы можете попробовать использовать УПРАВЛЕНИЕ КАНАЛОМ, но, возможно, ваш ATR обманывает вас и не все приложения поддерживают логические каналы (например, глобальный диспетчер карт платформы). Также обратите внимание, что глобальная платформа использует проприетарные команды / ответы APDU (самый высокий бит, установленный в CLA = 80h), поэтому официально у вас есть только спецификация глобальной платформы для ссылки.
Комментарии:
1. Спасибо, дорогой owlstead. Я отправил
80 70 00 00 01
APDU через Opensc-tool для открытия логического канала, но получил6E00
ответ [ Класс не поддерживает ]2. В ISO-7816 упоминается, что в приведенном выше APDU [ УПРАВЛЕНИЕ КАНАЛОМ ]
P1=00
предназначено для открытия логического канала иP1=80
для закрытия логического канала [сCLA=70
помощью]. И в качестве нового вопроса: в этом случае моя карта поддерживает три логических канала, какой из которых будет открыт / закрыт сMANAGE CHANNEL
помощью команды? Я имею в виду, я не указал номер канала, который я хочу открыть / закрыть в команде. итак, какой из них … ?3. Ваш CLA не должен быть
80
. УПРАВЛЕНИЕ КАНАЛОМ определено в ISO 7816-4, поэтому старший бит CLA должен быть0
. Попробуйте00 70 00 01
вместо этого.