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。
祝你好运!
我有一个具有 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。
祝你好运!