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

时间:2018-02-28 22:01:08

标签: smartcard javacard apdu jcop

我有一个应用程序,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卡。

提前致谢。

1 个答案:

答案 0 :(得分:3)

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

  

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

....有些段落跳过....

  

运行时行为

     

以下要求适用于显式应用程序选择中的OPEN(SELECT [按名称])   基本逻辑信道上的处理(如果卡生命周期状态为,则此行​​为不适用   终止):

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

  
      
  • 如果根本找不到完全匹配或部分匹配,则基本逻辑通道上当前选定的应用程序   应保留所选应用程序和

         
        
    • 如果SELECT [by name]命令设置了[first or only occurrence]参数,则SELECT   命令被分派到应用程序。

    •   
    • 如果SELECT [by name]命令设置了[next occurrence]参数,则OPEN应该   将适当的错误返回给卡外实体。

    •   
  •   

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

关于第二个问题:

  • 我敢打赌,没有一种简单的方法可以使用您的特定卡来修复/规避这一点。

  • 还有其他卡的工作方式不同 - 使用哪种卡取决于您的使用情况。

祝你好运!