Как получить версию JavaCard на карту

Как получить версию Java-карты с карты? Есть ли способ как получить версию JC с карты. Или я должен попытаться установить апплеты с конкретными для каждой версии JC опциями.

3 ответа

Решение

Единственный надежный способ определить версии API JavaCard, поддерживаемые "белой" смарт-картой, - это создать отдельный файл CAP для каждой версии JavaCard.

Я предлагаю вам сделать так, чтобы каждый CAP содержал только один простой класс, расширяющий javacard.framework.Applet, Возможно, вы захотите иметь возможность фактически установить свой простой апплет и фактически обмениваться с ним APDU, просто чтобы убедиться, что он действительно работает; Насколько я знаю, реализациям виртуальных машин Java Card разрешено загружать файлы CAP, даже если не все операции импорта разрешены, но они могут завершиться неудачей, если вы попытаетесь использовать API.

После создания файла CAP вы можете проверить, действительно ли он ссылается на нужный пакет API JavaCard, проанализировав компонент COMPONENT_Import в созданном вами файле CAP. Формат файла CAP описан в Спецификации виртуальной машины JavaCard, а требуемое поле - это package_info для вашего импортированного пакета JavaCard.

Я составил список AID - информация о package_version_major.package_version_minor (имя_пакета). Список может быть неполным.

Java Card 2.1.1: A0000000620201 - 1.1 (javacardx.crypto)

Java Card 2.1.1: A0000000620101 - 1.0 (javacard.framework)

Java Card 2.1.1: A0000000620001 - 1.0 (java.lang)

Java Card 2.1.1: A0000000620102 - 1.1 (javacard.security)

Java Card 2.2.1: A0000000620201 - 1.2 (javacardx.crypto)

Java Card 2.2.1: A0000000620101 - 1.2 (javacard.framework)

Java Card 2.2.1: A0000000620002 - 1.0 (java.io)

Java Card 2.2.1: A0000000620001 - 1.0 (java.lang)

Java Card 2.2.1: A0000000620003 - 1.0 (java.rmi)

Java Card 2.2.1: A0000000620102 - 1.2 (javacard.security)

Java Card 2.2.1: A000000062010101 - 1.0 (javacard.framework.service)

Java Card 2.2.2: A0000000620209 - 1.0 (javacardx.apdu)

Java Card 2.2.2: A0000000620202 - 1.2 (javacardx.biometry)

Java Card 2.2.2: A0000000620201 - 1.3 (javacardx.crypto)

Java Card 2.2.2: A0000000620203 - 1.0 (javacardx.external)

Java Card 2.2.2: A0000000620101 - 1.3 (javacard.framework)

Java Card 2.2.2: A0000000620002 - 1.0 (java.io)

Java Card 2.2.2: A0000000620001 - 1.0 (java.lang)

Java Card 2.2.2: A000000062020802 - 1.0 (javacardx.framework.math)

Java Card 2.2.2: A0000000620003 - 1.0 (java.rmi)

Java Card 2.2.2: A0000000620102 - 1,3 (javacard.security)

Java Card 2.2.2: A000000062010101 - 1.0 (javacard.framework.service)

Java Card 2.2.2: A000000062020803 - 1.0 (javacardx.framework.tlv)

Java Card 2.2.2: A000000062020801 - 1.0 (javacardx.framework.util)

Java Card 3.0.1: A0000000620209 - 1.0 (javacardx.apdu)

Java Card 3.0.1: A0000000620202 - 1.2 (javacardx.biometry)

Java Card 3.0.1: A0000000620201 - 1.4 (javacardx.crypto)

Java Card 3.0.1: A0000000620203 - 1.0 (javacardx.external)

Java Card 3.0.1: A0000000620101 - 1.4 (javacard.framework)

Java Card 3.0.1: A00000006202080101 - 1.0 (javacardx.framework.util.intx)

Java Card 3.0.1: A0000000620002 - 1.0 (java.io)

Java Card 3.0.1: A0000000620001 - 1.0 (java.lang)

Java Card 3.0.1: A000000062020802 - 1.0 (javacardx.framework.math)

Java Card 3.0.1: A0000000620003 - 1.0 (java.rmi)

Java Card 3.0.1: A0000000620102 - 1.4 (javacard.security)

Java Card 3.0.1: A000000062010101 - 1.0 (javacard.framework.service)

Java Card 3.0.1: A000000062020803 - 1.0 (javacardx.framework.tlv)

Java Card 3.0.1: A000000062020801 - 1.0 (javacardx.framework.util)

Java Card 3.0.4: A0000000620209 - 1.0 (javacardx.apdu)

Java Card 3.0.4: A0000000620202 - 1.2 (javacardx.biometry)

Java Card 3.0.4: A0000000620201 - 1.4 (javacardx.crypto)

Java Card 3.0.4: A0000000620203 - 1.0 (javacardx.external)

Java Card 3.0.4: A0000000620101 - 1.5 (javacard.framework)

Java Card 3.0.4: A00000006202080101 - 1.0 (javacardx.framework.util.intx)

Java Card 3.0.4: A0000000620002 - 1.0 (java.io)

Java Card 3.0.4: A0000000620001 - 1.0 (java.lang)

Java Card 3.0.4: A000000062020802 - 1.0 (javacardx.framework.math)

Java Card 3.0.4: A0000000620003 - 1.0 (java.rmi)

Java Card 3.0.4: A0000000620102 - 1,5 (javacard.security)

Java Card 3.0.4: A000000062010101 - 1.0 (javacard.framework.service)

Java Card 3.0.4: A000000062020804 - 1.0 (javacardx.framework.string)

Java Card 3.0.4: A000000062020803 - 1.0 (javacardx.framework.tlv)

Java Card 3.0.4: A000000062020801 - 1.0 (javacardx.framework.util)

Принимая во внимание приведенную выше информацию, позвольте мне указать, что ответ от Michael Roland немного вводит в заблуждение. призвание JCSystem.getVersion() не помогает определить, поддерживается ли версия Java Card; если вы дошли до того, что вы действительно можете вызвать API, то вы уже уверены, что версия поддерживается.

short version = JCSystem.getVersion();

Метод getVersion() возвращает основную и вспомогательную версию Java Card API (каждая часть в одном байте). Не существует метода для разграничения подверсий (например, между 2.2.1 и 2.2.2).

Только зная, что ваш чип содержит среду выполнения Java Card, нет возможности запросить более конкретную информацию из чипа. (Некоторые чипы могут содержать более конкретную информацию.) Как правило, такую ​​информацию вы должны получить у производителя / вашего поставщика.

Я буду смелым и посоветую как-нибудь обойти эту проблему. Если вы можете загружать апплеты, у вас также обычно есть доступ к диспетчеру карт Global Platform. Диспетчер карт должен поддерживать команду APDU под названием GET CPLC (DATA). Это возвращает данные жизненного цикла производства карт, которые включают в себя идентификаторы производителя чипа (их количество ограничено), производителя ОС и информацию о версии.

Вооружившись этой информацией, вы сможете запросить у создателя ОС дополнительную информацию, например, какая именно версия поддерживается, поддержка Global Platform, дополнительные библиотеки и т. Д. Конечно, это зависит от того, кто и где вы находитесь, если они на самом деле считаю, что вы достойны поддержки.

Небольшая проблема заключается в том, что Visa поддерживает отображение идентификаторов в реальных компаниях. Я еще не нашел определенного списка в Интернете, но более распространенные, кажется, известны.

Другие вопросы по тегам