首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Card 技術深度解析:架構、通訊協定與應用開發

     編輯:Java 相關知識

Java 技術根據運算資源的不同,劃分為企業級、嵌入式、智慧卡等不同平台。其中 Java Card 是 Java 平台中最精簡的子集,專為智慧卡晶片等嚴格受限的硬體環境設計。本文將深入探討 Java Card 的運作邏輯、硬體需求、軟體架構、API 結構,並透過實際程式碼範例示範 Applet 開發流程。

一、前言:Java 平台的多元化演進

Java 技術因應不同裝置的運算能力,衍生出多種平台。嵌入式 Java 因功能有限且受硬體資源(如傳呼機)限制,必須在執行環境上妥協;Java Card 則針對智慧卡等極度受限資源環境開發,是目前最小的 Java 平台。其核心目標是將 Java 的跨平台特性與多應用優勢帶入智慧卡領域,符合 ISO 7816 及 EMV 等國際標準。

二、Java Card 核心優勢

  • 平台獨立性:Applet 可在不同卡片的 Java Card Application Environment (JCAE) 上執行,透過 Java VM 實現跨平台。
  • 多應用能力:單一卡片可儲存多個 Applet,並支援動態下載,實現一卡多用。
  • 標準相容性:相容 ISO 7816 智慧卡標準及 EMV 支付標準。

未來應用場景涵蓋身份識別、醫療記錄、電子錢包、門禁管控等,甚至可將多種應用整合於單一卡片。

三、運作邏輯與 APDU 通訊協定

Java Card 系統分為卡端與終端機兩部分。卡端配合讀卡機 (CAD) 進行資料傳輸與供電,執行 Applet 保護敏感資料;終端機提供服務程式與操作介面,透過 CAD 與卡片溝通。雙方通訊遵循 APDU (Application Protocol Data Units) 協定。

Java Card 運作模式圖

圖1:Java Card 運作模式

Command APDU 結構

終端機發送給卡片的指令格式如下:

Command APDU 格式

圖2:Command APDU 格式

欄位名稱說明
CLAClass Byte識別 Applet 類別
INSInstruction Byte下達給 Applet 的指令碼
P1Parameter 1第一指令參數
P2Parameter 2第二指令參數
LcLength of Data資料欄位長度
Data Field資料欄位實際傳輸資料
LeLength of Response期望回傳資料長度

例如:CLA=0x80, INS=0x01 (加法指令),Data Field 含兩個 byte 運算元。

Response APDU 結構

卡片回傳終端機的回應格式:

Response APDU 格式

圖3:Response APDU 格式

欄位說明
Data Field回傳資料內容
SW1, SW2狀態字,如 0x9000 表示成功

四、硬體規格需求

Java Card 如微型電腦,最低硬體規格:

  • 512 bytes RAM:執行堆疊、暫存資料、I/O 緩衝區
  • 24 KB ROM:儲存系統程式、JVM、Applet、Native Functions
  • 8 KB EEPROM:儲存下載的 Applet 及物件堆疊
  • 8-bit 處理器:至少支援 8 位元 CPU

五、軟體架構分層

Java Card 軟體架構圖

圖4:Java Card 軟體架構

  1. OS & Native Functions:底層作業系統與原生函式
  2. Java Card Interpreter:位元組碼解譯器
  3. Java Card APIs & Framework:核心 API 與框架,合稱 JCRE (Java Card Runtime Environment)
  4. Industry Add-on Classes:服務提供者擴充類別
  5. Java Card Applets:最上層應用,單一卡片可執行多個 Applet,但無多執行緒支援,一次僅執行一個,Applet 間有防火牆隔離,可透過 Shareable 介面共享資源。

六、執行環境支援現況

支援不支援
boolean, byte, short, int
Dynamic Object Creation
Arrays
Exceptions
Interfaces
float, double, long, char, Strings
Dynamic Class Loading
Security Manager
Virtual Methods
Garbage Collection & Finalization
Threads
Packages
Cloning
Multi-dimensional Arrays

七、Java Ring 簡介

Java Ring (iButton) 為 Dallas Semiconductor 產品,將 Java Card 封裝為鈕扣狀鑲嵌於戒指,硬體架構延伸自 Java Card,開發出不同應用層面。

八、Java Card API 套件結構 (v2.1)

  • javacard.lang:核心語言類別 (Object, Throwable 等)
  • javacard.framework:核心框架,含 APDU, Applet, PIN, Shareable, AID, JCSystem, OwnerPIN, Util 等關鍵類別
  • javacard.security:安全機制,含 Key, KeyBuilder, MessageDigest
  • javacardx.crypto:加密功能 (含 Cipher),受美國出口管制

九、HelloWorld Applet 完整範例

package samples.HelloWorld;
import javacard.framework.*;

public class HelloWorld extends Applet {
    private static final byte echoBytes[] = {
        0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64 // "HelloWorld"
    };

    protected HelloWorld(APDU apdu) {
        register(); // 向 JCRE 註冊
    }

    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new HelloWorld(null); // 安裝實例化
    }

    public void process(APDU apdu) throws ISOException {
        byte[] buffer = apdu.getBuffer();
        Util.arrayCopyNonAtomic(echoBytes, (short)0, buffer, (short)0, (short)echoBytes.length);
        apdu.setOutgoingAndSend((short)0, (short)echoBytes.length);
    }
}

此範例示範 Applet 生命週期:安裝、註冊、處理 APDU 指令並直接回傳 "HelloWorld" 訊息。實際部署時需編譯、轉換為 CAP 檔並下載至卡片。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved