繁体   English   中英

更改JavaCard Applet的版本

[英]Change version of a javacard applet

考虑一种情况,其中对卡进行个性化并且将新数据存储在javacard中。如果我们对aplet进行了很小的更改,并且想要更新javacard上的applet版本,则先前存储在card上的数据会发生什么情况,因为每个applet有自己的安全域(SD),我认为所有数据都存储在当前applet的SD中,因此新安装会导致删除以前的applet,那么存储数据又发生了什么?

问候

找到了在网上搜寻的答案:请检查此链接

萨法默在链接中说:

不幸的是,您只能删除并重新安装。 据我了解,这是由于卡上的资源有限。 您将需要在卡上拥有applet的两个副本,以进行原子更新,然后删除原始副本。 我认为这不是一种非常可行的方法。

这样做的关键是要在受控的环境中完成操作,这样您就可以完全控制并可以在卡断开等情况下重新运行。例如,不能通过Internet在线更新。

也:

您定义了一个存储数据的applet和一个可用于访问此applet的SIO。 业务逻辑进入另一个小程序,并调用接口上的方法以获取或设置另一个小程序中的数据。 您的业​​务逻辑可以删除并重新安装而不会影响数据。 这是简化的一个段落版本。

这是我搜索SIO的结果:

共享接口是Java Card API中启用小程序交互的功能。对于拥有的上下文,SIO是可访问其字段和方法的普通对象。 在任何其他上下文中,SIO都是可共享接口的实例,并且只能访问可共享接口中定义的方法。 SIO的所有其他字段和方法均受防火墙保护。 共享接口提供了一种用于小程序间通信的安全机制,如下所示:

服务器小程序A构建一个可共享的接口对象

  1. 为了使对象可用于在不同上下文中与另一个小程序共享,小程序A首先定义了一个可共享的接口SI。 可共享的接口扩展了接口javacard.framework.Shareable。 共享接口SI中定义的方法表示小程序A使其他小程序可以访问的服务。

  2. 然后,小应用程序A定义了一个类C,该类实现了可共享的接口SI。 C实现了SI中定义的方法。 C还可以定义其他方法和字段,但是这些方法和字段受到applet防火墙的保护。 其他小应用程序只能访问SI中定义的方法。

  3. Applet A创建类C的对象实例O。O属于Applet A,并且防火墙允许A访问O的任何字段和方法。

客户端小程序B获得可共享接口对象

  1. 小程序B可以通过调用SIO的一种共享接口方法来向小程序A请求服务。 在调用期间,Java Card VM执行上下文切换。 原始的当前活动上下文(B)保存在堆栈中,实际对象(O)的所有者(A)的上下文成为新的当前活动上下文。 A的可共享接口方法(SI方法)的实现在A的上下文中执行。

  2. SI方法可以通过JCSystem.getPreviousContextAID方法找到其客户端(B)的AID。 该方法确定是否将为小程序B执行服务。

  3. 由于上下文切换,防火墙允许SI方法访问对象O以及A上下文中任何其他对象的所有字段和方法。同时,防火墙阻止该方法访问对象中非共享对象。 B的上下文。

  4. SI方法可以访问B传递的参数,并可以向B提供返回值。

  5. 在返回期间,Java Card VM执行恢复上下文切换。 原始的当前活动上下文(B)从堆栈中弹出,并再次成为当前活动上下文。

  6. 由于上下文切换,防火墙再次允许B访问其任何对象,并阻止B访问A上下文中的非共享对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM