Shareable Interface in Javacard: use cases and implementation

时间:2018-06-19 11:10:51

标签: java javacard jcop

[Context]

I need to send data from one applet to another. In addition, one of the applets needs to be deleted and reinstalled. After the installation, data exchange between the applets needs to be possible.

Is Shareable Interface useful to realize that?

[Theoretical]

In general, I would like to know the cases where shareable interface is a good idea and What its principal use.

[Practice]

I took example from this answer but it does not work. I think I did not understand how to implement. I tried to create two applets in the same package, one master and one slave. But I got 6F 00 when slave is selected. I did other test with two packages. But I got same error.

2 个答案:

答案 0 :(得分:2)

可共享允许您在卡上的小程序之间交换数据。 但是,存在一些限制,主要是无法自由交换内部对象的事实。只有允许共享的对象才能通过Shared接口传递。您提到的示例使用一些专有的“ SharedArray”接口来实现此目的。

默认情况下,只能将标准全局对象(例如APDU支持阵列)或各种STK对象用于此目的。 此外,还可以通过Shared接口方法传递简单的值类型,例如byte和short。

在某些情况下,尤其是在STK环境中,使用共享接口来启动操作,同时通过卡上的单独EF(用作“邮槽”)传递数据。

关于实现本身,需要记住Shareable接口只是一个标记,因此,您需要定义一个继承自Shareable的具体接口,以便能够在应用程序中使用它。

对于使用或实现此接口的任何应用程序,上述接口都是硬依赖。

结果,如果任何其他小程序/库都使用包含接口定义的包,则不能删除它。

一个常见的选择是在一个单独的库中定义接口并首先安装它。由于它不太可能更改,并且如果您要更改它,则无论如何都要更改AID版本,因此可以自由安装和删除所有其他客户端。

最后,请记住,由于与数据共享相关的安全问题,应谨慎使用Sharable接口。

我强烈建议您获得一份《智能卡Java卡技术:体系结构和程序员指南》,其中涵盖了这些主题以及更多内容。

答案 1 :(得分:0)

按顺序回答您的问题

  1. [上下文]

当一个小程序(客户端小程序)需要从另一个小程序(服务器小程序)访问方法时,只要两个小程序都位于不同的程序包中,则使用共享接口。不同程序包中的小程序被防火墙分隔以防止访问小程序数据跨包。

Applet实例可以按任何顺序删除,但是Applet包应按顺序删除。也就是说,先删除客户端软件包,再删除服务器软件包。

  1. [理论]

共享接口对于对象共享很有用,因为防火墙限制了程序包之间的对象共享。

为正确使用案例,请仔细阅读本白皮书-www.usenix.org/legacy/event/smartcard99/full_papers/montgomery/montgomery.pdf

  1. [实践]

请检查可共享接口实现的解决方案-https://stackoverflow.com/a/57200926/4752262