我有一个.CAP文件(小程序),我想将它安装到我的Java卡上。 我知道我可以使用像GPShell或apdutool(来自JCDK)这样的工具来做到这一点,但我想自己复制安装过程。
令人困惑的是,在GP标准中,安装过程是:APDU命令INSTALL [for load]后跟多个LOAD命令,然后是INSTALL [for install]命令。
虽然oracle文档提出了用于安装.CAP文件的不同APDU命令序列:选择(颁发者安全域?),CAP开始,组件##开始+数据+结束(对于每个组件),CAP结束,创建小应用程序。
安装applet的两种方法是否等效?
LOAD命令DATA字段包含什么? GP标准没有指定,我知道从.CAP文件发送原始字节是错误的。 我使用GPShell成功安装了applet,但LOAD命令的DATA字段对我没有任何意义。 GPShell output
对于oracle方法,我使用Java Card Developement Kit中的scriptgen来传递APDU命令,但这些命令(B0,B2,B4,BC,BA)中的INS字节没有GP引用。scriptgen output < / p>
答案 0 :(得分:4)
虽然oracle文档提出了不同的APDU序列 用于安装.CAP文件的命令:选择(颁发者安全域? ),CAP begin,Component ## Begin + Data + End(对于每个组件),CAP 结束,创建小程序。
在安装applet之前,需要选择卡管理器(Issuer安全域 - Root),因为它是在卡上加载和安装applet的负责组件。另请注意,您需要通过建立安全通道(最好是SCP02)对卡管理器进行身份验证。
执行以下APDU序列以安装applet: -
选择颁发者安全域(ISD)。 00 a4 04 00 Lc AID_ISD
使用ISD进行身份验证。
设置SCP02(参考命令初始化更新,外部验证)。 在这里,您需要卡的3DES键。请参阅文档 提供卡。
发送apdu,安装[for Load]。
令人困惑的是,在GP标准中安装 进程是:APDU命令INSTALL [for load]后跟多个LOAD 命令后跟INSTALL [for install]命令。
发送apdu,加载块。
您将拥有的applet的.cap文件是其组成CAP的压缩文件 文件(http://pfa12.free.fr/doc_java/javacard_specifications/specs/jcvm/html/JCVM06cap.html)。因此,您需要将每个CAP文件逐个发送到卡上。加载(Header.cap),加载(Directory.cap)......等
发送apdu,安装[安装]。安装完成。