• 1. Java智能卡基础知识 北京握奇数据系统有限公司靳 伟 2007年3月 10/20/2018
  • 2. 了解Java智能卡基本概念及各组成部分 熟悉Java智能卡应用开发流程及应用运行流程 培训目的:10/20/2018
  • 3. 主要内容GP 结构GP概要Java智能卡基本概念 Java智能卡各组成部分介绍 Java智能卡运行流程介绍 10/20/2018
  • 4. Java智能卡概念 Java智能卡是在智能卡硬件系统的基础之上在卡片内通过软件构建的一个支持 Java 程序下载、安装和运行的软、硬件系统。它在有限资源的智能卡环境中支持Java语言的一个子集,是将Java嵌入到智能卡中的一种新应用。 Java智能卡历史 Javacard 1.0 Javacard 2.0 Javacard 2.1 Javacard 2.2什么是Java智能卡10/20/2018
  • 5. 平台无关性 封装底层通讯协议、内存管理硬件细节;API接口定义 支持多应用 支持应用动态更新(GP) 高安全性 继承了Java语言的安全特性 运行效率低,执行速度慢Java智能卡技术优势10/20/2018
  • 6. 国外市场 高端SIM卡 银行卡 国内市场 中国移动 中国联通 工商银行Java智能卡市场10/20/2018
  • 7. 电信卡 利比里亚Mobilink 印度Banglalink SIM卡 印度Bahati SIM卡 非电信卡 VISA卡 工总行银行卡 SIMpass应用 中国移动非接触支付 Java智能卡版本为Javacard2.2 我公司现有Java智能卡产品10/20/2018
  • 8. Java智能卡组成System LibaryROM AppletAppletJavacard Runtime EnviromentNative API (Watchdata)Javacard API (Sun)Watchdata Native COS GP (Global Platform)Hardware Interface Program (I/O, EEPROM)10/20/2018
  • 9. Hardware Interface Program 硬件接口程序,硬件厂商提供,完成I/O通讯,EPROM读写等底层操作 Watchdata Native COS 我公司本地COS系统,提供给Java智能卡相应的功能支持:如通讯、存储、安全等功能。 Javacard Runtime Enviroment Java智能卡运行环境,完成应用管理、逻辑通道管理、垃圾回收、事务处理、RMI(Remote Method Invoke)等功能,为Java智能卡应用执行提供环境支持。 Java智能卡组成10/20/2018
  • 10. Javacard API (Sun) Sun所发布的javacard API,包括javacard核心包:java.lang、javacard.framework、javacard.security和javacardx.crypto;GSM应用包:sim.access、sim.toolkit;3G应用包:uicc.access、uicc.toolkit。该模块采用Java语言实现,并将调用Native API中相应函数。 Native API (Watchdata) 我公司所发布的和底层相关的API函数,如通讯、存储管理、数据加解密等。该API为Javacard API提供底层函数支持,该模块由C语言实现,并将调用Native COS中相关函数。 Java智能卡组成10/20/2018
  • 11. GP(Global Platform) 通用平台,该模块提供应用下载、安装、删除等功能,并完成对卡片、应用的生命周期管理。 ROM Applet 存储在ROM中的Applet,该Applet可实现某些应用功能,但不能更新。 Applet Java智能卡应用,由java语言实现,实现某种应用功能。 Java智能卡组成10/20/2018
  • 12. Javacard各组件关系ROM AppletAppletJavacard Runtime EnviromentWatchdata Native COS GP (Global Platform) Hardware Interface Program (I/O, EEPROM)APDUAPDUGP ContextJava ContextNative Context10/20/2018
  • 13. 编写——编译——转换——下载 *.java——*.class——*.cap Java智能卡应用下载智能卡 硬件系统JCVM 方法集Java智能卡 解释器Java智能卡 CAP 文件Java智能卡 类文件Java智能卡 应用程序编译下载卡内CAP 文件解释卡外虚拟机转化卡内虚拟机10/20/2018
  • 14. Javacard解释器运行流程NY开始读取PC指针处指令是否需要解析解析当前指令执行当前指令PC指针指向下一条指令方法区中还有指令退出NY10/20/2018
  • 15. Java智能卡解释器体系结构操作数栈运行环境局部变量区Java栈栈顶指针运行环境指针局部变量指针PC指针 寄存器方法区操作数栈运行环境 局部变量区F2()F1()F1(byte a){ a = a + 1; return F2(a); } F2(byte a){ a = a + 1; return a; } Frame10/20/2018
  • 16. Java智能卡应用运行流程及生命周期Deselect指令Deselect指令Select指令Delete指令Install指令已下载Applet安装删除 Applet被选择状态取消选择状态命令处理状态Install指令Select指令10/20/2018
  • 17. package com.sun.javacard.samples.HelloWorld; import javacard.framework.*; public class HelloWorld extends Applet { private byte[] echoBytes; private static final short LENGTH_ECHO_BYTES = 256; protected HelloWorld() { echoBytes = new byte[LENGTH_ECHO_BYTES]; register(); } public static void install(byte[] bArray, short bOffset, byte bLength) { new HelloWorld(); }Java智能卡应用示例10/20/2018
  • 18. public void process(APDU apdu) { byte buffer[] = apdu.getBuffer(); short bytesRead = apdu.setIncomingAndReceive(); short echoOffset = (short)0; while ( bytesRead > 0 ) { Util.arrayCopyNonAtomic(buffer, ISO7816.OFFSET_CDATA, echoBytes, echoOffset, bytesRead); echoOffset += bytesRead; bytesRead = apdu.receiveBytes(ISO7816.OFFSET_CDATA); } apdu.setOutgoing(); apdu.setOutgoingLength( (short) (echoOffset + 5) ); apdu.sendBytes( (short)0, (short) 5); // echo header apdu.sendBytesLong( echoBytes, (short) 0, echoOffset ); // echo data } }Java智能卡应用示例10/20/2018
  • 19. 了解Java智能卡基本概念及各组成部分 熟悉Java智能卡应用开发流程及应用运行流程 参考资料: 《Javacard Virtual Machine Specification Version 2.2.2 》 《Javacard Runtime Enviroment Specification Version 2.2.2 》 《Javacard Application Programming Interface Specification Version 2.2.2 》 培训目的:10/20/2018
  • 20. 谢谢!为了安全,总是握奇For Security Reasons, Always Watch Data10/20/2018