Applet没有收到带有下一次出现的JavaCard SELECT

问题描述 投票:2回答:1

我有一个应用程序,RESET Privilege是重置后默认选择的应用程序。

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

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

但是,当接收SELECT DF下一次出现时(A4 04 02),这不会发生。相反,卡返回以下SW:6A85-条件不满意。

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

我的问题是:如果没有安装匹配的应用程序,卡OS是否应该转发此APDU?对于已经选择了应用程序的选择,这是假定的行为。

另一个问题:有没有办法解决/规避这个问题,或者您认为这可能是操作系统错误?或者根本不是这样的情况?

例:

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.

我正在使用恩智浦JCOP3卡。

提前致谢。

smartcard javacard apdu jcop
1个回答
3
投票

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

6.4.2.1.2基本逻辑信道的显式选择

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

运行时行为

以下要求适用于基本逻辑通道上的显式应用程序选择(SELECT [by name])过程中的OPEN(如果卡生命周期状态为TERMINATED,则此行为不适用):

....几个案例跳过....

  • 如果根本找不到完全匹配或部分匹配,则基本逻辑信道上当前选择的应用程序将保留所选应用程序和 如果SELECT [by name]命令设置了[first or only occurrence]参数,则会将SELECT命令分派给Application。 如果SELECT [by name]命令设置了[next occurrence]参数,则OPEN将向卡外实体返回相应的错误。

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


对于第二个问题:

  • 我敢打赌,没有半简单的方法可以使用你的特定卡来修复/规避这个问题。
  • 还有其他卡的工作方式不同 - 使用哪个卡取决于您的用例。

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.