Applet 未收到下一次出现的 JavaCard SELECT

JavaCard SELECT with Next Occurrence Not Received by Applet

我有一个具有 RESET 权限的应用程序是重置后的默认 selected 应用程序。

我的应用程序有一个日志记录机制,可以准确地告诉向卡发出的请求是什么。根据当前状态,我有几个动态响应。我还用卡片间谍检查了行为。

所有 APDU 都被正确转发到我的应用程序,包括那些 SELECT 不属于它并且与卡上的任何其他应用程序都不匹配的那些。

然而,当收到 SELECT DF 下一次出现 (A4 04 02) 时,不会发生这种情况。相反,卡返回以下 SW:6A85-不满足条件。

现在..我明白卡片可能在做什么,这是检查当前是否有一个应用程序 select 指定了相同的 AID 并会尝试 select 下一个应用程序具有相同的ID。 (事实并非如此。卡上没有冲突的 AID)。

我的问题是:卡OS是否应该在没有安装匹配的应用程序的情况下不转发这个APDU?这是 selects 的假设行为,其中已经有一个应用程序 selected.

另一个问题:有没有办法fix/circumvent这个或者你认为这可能是一个OS错误?或者根本不是这样?

示例:

Card Reset

-> 00 A4 04 00 07 AIDx7..
<- My Applet 90 00

-> 00 A4 04 02 07 AIDx7...
<- Card 6A 85

Moves on to other selects
My applet is still selected.

我使用的是 NXP JCOP3 卡。

提前致谢。

引用 GlobalPlatform Card Specification Version 2.3,第 68 页:

6.4.2.1.2 Explicit Selection on Basic Logical Channel

..跳过了一些段落....

Runtime Behavior

The following requirements apply to the OPEN in the explicit Application selection (SELECT [by name]) process on the Basic Logical Channel (This behavior does not apply if the card Life Cycle State is TERMINATED):

..跳过了几个案例..

  • If no full or partial match is found at all, the currently selected Application on the Basic Logical Channel shall remain the selected Application and

    • If the SELECT [by name] command has the [first or only occurrence] parameter set, the SELECT command is dispatched to the Application.

    • If the SELECT [by name] command has the [next occurrence] parameter set, the OPEN shall return the appropriate error to the off-card entity.

这与您描述的行为完全匹配(需要说明的是,您的 JCOP 可能受制于某些早期版本的 GlobalPlatform 卡规范)。


第二个问题:

  • 我敢打赌,使用您的特定卡没有 semi-easy 方法 fix/circumvent。

  • 还有其他卡片的工作方式不同 -- 使用哪一张取决于您的 use-case。

祝你好运!