Как передать любую команду APDU из выбранного в данный момент апплета в другой апплет?

Вопрос: Предположим, есть несколько экземпляров апплета. В настоящее время выбран один экземпляр апплета. Можно ли передать какую-либо команду APDU из выбранного апплета в другой экземпляр апплета? Я не нашел такого способа в JavaCard API версии 3.0.4.

Подробности. Изучая документ «Спецификации мобильных приложений Expresspay v1.2» для реализации услуги «Выбор приложения», я застрял в следующем разделе 5.3.6. Поскольку документ не является открытым исходным кодом, я цитирую выборочную часть:

«Если мобильное приложение Expresspay выбрано через бесконтактный интерфейс с использованием частичного AID, то оно должно передать команду SELECT и последующие команды активированному экземпляру мобильного приложения Expresspay (которое может быть или не быть выбранным приложением)».

В нем говорится, что мне нужно передать команду SELECT от выбранного в данный момент апплета другому апплету (который активирован!). Но я не нашел в JavaCard API ничего, что бы передавало какую-либо команду из одного апплета в другой. Я провел поиск в сообществе Oracle и нашел это без ответа!

Редактировать: Предположим, что есть три экземпляра A1, A2, A3 апплета A. Апплет A имеет объект общего флага flag, содержащий AID «активного» экземпляра, скажем, AID A2. (Предположим, что flag может быть предварительно инициализирован). В настоящее время выбран экземпляр A1. Теперь терминал отправляет любую команду APDU, которая придет экземпляру A1. A1 проверит flag и обнаружит, что flag содержит AID A2. Таким образом, A1 передаст команду APDU A2 для дальнейшей обработки. Мой вопрос заключается в том, как экземпляр A1 отправляет любую команду APDU экземпляру A2?


person rakeb.mazharul    schedule 28.05.2015    source источник
comment
Вы хотите выбрать другой экземпляр?   -  person JavaCardOS    schedule 28.05.2015
comment
@Ellisun Не совсем так, мне нужно обработать команду SELECT в другом экземпляре.   -  person rakeb.mazharul    schedule 28.05.2015
comment
Вы можете отправить команду SELECT с File occurrence битами на Next occurence.   -  person JavaCardOS    schedule 28.05.2015
comment
Команда (Partial AID) SELECT придет к выбранному в данный момент апплету, затем этот (выбранный в данный момент) апплет примет решение отправить команду другому экземпляру. Вопрос: как это сделать? Дело не в Next occurence.   -  person rakeb.mazharul    schedule 28.05.2015
comment
Я не знаю твоего требования.   -  person JavaCardOS    schedule 28.05.2015
comment
@Ellisun, хорошо, я редактирую свой вопрос на примере.   -  person rakeb.mazharul    schedule 28.05.2015
comment
Является ли активированный экземпляр мобильного приложения Expresspay тем, на который ссылается частичный AID в команде SELECT?   -  person Michael Roland    schedule 28.05.2015
comment
Может или не может. Частичный AID одинаков для всех экземпляров. Текущий выбранный экземпляр апплета узнает, какой экземпляр апплета «активирован», и отправит ему команду.   -  person rakeb.mazharul    schedule 28.05.2015


Ответы (1)


«Если мобильное приложение Expresspay выбрано через бесконтактный интерфейс с использованием частичного AID, то оно должно передать команду SELECT и последующие команды активированному экземпляру мобильного приложения Expresspay (которое может быть или не быть выбранным приложением)».

Большинство смарт-карт Java Card, с которыми я сталкивался до сих пор, поддерживали выбор с помощью частичного AID (в то время как спецификация Java Card RE не требует этого, спецификация карты GlobalPlatform (см. раздел «Явный выбор на базовом логическом канале» ) требует поддержки выбора с помощью частичного AID). Следовательно, команда SELECT обычно заменяет текущий выбранный апплет на апплет с соответствующим AID.

Таким образом, если этот вновь выбранный апплет не обязательно является «экземпляром активированного мобильного приложения Expresspay», то вы, возможно, можете передавать все сообщения через общий интерфейс, предоставляемый активированным экземпляр апплета.

Предположим, что команда SELECT (по частичному AID) приводит к тому, что B является текущим выбранным апплетом, а A является «активированным» экземпляром апплета. Затем A реализует общий интерфейс и предоставляет метод, который можно использовать для передачи команд и возврата ответов от A. Затем B может получить доступ к этому совместно используемому интерфейсу через getShareableInterfaceObject(AID of A, ...) и может использовать этот интерфейс для вызова A для пересылки ему команд. Однако фактическая связь APDU все равно должна выполняться в апплете B. Кроме того, кажется довольно неэффективным передавать команды и ответы между B и A. Кроме того, это не приведет к переключению текущего выбранного апплета на A, поэтому последующие команды по-прежнему будут отправляться на B и также должны передаваться через этот интерфейс.

Гораздо лучший подход, по-видимому, состоит в том, чтобы разрешить GlobalPlatform OPEN обрабатывать вышеуказанное требование (и я предполагаю, что именно так это должно быть реализовано). Для команды SELECT (по частичному AID) команда OPEN (см. раздел «Явный выбор на базовом логическом канале» спецификации карты GP) автоматически выберет первый доступный для выбора апплет. экземпляр. Следовательно, чтобы пометить один из экземпляров вашего апплета как активный, вы должны деактивировать все другие экземпляры апплета для бесконтактного интерфейса. Для этого ваш управляющий апплет (приложение CRS) должен иметь привилегию Бесконтактная активация (и/или каждый экземпляр апплета должен иметь привилегию Бесконтактная самоактивация). для управления собственной активацией). Затем вы можете использовать API GlobalPlatform для управления состоянием активации каждого экземпляра апплета. См. Поправку C к спецификации карты GP. Интересными методами API карты GP кажутся GPCLSystem.getGPCLRegistryEntry(AID) и GPCLRegistryEntry.setCLState(state).

person Michael Roland    schedule 29.05.2015