第一章 入门 1
1.1 智能卡 1
1.1.1 简史 1
1.1.2 优点 1
1.1.3 应用 2
1.2 Java在智能卡中的应用 2
1.2.1 Java卡技术的优点 2
1.2.2 Java卡技术的简史 2
第二章 智能卡基础 4
2.1 智能卡综述 4
2.2 基本卡类型 4
2.2.1 存储卡和微处理器卡 4
2.2.2 接触卡和非接触卡 5
2.3 智能卡硬件 5
2.3.1 智能卡触点引脚 5
2.3.2 智能卡中央处理器 6
2.3.3 智能卡协处理器 6
2.3.4 智能卡存储系统 6
2.4 智能卡通信 7
2.4.1 智能卡的读写器和主机应用 7
2.4.2 智能卡通信模型 7
2.4.3 APDU协议 8
2.4.4 TPDU协议 9
第三章 Java卡技术概述 10
3.1 系统结构概述 10
3.2 Java卡语言子集 10
3.2.1 Java卡虚拟机 11
3.2.2 CAP文件和输出文件 11
3.2.3 Java智能卡解释程序 13
3.3 Java智能卡安装器和离卡安装程序 13
3.4 Java智能卡运行环境 13
3.4.1 JCRE寿命 15
3.4.2 JCRE在读写器操作期间怎样工作? 15
3.4.3 Java智能卡的运行特点 16
3.5 Java智能卡API 16
3.5.1 Java.lang包 16
3.5.2 Javacard.framework包 17
3.5.3 Javacard.security包 17
3.6 Java智能卡Applet 18
3.7 包和Applet的命名习惯 18
3.8 Applet开发过 19
3.9 Applet安装 20
3.9.1 ROM Applet 20
3.9.2 先发布Applet和后发布Applet 20
3.9.3 后发布Applet安装 21
3.9.4 在Applet安装期间的出错恢复 21
3.9.5 安装限制 21
第四章 Java智能卡对象 23
4.1 Java Card的存储模式 23
4.2 永久对象 23
4.3 临时对象 24
4.3.1 临时对象的特性 24
4.3.2 临时对象种类 25
4.3.3 建立临时对象 25
4.3.4 查询临时对象 26
4.4 对象的建立和声明 26
第五章 原子性和事务处理 27
5.1 原子性 27
5.2 数组中块数据的更新 27
5.3 事务处理 28
5.3.1 提交事务 28
5.3.2 终止事务 28
5.3.3 嵌套的事务 29
5.3.4 提交能力 29
5.3.5 事务处理异常TransactionException 30
5.3.6 事务处理中的局部变量和临时对象 30
第六章 Java智能卡异常及异常的处理 32
6.1 Java lang包中的异常 32
6.2 Java Card异常 33
6.2.1 Java Card异常的原因代码 33
6.2.2 Java Card平台上的异常抛出 34
6.2.3 ISO Exception异常 34
6.2.4 UserException异常 35
第七章 Java智能卡的Applet 36
7.1 Applet概述 36
7.1.1 Applet的安装和执行 36
7.1.2 Applet的通信机制 36
7.2 Javacard.framework.Applet类 37
7.3 Install方法 38
7.3.1 在Applet的构造函数里建立对象 39
7.3.2 在JCRE里注册Applet实例 39
7.3.3 处理安装参数 40
7.3.4 Applet初始化的深入 41
7.4 Select方法 41
7.4.1 Select APDU格式和处理 42
7.4.2 默认的Applet 42
7.5 Deselect方法 43
7.6 Process方法 43
7.7 Applet类中的其他方法 44
第八章 APDU的工作 45
8.1 APDU类 45
8.1.1 APDU对象 45
8.1.2 APDU缓冲区大小 46
8.2 ISO7816界面 46
8.3 Applet里APDU的工作 46
8.3.1 搜索APDU缓冲区 46
8.3.2 检查命令APDU头 47
8.3.3 接收APDU命令数据 47
8.3.4 处理APDU命令,生成应答数据 49
8.3.5 返回APDU应答数据 50
8.3.6 返回状态字 53
8.4 协议规范的APDU处理 53
8.4.1 getProtocol方法 54
8.4.2 getInBlockSize方法 54
8.4.3 getOutBlockSize方法 54
8.4.4 getOutgoingNoChaining方法 55
8.4.5 getNAD方法 56
8.4.6 waitExtension方法 56
8.5 小结 56
第九章 Java智能卡的安全性 58
9.1 常用安全模型 58
9.1.1 MAC和DAC模型 58
9.1.2 访问控制 58
9.1.3 静态和动态模型 59
9.2 Java的安全性 59
9.2.1 Java语言和平台 59
9.2.2 基本安全结构 60
9.2.3 字节代码验证和类型安全 61
9.2.4 签名应用 62
9.3 Java卡平台的安全特性 62
9.4 Java卡平台安全机制 64
9.4.1 编译时间检查 64
9.4.2 类文件的证实和子集检查 64
9.4.3 CAP文件和出口文件验证 65
9.4.4 安装检查 66
9.4.5 使用密码加强信任链 67
9.4.6 运行安全保证 68
9.4.7 Java卡密码支持 68
第十章 Applet防火墙和对象共享 69
10.1 Applet防火墙 69
10.1.1 上下文(context) 69
10.1.2 对象所属 69
10.1.3 对象访问 70
10.1.4 临时(Transient)数组和上下文 71
10.1.5 表态域和方法 71
10.2 通过上下文的对象共享 71
10.2.1 上下文转换 71
10.2.2 JCRE权限 72
10.2.3 JCRE入口点对象 72
10.2.4 全局数组 73
10.2.5 对象共享界面机制 73
第十一章 加密编程 84
11.1 密码简介 84
11.2 常用的加密 85
11.2.1 单向散列函数(Hash) 85
11.2.2 对称密码 86
11.2.3 非对称密码 87
11.2.4 鉴别 88
11.2.5 移动代码 89
11.2.6 数字签名 89
11.2.7 随机数 90
11.3 智能卡应用中的加密实践 90
11.3.1 保证应用安全性 90
11.3.2 作为安全标志 91
11.3.3 总结 91
11.4 Java卡加密APIs 91
11.4.1 设计原则 91
11.4.2 体系结构 92
11.4.3 包结构 93
11.5 代码举例 93
11.5.1 计算一个信息鉴别 94
11.5.2 建造一个密钥 95
11.5.3 签名和验证签名 96
11.5.4 中密和解密数据 97
11.5.5 产生随机数字 98
第十二章 Java语言 99
12.1 Java编程概况 99
12.1.1 程序结构 99
12.1.2 注释 99
12.1.3 标识符 99
12.1.4 数据类型 100
12.1.5 表达式 101
12.1.6 Java流控制 103
12.2 Java变量和函数的实例 104
12.3 对象有效范围和垃圾自动回收 105
12.4 子类 106
12.5 this和super 107
12.6 类的类型 108
12.7 抽象类 108
12.8 接口 109
12.9 包(Packages) 110
12.10 异常 111
12.10.1 “异常”的类型 114
12.10.2 不捕捉“异常” 114
12.10.3 try与catch 115
12.10.4 多个catch子句 115
12.10.5 try语句的嵌套 116
12.10.6 throw语句 117
12.10.7 语句 117
12.10.8 finally 118
12.11 运行时刻异常 120
12.12 编码规范 122
12.12.1 命名规范 122
12.12.2 Java文件样式 123
12.12.3 代码编写格式 126
12.13 Java卡语言子集 129
12.13.1 不被支持的项目 129
12.13.2 支持的项目 130
12.13.3 可选支持项目 131
12.13.4 Java卡虚拟机的局限性 132
第十三章 Applet开发指南 133
13.1 Applet的设计 133
13.1.1 确定Applet要使用的函数 133
13.1.2 确定Applet的AID 133
13.1.3 定义Applet的结构和方法函数 134
13.1.4 定义Applet和主机程序之间的接口 134
13.2 编写Applet的代码 137
13.2.1 钱夹Applet源代码 137
13.2.2 实现错误检查 143
13.3 下一步做什么 144
第十四章 Applet优化 145
14.1 优化Applet的整体设计 145
14.2 优化卡上的执行时间 145
14.3 方法调用 146
14.4 在Applet中创建对象 146
14.5 可重用对象 146
14.6 删除冗除代码 147
14.7 访问数组 148
14.8 switch语句和if-else语句 149
14.9 算术语句 151
14.10 在Applet中优化变量 151
第十五章 使用Int数据类型 153
15.1 32b算术操作 153
15.2 数组大小和数组下标 160
15.3 存储和计算int类型的值 161
15.4 总结 164