[语境]
我需要将数据从一个小程序发送到另一个。此外,需要删除并重新安装其中一个小程序。安装后,小程序之间的数据交换需要成为可能。
可共享接口对实现这一点有用吗?
[理论]
一般来说,我想知道可共享接口是一个好主意的情况以及它的主要用途。
[实践]
我从这个答案中举了一个例子,但它不起作用。我想我不明白如何实施。我试图在同一个包中创建两个小程序,一个主,一个从。但是我在6F 00
选择奴隶时得到了。我用两个包做了其他测试。但我得到了同样的错误。
Shareable 允许您在卡上的小程序之间交换数据。但是有一些限制,主要是不能自由交换内部对象。只有允许共享的对象才能通过 Shared 接口。您提到的示例使用一些专有的“SharedArray”接口来实现这一点。
默认情况下,只有标准全局对象(例如 APDU 后备数组)或各种 STK 对象可用于此目的。此外,还可以通过 Shared 接口方法传递简单的值类型,例如 byte 和 short。
在某些情况下,特别是在 STK 环境中,共享接口用于启动操作,而数据通过卡上的单独 EF 传递,该卡用作“邮槽”。
关于实现本身,需要记住 Shareable 接口只是一个标记,因此您需要定义一个继承自 Shareable 的具体接口,以便能够在应用程序中使用它。
上述接口构成了任何使用或实现该接口的应用程序的硬依赖。
因此,如果任何其他小程序/库使用它,则无法删除包含接口定义的包。
常见的选项之一是在单独的库中定义接口并首先安装它。因为它不太可能改变,如果改变了,你无论如何都会改变AID,版本,所有其他客户端都可以自由安装和删除。
最后,请记住,由于与数据共享相关的安全问题,应谨慎使用可共享接口。
我强烈建议您获取一份“智能卡的 Java 卡技术:体系结构和程序员指南”,其中涵盖了这些主题以及更多内容。
按顺序回答你的问题
当一个小程序(客户端小程序)需要访问另一个小程序(服务器小程序)的方法时使用共享接口,前提是两个小程序位于不同的包中。不同包中的小程序由防火墙隔开,以防止跨包访问小程序数据。
Applet 实例可以按任意顺序删除,但 Applet 包应按顺序删除。也就是说,首先删除客户端包,然后删除服务器包。
可共享接口对于对象共享很有用,因为防火墙限制了包之间的对象共享。
对于适当的用例,请阅读本白皮书 - www.usenix.org/legacy/event/smartcard99/full_papers/montgomery/montgomery.pdf
请检查可共享接口实现的解决方案 - https://stackoverflow.com/a/57200926/4752262