Java Card 平台规范 (Java Card Classic Edition)
标准编号:JSR 177 (J2ME), JSR 268 (Java Card 3.0 Classic), JSR 290 (Java Card 3.1)
发布组织:Oracle / Java Community Process (JCP)
主要版本:2.2.2 (常见), 3.0.5, 3.1 (2022)
摘要:Java Card 是全球最流行的智能卡应用开发平台,它允许使用 Java 语言编写智能卡上的应用程序(称为 Applet),并在卡上虚拟机 (JCVM) 中执行。规范定义了 Java Card 虚拟机的指令集、运行时环境、API 类库以及应用生命周期管理。凭借其跨平台性、安全性和广泛的工业支持,Java Card 已成为 SIM 卡、金融 IC 卡、身份证等领域的核心技术。
核心组成:
- Java Card 虚拟机 (JCVM):解释执行的虚拟机,专为资源受限环境设计,字节码经过精简。
- Java Card 运行时环境 (JCRE):管理 Applet 的安装、选择、处理和卸载。
- Java Card API:提供 javacard.framework, javacard.security, javacardx.crypto 等包,支持 APDU 命令、安全服务(RSA, AES, 签名)、文件系统等。
- 多应用支持:与 GlobalPlatform 规范结合,实现安全的多应用隔离和管理。
- 原子性和事务机制:确保即使突然掉电,数据也能保持完整性。
- 密钥管理 API:支持 RSA/ECC/AES/DES 等算法的密钥生成、存储和运算。
与 GlobalPlatform 的关系:Java Card 定义 Applet 级行为,GlobalPlatform 定义卡片内容管理框架,两者常结合使用以实现商用多应用智能卡。
官方资源: Oracle Java Card 规范页面 | JSR 290
关联工具: 哈希摘要工具 | 对称加密工具 | 非对称加密工具
Java Card 规范详解
Java Card 规范定义了在资源受限的智能卡芯片上运行 Java 程序的技术平台。由 Oracle(原 Sun Microsystems)发布,当前版本 3.1。Java Card 使开发者可以用 Java 语言编写智能卡应用(Applet),无需直接编写 C 或汇编代码,大幅降低了开发门槛。
与标准 Java 的区别
Java Card 虚拟机(JCVM)是 Java VM 的裁剪版本,受限于卡片硬件资源(通常 RAM 1-10 KB、EEPROM 16-256 KB):不支持多线程、垃圾回收、浮点运算;基本类型只有 boolean、byte、short 和 int(JC 3.1 支持);数组大小在编译时确定;不支持反射和动态类加载。对象持久化由虚拟机自动管理,开发者在代码中创建的对象会自动存储到 EEPROM/Flash。
Applet 生命周期
Java Card Applet 继承 javacard.framework.Applet 类,生命周期由 JCRE(Java Card Runtime Environment)管理:install 方法在安装时调用,做初始化;select 方法在应用被选择时调用;process 方法处理接收到的 APDU 命令;deselect 方法在应用被取消选择时调用;uninstall 方法在应用被删除时调用。开发者主要实现 process 方法,根据 INS 字节分发处理逻辑。
开发与部署流程
典型流程:用 Java 编写 Applet 源码;用 Java Card SDK 编译和转换为 CAP 文件;用 GP 工具(如 GlobalPlatformPro)通过 SCP 协议将 CAP 文件安装到卡片;安装后可通过 SELECT + APDU 命令与 Applet 交互。Java Card 广泛用于 SIM 卡 USIM 应用、银行卡 EMV 应用、政府 ID 卡和 PIV 卡。