2017-09-19 204 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