当前位置: 首页 > 知识库问答 >
问题:

关于Javacards中SELECT APDU命令的几个问题

南门祯
2023-03-14

下面引用的文章是一篇名为《如何编写Java卡小程序:开发人员指南》的文章的一部分,作者是陈志群。

我在这里看到了

一旦选择了一个小应用程序,JCRE就会将所有后续的APDU命令(包括SELECT命令)转发给小应用程序的进程()方法。在进程()方法中,小应用程序解释每个APDU命令,并执行命令指定的任务。对于每个命令APDU,小应用程序通过发回响应APDU来响应CAD,该响应APDU将处理命令APDU的结果通知CAD。javacard.framework.Applet类中的进程()方法是一种抽象方法:Applet类的子类必须重写此方法才能实现小应用程序的功能。”

更新:

下面这段话也是一篇名为编写JavaCard小程序的Oracle文章的一部分(此处):

检查标题

process方法检查APDU头的前两个字节,即CLA字节和INS字节。如果CLA字节的值为0,INS字节的值为0xA4,则表示这是SELECT APDU命令的头。在这种情况下,process方法将控制权返回给JCRE:

// check SELECT APDU command 
if ((buffer[ISO7816.OFFSET_CLA] == 0) &&
(buffer[ISO7816.OFFSET_INS] == (byte) (0xA4)) )  
 return;

如果JCRE将SELECT App2 APDU命令发送给App1的process()方法,那么在收到来自它的返回后会发生什么?!

如果JCRE在接收到SELECT App2 APDU命令后立即调用app1的DISELECT(),然后调用App2的SELECT(),那么它在从App2 SELECT()方法接收到true后会做什么?它会等待下一个命令吗?

问题1:根据以上段落(特别是粗体部分),我得出结论,我可以编写一个小程序,当它选择时,不可能选择另一个小程序(直到卡从CAD中移除)。为此,我们只需要在其process()方法中编写一个代码,以便在收到select APDU命令时选择自身。是这样吗?

问题2:有没有办法在不发送另一个选择命令或从CAD中删除卡片的情况下取消选择小程序?

问题3:是否可以在另一个活动小程序的后台以保持活动的方式编写小程序?(有点像计算机中的钥匙记录器)我自己认为这是不可能的,因为java卡与多线程不兼容。是这样吗?

感谢任何帮助。

共有2个答案

松俊美
2023-03-14

问题0:如果收到按名称选择,JCRE将检查APDU partialEquals()中指定的AID是否有JCRE注册的AID。如果JCRE没有注册此类帮助,则按名称选择APDU将发送到当前选定的小程序。如果JCRE注册了此类辅助,则无论当前选择的小程序是什么,当前选择的小程序都将被取消选择(调用deselect()),并选择具有匹配辅助的小程序(调用select()并将selectingApplet()=True传递给process())。

郑哲彦
2023-03-14

Q0(更新):如果收到未选择当前小程序的按名称选择,则:

  • 如果选择了另一个Applet,则只调用desSelect方法
  • 如果没有选择其他Applet,则只调用进程方法

Q1:不会。系统在将所有SELECT转发给Applet进程方法之前,仍然会按NAME APDU处理所有SELECT。因此,在将SELECT发送到当前选择的小应用程序之前,可以选择另一个Applet,而新选择的Applet将接收APDU。

请注意,如果在当前小程序的帮助下收到按名称选择,系统甚至会重新选择当前小程序(因此,取消选择时清除的所有内存和对象都将被清除,并且将调用选择取消选择方法)。

请注意,后来的API(Chen的书仍然适用,但有点过时)添加了一种方法来检查APDU是否用于选择当前的小程序。这也有助于检查它是如何选择的,这主要是在默认情况下,即在收到任何APDU之前,也选择了小程序时很有用。

Q2:不,目前没有。这是棘手的功能,将有防火墙和安全的影响。所以这不会是一个小的更新Java卡标准。它出现了相当多的论坛虽然。你可能会访问其他小程序通过防火墙当然。

问题3:确实没有背景任务。添加多线程将彻底破坏Java Card Classic Edition的API,因此它永远不会被添加。要共享信息,两个小程序必须明确设计为共享信息,防火墙规则将生效。

 类似资料:
  • 我目前正在尝试用cubey地形制作一个基本游戏,类似于Minecraft classic。我的第一个问题: 如何在VBO中存储多维数据集列表,然后在更改该数据时重新生成该列表?我当前呈现的立方体如下所示: 我知道我需要使用和来修改VBO,但是如何存储多维数据集并在需要时删除它们?我应该使用ArrayList吗?另外,有人告诉我,我渲染立方体的方式是错误的,因为每个人都说我只渲染一个具有新坐标的立方

  • 如果我想为spring quartz使用cron触发器,quartz是使用java系统时间还是操作系统时间执行作业? 我计划有一个属性文件来保存我所有的cron触发器。如果有人去更改cron触发器以执行一个任务,那么quartz会自动接收文件中的更改吗?或者,如果这不是默认行为,我有没有办法告诉quartz如何执行此操作。 我最近一直在读spring批处理管理控制台。听起来像是一个很好的重新安排作

  • 做作业的时候,算法的实现洪流填满了。我正在为这个指南编写一个程序:http://en.wikipedia.org/wiki/flood_fill。我有一些问题: 指定函数中的参数替换任何字符的颜色是否正常,我不知道这些坐标最初是什么颜色? 算法正确吗?例如,我在维基百科中编写了它,但我的程序的结果如下: 我的代码:

  • > 我在多个地方读到,由于U2F没有用户的概念,所以它可以用作登录的因素之一(在MFA中),但对于无密码来说并不理想,而webauthn有用户的概念,这可以帮助使用无密码。我的问题是webauthn为允许这样做而增加的额外内容是什么?是的,我们在创建凭据时传递用户信息,但最终返回的是一个凭据id(它似乎非常类似于keyhandle)并用于关联用户(在服务器上)。据我所知,webauthn def的

  • 上图是一个 wordpress 主题的文件部分结构 一直弄不懂 front-page.php, home.php 这两个文件到底有什么区别? 都是代表首页吗? home.php 和 single.php 又有什么区别? 如果查看单篇文章会进入 single.php, 那 home.php 为什么会被叫做文章页? 文件有点混淆, 求大佬指点指点..

  • 本文向大家介绍关于shell的几个不为人知却十分有用的命令分享,包括了关于shell的几个不为人知却十分有用的命令分享的使用技巧和注意事项,需要的朋友参考一下 最近一直在使用Linux操作系统,也熟知一些简单的命令,那么下面我将介绍几个不为人知却十分有用的命令: 1.mtr命令,查看mtr运行的主机和某个网站的直接网络连接,如下 mtr google.com 显示一下内容 2.nl命令,给所查看的