
本文介绍在 java 环境下将 applet 安装至 java card(如 acosj-di 95k)的标准流程,重点说明基于 global platform(gp)规范的卡片管理机制、双向认证原理及推荐工具链,避免从零实现底层指令。
本文介绍在 java 环境下将 applet 安装至 java card(如 acosj-di 95k)的标准流程,重点说明基于 global platform(gp)规范的卡片管理机制、双向认证原理及推荐工具链,避免从零实现底层指令。
在 Java Card 生态中,Applet 的加载与安装并非通过普通 APDU 命令直接完成,而是严格遵循 Global Platform(GP)规范——该规范定义了卡片生命周期管理、安全域(Security Domain)权限模型、密钥体系以及核心操作(如 SELECT、INSTALL [for load & install]、MAKE SELECTABLE)的标准化流程。ACOSJ-DI 95K 等商用 Java Card 均内置 GP 兼容的 Card Manager(通常为 0xA0:0x00:0x00:0x00:0x03:0x00:0x00:0x00),所有 Applet 部署必须经其授权与认证。
关键步骤:双向认证(Mutual Authentication)
安装前必须与 Card Manager 建立安全通道,即执行 GP 标准的 Mutual Authentication:
- 卡片与终端(PC/Reader)交换随机数(
RND.IC/RND.IF),使用预共享的密钥(如 Default Key 或个性化密钥)加密计算会话密钥(KENC,KMAC,KDEK); - 双方验证对方响应的 MAC 和加密随机数,确认身份与通道完整性;
- 认证成功后,后续所有 INSTALL、DELETE 等敏感命令均被加密和 MAC 保护。
⚠️ 注意:默认密钥(如
404142434445464748494A4B4C4D4E4F)仅用于开发测试;生产环境必须使用个性化密钥,并通过PUT KEY命令安全注入。
推荐实践:使用成熟 GP 工具链(非手写 Java APDU)
自行实现 GP 协议栈复杂且易出错(涉及密钥派生、加密填充、MAC 计算、状态机同步等)。强烈建议采用经过验证的开源工具:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
GlobalPlatformPro(推荐首选)
基于 Java 的命令行工具,支持完整 GP 流程:# 连接读卡器,执行双向认证(使用默认密钥) gp -install MyApplet.cap -key 404142434445464748494A4B4C4D4E4F # 指定 AID 安装并设置为可选 gp -install MyApplet.cap -AID A00000000102030405 -key 404142434445464748494A4B4C4D4E4F
可直接在 Java 应用中通过
Runtime.getRuntime().exec()调用,或集成其 JAR(globalplatformpro.jar)作为库调用。 -
其他选项:
- jnasmartcardio:提供底层 APDU 通信能力,但不封装 GP 逻辑,需自行实现认证与安装流程(不推荐初学者);
- 商业 SDK(如 Gemalto IDWorks、Thales SafeNet):提供完整 API,但需授权。
补充说明
-
CAP 文件准备:Applet 必须先通过 Java Card SDK 编译为
.cap文件(含export,converter,ant构建流程),确保其Applet-AID、Package-AID符合 GP 要求; -
权限配置:INSTALL 命令需指定
Privileges(如SecurityDomain,CardLock),否则安装后无法运行; - 规范参考:最新 GP Card Specification(v2.3.1+)免费下载,重点关注 Chapter 11(Secure Channel Protocol)与 Chapter 12(Life Cycle Management)。
总之,聚焦业务逻辑而非协议细节——用 GlobalPlatformPro 完成认证与部署,Java 程序负责流程调度与错误处理,才是高效、安全、可维护的实践路径。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










