как OPSystem.setATRHistBytes работает в картах, совместимых с GlobalPlatform?

Цитата из документации API GP2.1.1:

setATRHistBytes
public static boolean setATRHistBytes(byte[] baBuffer,
                                      short sOffset,
                                      byte bLength)
This method sets the historical bytes of the ATR (Answer To Reset) string. The sequence of bytes will be visible on a subsequent power-up or reset.

Notes:

    This method shall not be invoked from the Applet.install() method.
    
The OPEN locates the entry of the current applet context in the Open Platform Registry and verifies that the application has the "default selected" privilege.
    The OPEN is responsible for updating the length of historical bytes in Format Character T0 of the ATR.

    Parameters:

    baBuffer - the source byte array containing the ATR historical bytes. Must be a global array.
    sOffset - offset of the ATR historical bytes within source byte array.
    bLength - the number of historical bytes.

    Returns:
    true if ATR bytes set, false otherwise.

Вопрос 1: Принуждает ли GP выбирать апплет по умолчанию для изменения байтов истории ATR?

Вопрос 2: Изменяет ли GP только ATR с холодным сбросом? Или ATR теплого сброса тоже меняется?

Вопрос 3: Как я могу получить ATR теплого сброса моей карты? Есть ли какая-нибудь команда для этого? Это зависит от читателя?


person Ebrahim Ghasemi    schedule 24.08.2020    source источник


Ответы (2)


Вопрос 1: Принуждает ли GP выбирать апплет по умолчанию для изменения байтов истории ATR?

Нет, апплет должен иметь эту привилегию #5 (или привилегию сброса карты в GP v2.2, см. таблицу 11-7), чтобы иметь возможность изменить ее. Он устанавливается во время INSTALL [и делает его доступным для выбора]. По сути, его нужно выбрать по умолчанию при загрузке, иначе он не сможет изменить исторические байты ATR. Для многоцелевых карт это может быть проблемой, хотя можно сказать, что это ограничение ISO 7816-4 и протокола, а не Java Card/Global Platform.

2 фрагмента из спецификации Global Platform v2.2:

Привилегия «Выбрано по умолчанию» переопределена как привилегия «Сброс карты» для изменения исторических байтов. Приложение может отказаться от явного выбора, например. потому что он не поддерживает текущий интерфейс ввода-вывода карты и позволяет продолжить процесс (частичного) выбора с помощью OPEN. Чтобы обеспечить обратную совместимость, привилегия предоставляет неявную возможность выбора, если она не была предоставлена ​​другому приложению.

Наличие Привилегий обязательно. Если приложение только устанавливается и не может быть выбрано с помощью той же команды INSTALL, привилегия сброса карты не может быть установлена.

Вопрос 2: Изменяет ли GP только ATR холодного сброса? Или ATR теплого сброса тоже меняется?

Обычно оба изменяются, и большинство платформ, по крайней мере, инициируют их с одинаковыми значениями. Обратите внимание, что изменяются только исторические байты, которые обычно указывают тип карты, но не параметры связи (скорость, значения времени ожидания и т. д.)

Вопрос 3. Как я могу получить ATR для теплого сброса карты? Есть ли какая-нибудь команда для этого? Это зависит от читателя?

Обычно вы просто выполняете сброс без отключения питания. Это, безусловно, можно сделать с помощью стандартных команд, таких как SCardReconnect но я не уверен в других инструментах. Как правило, вы просто выполняете сброс, а для холодной перезагрузки просто удаляете карту, считыватель или просто питание.

Как правило, вы не ожидаете разницы между «холодной» и «горячей» перезагрузкой, но, безусловно, можно использовать разные значения ATR для обоих (из частной информации о нескольких чипах Java Card). У поставщиков обычно есть метод установки полного ATR при наличии достаточных привилегий и знания проприетарных команд.

person Maarten Bodewes    schedule 25.08.2020

Относительно 1: я никогда раньше не использовал эту команду, но при чтении:

OPEN находит запись текущего контекста апплета в реестре GlobalPlatform и проверяет, имеет ли Приложение привилегию Default Selected.

Я бы предположил, что любая совместимая реализация должна обрабатывать это таким образом. Есть ли причина не верить в это, или вы спрашиваете, игнорирует ли это большинство вендоров? Поскольку исторические части содержат информацию, относящуюся к выбранному по умолчанию приложению (например, есть ли у карты MF, как читать EF.DR, AID приложения по умолчанию, страна-эмитент и т. д.), проверка этой привилегии имеет смысл. Сегодня это может быть неуместно в мире смарт-карт с несколькими приложениями.

Относительно 2: Поскольку исторические байты имени указывают, что изменена только эта часть ATR. Другие части, такие как тактовая частота, могут различаться между холодным и теплым ATR.

Относительно 3: просмотрите команду ПК/SC SCardConnect. См. SCARD_RESET_CARD и SCARD_UNPOWER_CARD.

person k_o_    schedule 24.08.2020