lxg*_*xgr 5 javacard globalplatform
在Java Card中,通常可以从卡上现有应用程序的上下文中安装新应用程序,例如通过应用程序定义的消息传递格式发送新代码,然后使用某些卡创建新的应用程序实例经理API?
或者这只能在外部使用相应的APDU吗?
如果这是Java Card和/或GlobalPlatform规范未涵盖的内容,是否可以使用特定于供应商的方法来完成?
不,这是不可能的.
您无法将applet中的APDU发送到Card Manager小程序,这是安装新小程序所需的内容.卡管理器也不Shareable为此任务提供任何接口(通常).
唯一的方法是通过终端发送APDU,但它不是你想要的.这种方式很简单:您的applet需要保存新安装的applet的完整二进制文件和Card Manager的密钥.
然而!
您可以使用所谓的主动命令通过SIM卡上的另一个小程序安装小程序,请参阅此SO答案.如果设备允许,您可以将PERFORM CARD APDU命令从第一个SIM插槽发送到第二个SIM插槽,并以这种方式安装新的小程序.然后你可以在SIM2上使用这个新applet在SIM1上安装另一个applet.
此外,您可以使用主动命令发送OTA命令并远程安装新的applet实例.几年前,我用一对非常简单的小程序和一张测试SIM卡试用了它,它起作用了.
从理论上讲,有可能实现一个Java Card小程序,只要你拥有所有必要的密钥,它就会在移动网络上传播.然而,这与Java Card quine密切相关,据我所知,这仍未解决.
从理论上讲,这可能适用于普通的Java卡,因为:
SecureChannel.processSecurity)之前,applet可以接收和更改APDU缓冲区- 因为processSecurity它本身应该根据规范检索命令数据,这比您可能首先想到的更不可能;在这种情况下,您可以将自己的APDU转换为符合GP规范的特定APDU,并只需调用SecureChannel.processSecurity即可对其进行处理.
实际上我不认为上面会是这种情况,但你永远不会知道.你明确地讨论了为卡实现定义的安全协议,所以我很确定任何审计解决方案的人都会被问到非常明确的问题.
现在,如果您只想通过自己的安全域安装applet,那么Global Platform将明确涵盖这一点.如果支持安全域和INSTALL [for Load],那么您只需检查产品的手册即可.
正如vojta已经指出的那样,没有用于移交INSTALL [for Load]命令的API,因此以编程方式你将被卡住.
一种令人难以置信的愚蠢方法是编写自己的VM并将其安装为applet.在99.999%的案例中可能不实用.当然,它仍然只能作为VM本身到达,它不会由卡给出它自己的应用程序ID(AID).
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |