【问题标题】:Can an APDU command be executed *inside* the Java Card Applet?APDU 命令可以在*内部* Java Card Applet 中执行吗?
【发布时间】:2018-04-30 11:33:44
【问题描述】:

我们知道 Applet.process() 方法在 APDU 请求和它的 APDU 响应之间调用,即它可以读取一些传入的 APDU 并发送一些传出作为响应。

但是,Applet 可以发送自己的 APDU 命令并获得响应吗?即:

public void process(APDU apdu)
{
...
APDU resp = SomeAPI.someMethod("00A40101FF...");
...
}

【问题讨论】:

  • 如果你想拦截智能卡通信,使用硬件设备会更容易(例如Smartspy

标签: smartcard javacard jcop


【解决方案1】:

但是,Applet 可以发送自己的 APDU 命令并得到响应吗?

简单的答案是,您不能为另一个小程序发送 APDU,因为您无权访问命令调度程序。但是有一种方法可以做到这一点,请阅读下文。

public void process(APDU apdu)
{
...
APDU resp = SomeAPI.someMethod("00A40101FF...");
...
}

这样的事情在 java 卡小程序(直到最新版本 3.0.5u)中是不可能的,因为这里存储了 APDU 对象的引用,临时 JCRE 入口点对象及其引用不能存储起来。

现在,实现你想要的功能。使用可共享的界面对象。显然,您需要在此处修改目标小程序(您要调用的)。通过可共享对象调用小程序将为您进行上下文切换,之后您可以返回到您的小程序。

参考http://www.oracle.com/technetwork/java/javacard/specs-jsp-136430.html

【讨论】:

    【解决方案2】:

    不,它不能。

    您无权访问命令调度程序。

    【讨论】:

      【解决方案3】:

      我假设您不打算通过串行接口与目标 Applet 通信,而是寻找“执行与接收此 APDU 时相同的功能”。

      我有一些疑问,是否存在这样的接口并没有看到用例,原因如下:

      • 在 javacard 环境中,applet 是自主构建块。
      • 如果您打算在同一个 Applet 中调用,应该有更方便的可能性。
      • 如果针对不同的小程序:隐含的向前和向后切换根本不符合当前选定小程序的 APDU 概念。

      【讨论】:

      • 嗯,可能我打算从我的Applet.process 中选择另一个 Applet(是的,从他那里,而不是从主机那里),用它做点什么,然后“返回”到我的 Applet。有可能吗?如何实现?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多