Java卡

JAVA卡与APPLET

2010-07-30 09:36:13 明申科技 11

在这篇文章中我们将讨论一种目前较为流行的智能卡:JAVA智能卡。我们将介绍JAVA卡的基本概念和如何用它来开发一些简单的应用。我们的目的是使一些有初步JAVA语言知识的读者了解智能卡,了解JAVA智能卡,并能用JAVA卡开发一些简单的应用。我们在讨论JAVA卡和它的APPLET之前先讨论一些智能卡方面的知识。
智能卡与安全

本章主要讨论智能卡的基本知识和智能卡的安全特性。有关智能卡的基本知识的介绍主要围绕两部分进行:智能卡的概念和智能卡与外界的通信。其中关于智能卡的概念,我们将介绍智能卡的定义,类型和它的一些简单应用。在讨论智能卡与外界的通信部分,我们将介绍接触式智能卡的国际规范ISO7816,从而了解智能卡与读卡器的通信方式和协议,智能卡的文件系统,和对智能卡操作的指令系统(APDU)。关于智能卡的安全特性部分,我们将介绍智能卡使用方式的安全性和所支持的安全算法。
概述

说到智能卡,相信大家都已经看见过或使用过。例如,打IC电话的IC卡,手机里的SIM卡,银行里的IC银行卡等等。那什么是智能卡呢?简单而言,智能卡是一种芯片卡,计算芯片镶嵌在一张名片大小的塑料卡片上,从而完成数据的存储与计算。可以通过一种叫读卡器的设备访问智能卡中的数据。那为什么要使用智能卡呢?因为今天使用智能卡的系统,如银行,通信,交通等系统,都通过使用智能卡的特性获取了其他系统所没有的安全性和灵活性。
为什么使用智能卡?

正由于智能卡在当今网络系统应用中的最突出的两个特点:个人身份性和密文性。智能卡的出现大大提高了交易的方便性和安全性。
个人身份性是指智能卡可以表明持卡人的身份。当今各式各样的交易最终都要确认交易方的身份。打个比方,你欠了债要写一张欠条,债主可以让你签名来表明这是你的欠条,也可以让你画押来表明这是你的欠条。而现在智能卡通过存储在卡里的一个ID号就可以方便的表明你的身份了。既简单又安全。
密文性是指智能卡可以以密文的形式存储某些数据。有些智能卡还能利用自带的微处理器进行动态的数据加减密。
充分利用智能卡的个人身份性和密文性,就可以为任何类型网络的数据传递和身份认证提供安全性,从而能大幅度提高现行系统的安全性和便利性。
除此之外,智能卡还有:大容量性,稳定性,可携带性,兼容性好等特点。
智能卡应用

如今智能卡在以下行业内扮演着重要的角色:
电信业
智能卡在电信业中最著名的应用是:GSM中的SIM卡,和IC电话机中的IC卡。
SIM卡是GSM网络中的个人身份模块,即SIM卡中有一个ID来唯一确定该卡的身份。这个ID号会被GSM的鉴权中心,计费中心等使用。
IC电话机中的IC卡中存储着剩余话费的金额。IC电话机会依据通话时间,通话的费率对IC卡存储的金额进行扣除。
银行业
银行业是智能卡展示才华的另一舞台。离线交易是智能卡的一大卖点。通过复杂的加减密算法,和完善的密钥管理系统,POS终端的对银行智能卡进行离线的交易处理,而无须每次交易都用MODEM拨号到后台数据库进行查询。
交通运输
交通运输是智能卡另一个舞台,一种叫非接触式卡的智能卡在这一领域扮演主要角色。如香港地铁的“八达通”卡,用户进入地铁站时,只要将“八达通”卡在人口处的一个装置上晃一下,地铁人口处的门就会自动打开,同时“八达通”卡上的存储的余额就会变少。当“八达通”卡上的存储的余额变为零时,用户就需要对卡进行充值。
智能卡的类型

按嵌入的芯片种类分,智能卡可以分为以下几类:
接触式卡
这种卡需要一种叫作读卡器的装置进行信息的读写操作。与信用卡上是一个磁带条不同,这种卡的表面上镶嵌着一个小的金属片,当把卡插入读卡器时,这个小金属片就会同一个电子接头相接触,通过这个电子接头对芯片读写数据。从卡的结构来分,接触式卡主要分为以下两类卡:
存储卡
存储卡不包含复杂的处理器,它不能动态的管理文件。存储卡与读卡器的通信是同步通信。IC电话机中的IC卡就是存储卡。
微处理器卡
微处理器卡是我们在这要主要讨论的。她与存储卡的最大的区别就是:她具有动态处理数据的功能。微处理器卡的系统结构有的象PC机。她也有ROM,RAM,CPU和EEPROM。以下的讨论如无特别指出,讨论的对象都是微处理器卡。象SIM卡,银行卡等都是微处理器卡。
非接触式卡
另一种是非接触式智能卡,这种卡看上去和普通的塑料信用卡很相似,但却在卡体中内嵌了一个天线和一个微电子芯片,当把它放近读卡器的天线时,它们之间就可以完成一次信息交换。这使其不用与耦合感应器做任何接触,就可与之交换信息,并且处理时间极短,这一特性,使非接触式智能卡在一些象高速公路收费站这样要求大批量超快速运转的场所成为理想的解决方案。
国际标准

智能卡能在世界各地推广,在不同系统中发挥她的作用,国际规范的制定是必不可少的。例如,智能卡的尺寸是由ISO7810标准规定的。ISO7816标准规定了卡用塑料的一些物理特性,包括温差范围、弹性、电子触点的位置以及内置微芯片和外界进行信息交换的方式等。

例如根据智能卡规范(ISO7816.1),接触式智能卡共有8个触点,定义如下图。智能卡正是通过这8个触点与外界进行通信的。 触点 定义 触点 定义 C1 Vcc 供电电压 C5 GND 接地 C2 RST 重置信号 C6 Vpp 编程电压 C3 CLK 时钟信号 C7 I/O 数据输入/ 输出 C4 保留 C8 保留
其中ISO7816是接触式卡智能卡必须遵循的国际规范。目前ISO7816已经陆续发布了9个部分:
ISO7816-1:接触式卡智能卡的物理特性
ISO7816-2:接触式卡智能卡触点的尺寸与位置
ISO7816-3:接触式卡智能卡的电信号和传输协议
ISO7816-4:接触式卡智能卡与外界交互的接口
ISO7816-5:接触式卡智能卡应用的命名方式与注册系统
ISO7816-6:接触式卡智能卡与外界交互的数据对象
ISO7816-7:接触式卡智能卡的结构化查询语句
ISO7816-8:接触式卡智能卡与安全有关的指令
ISO7816-9:接触式卡智能卡附加指令与安全参数
从ISO7816规范的发展,我们可以清楚地看到接触式智能卡的从简单到复杂慢慢完善的发展轨迹。ISO7816是研究接触式智能卡的基础,如果你对接触式智能卡感兴趣,那ISO7816可是必不可缺的资料。

针对某些特殊的应用,如数字蜂窝式移动电话、信用卡(象Europay卡、Mastercard卡和 Visa卡)、电子钱夹(象Visacash、Multos与Proton)也制订了一系列相应的标准。例如,在中国应用最多最广泛的GSM系统中的SIM卡就得遵循GSM11.11, GSM11.14, GSM03.40等一系列规范。

而我们这次讨论的主题JAVA卡,她首先遵循ISO7816的规范,除此之外,她还遵循JAVA卡的一些规范:
Java Card 2.1.1 Runtime Environment Specification
Java Card 2.1.1 Virtual Machine Specification
Java Card 2.1.1 Application Programming Interfaces Specification
读卡器与终端

在讨论读卡器之前,我们先搞清“读卡器”这一概念。广义来讲,“读卡器”指所有可以对卡进行读写的设备。不过,在智能卡业,“读卡器”是指那种必须与电脑相连,接受电脑发出相应指令来控制完成对卡的操作的设备。与“读卡器”对应的设备,我们称之为“终端”。“终端”是指那种能独立对卡进行操作的设备,而无需电脑的帮助。读卡器和终端都可以完成对智能卡的读写。

由于读卡器比终端更依赖于电脑,从而她比终端拥有更多的灵活性。最简单的使用读卡器的方式就是与PC相连。一般PC可以通过RS232串口,USB接口,PCMCIA接口,软盘接口,并口,红外线口等与读卡器取得联系。PC通过这些接口向读卡器发出ISO指令,读卡器收到指令后即对卡进行指令命令的读写,当卡完成这次读写操作后,回给读卡器一个指令成功与否的相应,而读卡器收到卡的相应后即告诉PC,PC这时根据相应的结果进行下一个ISO指令的操作。有关对智能卡的详细操作指令,请参阅[智能卡的接口协议]。一般我们对智能卡进行编程,大多选用读卡器来完成对卡的操作。

一种最常见的终端就是商场和宾馆中使用的POS机。她最大的特点:拥有自己的操作平台和开发系统,能对卡进行独立的读写,有Modem功能和打印交易功能。一般还有磁卡读写功能。


智能卡的文件系统

智能卡的文件系统有的象DOS的树形文件系统。按ISO7816.4规定,智能卡的文件分为:DF(Dedicated File )和EF(Elementary File)。DF包含一些控制信息,它可以成为EF或DF的父文件。这有的象DOS中的目录文件。EF是数据单位的集合,它不能成为任何文件的父文件。这有的象DOS中的TXT文件。

一般而言,智能卡文件系统都有一个必须的根文件(ROOT)。它是DF文件。一般叫它MF(Master File主文件)。

每个文件(包括DF和EF)都有一个文件的ID(两个字节)。如ROOT的ID一般为“3F00”。如要对文件进行读写操作,就必须先用“选择”(Select)命令来选择该文件的ID。

EF的文件类型有:透明EF,线性定长EF,线性变长EF,循环EF。对后三种EF文件的操作需通过对它们所包含的记录进行操作。如你有兴趣希望进一步了解智能卡的文件结构,请参阅ISO7816。
智能卡的接口协议

一般而言,智能卡自身是没有电源,显示器,键盘,哪它是如何与外界进行通信的呢?在上面的文章中,我们已经知道:智能卡是通过它的8个触点与读卡器进行通信的。那它们是如何进行通信的呢?我们知道当两台PC进行通信时,进行数据交换时,它们必须服从一定的通信协议。卡与读卡器的通信也是如此。根据ISO7816.4规定,智能卡与外界的通信数据接口为:APDU(Application Protocol DataUnits,应用协议数据单元)。APDU既制定了命令格式,也制定了响应格式。在卡的领域中,卡始终处在“主仆”关系中的“仆”的地位,即智能卡只能等待读卡器或终端向它发送APDU,收到APDU后,智能卡执行APDU中的命令,而后返回APDU响应。通过APDU命令和它的响应,卡就完成了与读卡器或终端的通信。以下就是APDU的格式: Command APDU(APDU 命令) Mandatory Header(强制部分) Conditional Body(非强制部分) CLA INS P1 P2 Lc Data field Le
“强制部分”表明这是APDU命令必须包括的部分,它包括: class (CLA)-, instruction (INS), and parameters 1 and 2 (P1 and P2). 每部分有一个字节。“非强制部分”表明并不是所有的APDU都有这些部分。

其栏位所表示的意义分别为:
CLA - Class Byte,用於识别applet
INS - Instruction Byte ,下达给applet之指令
P1 - 第一个指令参数
P2 - 第二个指令参数 (P1,P2 根据INS不同,也有不同的含义)
Lc - Data Field之长度
Data Field - 资料栏位
Le - 回传资料之长度
Response APDU (APDU 响应) Conditional Body(非强制部分) Mandatory Trailer(强制部分) Data field SW1 SW2
其栏位所表示的意义分别为:
Data Field - return之资料栏位
SW1 - 执行状态参数1 (1 字节)
SW2 - 执行状态参数2 (1字节)
一般SW1 + SW2 =“9000”表明指令执行成功。

一个例子:

如果我们要选择(Select)SIM卡的ROOT文件,则APDU命令的格式如下: CLA INS P1 P2 Lc Data A0 A4 00 00 02 3F00 A0 代表这是SIM卡、A4代表这是Select指令、P1,P2在Select指令中没有用、Lc说明Data的长度为2个字节、Data=3F00,是ROOT的文件ID
而APDU响应为:9F1A,说明指令成功完成,而且你可以用Get Response命令得到1A长度的响应数据。关于对SIM卡的操作,请参考GSM11.11文档。
智能卡的安全性
安全

由于智能卡采用了不同的安全机理,这种安全机理主要体现在以下两方面:其中用于微处理器卡的比用于只读存储器卡的要复杂一些。
从卡上信息的读取方面来控制:
限制智能卡用户的范围
有些智能卡,任何人都可以读取卡上信息,象记录病人姓名和血型的医疗卡,这种智能卡一般不设密码,只要拿到卡的人都可以读取卡上信息。 这时卡体本身就是一种保护。
对于只许持卡人读取信息的智能卡通常采用一种叫PIN(个人识别码)的密码形式来保护卡上的信息,一般PIN由4至8位数字组成,通过键盘输入读卡器,它允许持卡人输入三次密码,如果三次输的都不对,卡就会被锁住,只有PIN码对了,用户才能对卡进行操作。当前也有一些更高级的密码形式在开发研制之中。
对于只许第三方读取信息的智能卡便只有发卡人才能读取卡上信息。(譬如只有发卡行可以改写电子钱夹上的信息)。这时这些智能卡由16-32位数字的密码来保护。
限制读取智能卡信息的的方式(只读、可添加、可修改或可擦写)。存储在智能卡上的信息一般被划分为若干个部分:
只读信息
只可添加的信息
只可更新的信息
无法读取的信息
这样有些密码信息可以存储在无法读取的存储区域中。
从卡的结构和支持的加密算法来控制
如上所述只有知道密码的人才能使权使用智能卡,但如果需要通过无线电或电话线将卡上的信息向异地传送,就还必须要有额外的防护手段。

防护手段之一就是加密,这就好象把要传送的信息翻译成了谁也看不懂的外语。微处理器智能卡有加密和解密(把看不懂的东西再翻译回来)的功能,使得在传送存储在卡上的信息的同时,也不用担心会发生泄密。

通过加密,智能卡可以把信息翻译成数以亿计的“外语”,并且在须要通信时,可以随机地选择其一。这种防范机制可以确保所用的卡和计算机都真实有效,使得几乎没有可能半路窃取传送的信息。
安全算法

加密技术按照密钥的公开与否可以分为两种:对称密钥算法和公开密钥算法(又称:不对称加密算法)。对称密钥算法和公开密钥算法的区别是:加减密密钥的一致与否。

对称密钥算法,这里加密密钥匙和解密密钥是相同的。为了安全性,密钥要定期的改变。对称算法速度快,所以在处理大量数据的时候被广泛使用,其关键是保证密钥的安全。

公开密钥算法,分别存在一个公钥和私钥,公钥公开,私钥保密。公钥和私钥具有一一对应的关系,用公钥加密的数据只有用私钥才能解开,其效率低于对称密钥算法。其中最著名的两种:DES(对称密钥算法)和RSA(公钥加密算法)。有关DES算法和RSA算法的具体实现过程,不是本次讨论的内容,请大家自己参阅有关资料。目前微处理器智能卡一般都能支持DES算法和RSA算法,象Gemplus公司的GPK卡,Schlumberger公司的CryptoFlex.

附:数字签名 - RSA 算法的一个应用

数字签名采用RSA算法,数据发送方采用自己的私钥加密数据,接受方用发送方的公钥解密,由于私钥和公钥之间的严格对应性,使用其中一个只能用另一个来解,保证了发送方不能抵赖发送过数据,完全模拟了现在生活中的签名。

由于微处理器智能卡带有微处理器,同时又支持对称密钥算法和公开密钥算法,同时它的尺寸大小极方便于携带,所以它必然成为网络数据传递和身份认证极佳的安全模块。

首页
产品
新闻
联系