Можно ли запросить у смарт-карты GlobalPlatform оставшуюся постоянную память?

У меня есть карта JavaCard, и я могу вызвать JCSystem.getAvailableMemory(MEMORY_TYPE_PERSISTENT) и вернуть ее из своего апплета, но мне нужно точное значение, если оно превышает 32767 байт.


person Ryan Russell    schedule 26.07.2011    source источник


Ответы (2)


Javacard с поддержкой GP 2.2 + ETSI

Если ваша карта поддерживает Global Platform 2.2 и ETSI, вы можете использовать команду GET DATA.

В разделе 11.3 спецификации карты GP 2.2 говорится, что

Tag ‘FF21’: Extended Card Resources Information available for Card Content Management, as defined in ETSI TS 102 226.

А в ETSI 102.226, раздел 8.2.1.7.2:

После успешного выполнения команды поле данных ответа GET DATA должно быть закодировано, как определено в GlobalPlatform [4]. Значение объекта закодированных данных TLV, упомянутого в опорных параметрах управления P1 и P2 командного сообщения, равно:

Length Description                            Value
  1    Number of installed application tag    '81'
  1    Number of installed application length  X
  X    Number of installed application
  1    Free non volatile memory tag           '82'
  1    Free non volatile memory length         Y
  Y    Free non volatile memory
  1    Free volatile memory tag               '83'
  1    Free volatile memory length             Z
  Z    Free volatile memory

Ответ этой команды не ограничен значением short, потому что он использует формат TLV, что означает, что вы можете проверить свободную память, размер которой превышает 32767 байт.

person David    schedule 23.01.2014
comment
Я сталкиваюсь с 0x6A88, когда отправляю команду получения данных с p1p2 как «FF21». - person Abhishek; 25.11.2020

Вообще нет возможности получить точное количество свободной памяти с карты с помощью стандартного Java Card API. Поскольку большинство карт Java не поддерживают даже целочисленные значения, максимальное значение, которое можно получить с помощью метода API, равно 32767 (верхняя граница короткого числа со знаком).

Если вам повезет, может быть какой-то проприетарный метод API от производителя карты/ОС. Я видел некоторые проприетарные API-интерфейсы карт NXP JCOP, но ни один из них не способен получить объем свободной памяти, если он превышает верхнюю границу короткого со знаком.

person groissi    schedule 29.07.2011
comment
Что я действительно ищу, так это способ попросить карту через интерфейс GlobalPlatform. Если такой вещи не существует, это мой ответ. - person Ryan Russell; 30.07.2011
comment
Нет такой вещи, есть ваш ответ. Гроисси упомянул проприетарные API, а также в GP 2.2 есть управление квотами памяти, но реализовано ли оно на той или иной карте, зависит от производителя. И даже если она есть, карты вряд ли дадут вам точное количество доступной памяти - они точно оставят хороший объем для транзакций и внутренних операций. - person foo; 23.03.2012