2017-09-19 203 views
2

我有一个.CAP文件(小程序),我想将它安装到我的Java卡。 我知道我可以使用像GPShell或apdutool(来自JCDK)的工具来做到这一点,但我想自己复制安装过程。将applet安装到java卡的APDU命令的顺序是什么?

令人困惑的是,在GP标准中,安装过程为:APDU命令INSTALL [用于加载],然后是多个LOAD命令,然后是INSTALL [安装]命令。

虽然oracle文档提出了用于安装.CAP文件的不同APDU命令序列:选择(发行者安全域?),CAP开始,Component ## Begin + Data + End(对于每个组件),CAP End,创建Applet。

两种安装applet的方法是否相同?

LOAD命令DATA字段包含什么? GP标准没有指定,并且我知道从.CAP文件发送原始字节是错误的。 我用GPShell成功安装了小程序,但LOAD命令的DATA字段对我没有任何意义。 GPShell output

对于我用scriptgen从Java卡发展论坛工具包genetate所述APDU命令oracle的方法,但是从这些命令的INS字节(B0,B2,B4,BC,BA)没有GP参考。 scriptgen output

+0

您能否指出Oracle文档?加载.cap文件有不同的方式;官方GP不必使用。但是,GP在99%的时间内使用;更有可能这是描述相同过程的不同方式。 –

+0

我已经删除了[tag:applet]标签,原因很简单,因为当您使用该标签时,Web applet被假定。只需[tag:javacard]就足够了。 –

+0

链接到oracle文档:https://docs.oracle.com/cd/E59935_01/guide/downloading_cap_files_and_creating_applets.htm#GUID-E07D5102-4DC0-4E25-B124-7FB474396C01。 GP标准很可能不包括这个命令区域(INS字节B0,B2,B4,BC,BA)。然而,我会尝试使用oracle平台上的apdu命令序列并查看它是否有效。 – Vbs

回答

3

虽然Oracle文档提出APDU命令 一个不同的顺序来安装。CAP文件:选择(主安全域 ?),CAP开始,组件##开始+数据+端(每个组件),CAP 结束,创建Applet。

在安装小应用程序之前需要选择卡管理器(发卡行安全域 - 根),因为它是在卡上加载和安装小应用程序的责任组件。另外请注意,您需要通过建立安全通道(最好是SCP02)与卡片管理员进行身份验证。

执行APDU的下列顺序安装小程序: -

  1. 选择主安全域(ISD)。 00 a4 04 00 Lc AID_ISD

  2. 使用ISD进行身份验证。

    设置SCP02(参考命令初始化更新,外部认证)。 在这里,您将需要卡的3DES密钥。请参阅随卡提供的文档 。

  3. 发送apdu,安装[for Load]。

混乱的事情是,在GP标准安装 过程是:APDU命令INSTALL [负载]其后是多个LOAD 命令随后INSTALL [用于安装]命令。

  1. 发送apdu,加载块。

    。您将拥有的小程序的cap文件是其组成部分CAP的 文件(http://pfa12.free.fr/doc_java/javacard_specifications/specs/jcvm/html/JCVM06cap.html)的zip文件。所以你需要将每个CAP文件逐个发送到卡上。

    负荷(Header.cap),负荷(Directory.cap)...等等

  2. 发送APDU,安装[用于安装]。安装完成。

+1

OP可能想要查看[GlobalPlatformPro源代码](https://github.com/martinpaljak/GlobalPlatformPro/blob/67ee76e7f189fada318053b6daf2d55d92a1c89c/src/pro/javacard/gp/CapFile.java#L215)其中LOAD块准备好了。 – vlp