分类: Java
2010-07-30 16:27:50
在这篇文章中我们将讨论一种目前较为流行的智能卡:JAVA智能卡。我们将介绍JAVA卡的基本概念和如何用它来开发一些简单的应用。我们的目的是使一些有初步JAVA语言知识的读者了解智能卡,了解JAVA智能卡,并能用JAVA卡开发一些简单的应用。我们在讨论JAVA卡和它的APPLET之前先讨论一些智能卡方面的知识。
本章主要讨论智能卡的基本知识和智能卡的安全特性。有关智能卡的基本知识的介绍主要围绕两部分进行:智能卡的概念和智能卡与外界的通信。其中关于智能卡的概念,我们将介绍智能卡的定义,类型和它的一些简单应用。在讨论智能卡与外界的通信部分,我们将介绍接触式智能卡的国际规范ISO7816,从而了解智能卡与读卡器的通信方式和协议,智能卡的文件系统,和对智能卡操作的指令系统(APDU)。关于智能卡的安全特性部分,我们将介绍智能卡使用方式的安全性和所支持的安全算法。
|
说到智能卡,相信大家都已经看见过或使用过。例如,打IC电话的IC卡,手机里的SIM卡,银行里的IC银行卡等等。那什么是智能卡呢?简单而言,智能卡是一种芯片卡,计算芯片镶嵌在一张名片大小的塑料卡片上,从而完成数据的存储与计算。可以通过一种叫读卡器的设备访问智能卡中的数据。那为什么要使用智能卡呢?因为今天使用智能卡的系统,如银行,通信,交通等系统,都通过使用智能卡的特性获取了其他系统所没有的安全性和灵活性。
|
|
智能卡能在世界各地推广,在不同系统中发挥她的作用,国际规范的制定是必不可少的。例如,智能卡的尺寸是由ISO7810标准规定的。ISO7816标准规定了卡用塑料的一些物理特性,包括温差范围、弹性、电子触点的位置以及内置微芯片和外界进行信息交换的方式等。
例如根据智能卡规范(ISO7816.1),接触式智能卡共有8个触点,定义如下图。智能卡正是通过这8个触点与外界进行通信的。
|
从ISO7816规范的发展,我们可以清楚地看到接触式智能卡的从简单到复杂慢慢完善的发展轨迹。ISO7816是研究接触式智能卡的基础,如果你对接触式智能卡感兴趣,那ISO7816可是必不可缺的资料。
针对某些特殊的应用,如数字蜂窝式移动电话、信用卡(象Europay卡、Mastercard卡和 Visa卡)、电子钱夹(象Visacash、Multos与Proton)也制订了一系列相应的标准。例如,在中国应用最多最广泛的GSM系统中的SIM卡就得遵循GSM11.11, GSM11.14, GSM03.40等一系列规范。
而我们这次讨论的主题JAVA卡,她首先遵循ISO7816的规范,除此之外,她还遵循JAVA卡的一些规范:
|
在讨论读卡器之前,我们先搞清“读卡器”这一概念。广义来讲,“读卡器”指所有可以对卡进行读写的设备。不过,在智能卡业,“读卡器”是指那种必须与电脑相连,接受电脑发出相应指令来控制完成对卡的操作的设备。与“读卡器”对应的设备,我们称之为“终端”。“终端”是指那种能独立对卡进行操作的设备,而无需电脑的帮助。读卡器和终端都可以完成对智能卡的读写。
由于读卡器比终端更依赖于电脑,从而她比终端拥有更多的灵活性。最简单的使用读卡器的方式就是与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的格式:
|
“强制部分”表明这是APDU命令必须包括的部分,它包括: class (CLA)-, instruction (INS), and parameters 1 and 2 (P1 and P2). 每部分有一个字节。“非强制部分”表明并不是所有的APDU都有这些部分。
|
一般SW1 + SW2 =“9000”表明指令执行成功。
一个例子:
如果我们要选择(Select)SIM卡的ROOT文件,则APDU命令的格式如下:
|
而APDU响应为:9F1A,说明指令成功完成,而且你可以用Get Response命令得到1A长度的响应数据。关于对SIM卡的操作,请参考GSM11.11文档。
|
由于智能卡采用了不同的安全机理,这种安全机理主要体现在以下两方面:其中用于微处理器卡的比用于只读存储器卡的要复杂一些。
加密技术按照密钥的公开与否可以分为两种:对称密钥算法和公开密钥算法(又称:不对称加密算法)。对称密钥算法和公开密钥算法的区别是:加减密密钥的一致与否。
对称密钥算法,这里加密密钥匙和解密密钥是相同的。为了安全性,密钥要定期的改变。对称算法速度快,所以在处理大量数据的时候被广泛使用,其关键是保证密钥的安全。
公开密钥算法,分别存在一个公钥和私钥,公钥公开,私钥保密。公钥和私钥具有一一对应的关系,用公钥加密的数据只有用私钥才能解开,其效率低于对称密钥算法。其中最著名的两种:DES(对称密钥算法)和RSA(公钥加密算法)。有关DES算法和RSA算法的具体实现过程,不是本次讨论的内容,请大家自己参阅有关资料。目前微处理器智能卡一般都能支持DES算法和RSA算法,象Gemplus公司的GPK卡,Schlumberger公司的CryptoFlex.
附:数字签名 - RSA 算法的一个应用
数字签名采用RSA算法,数据发送方采用自己的私钥加密数据,接受方用发送方的公钥解密,由于私钥和公钥之间的严格对应性,使用其中一个只能用另一个来解,保证了发送方不能抵赖发送过数据,完全模拟了现在生活中的签名。
由于微处理器智能卡带有微处理器,同时又支持对称密钥算法和公开密钥算法,同时它的尺寸大小极方便于携带,所以它必然成为网络数据传递和身份认证极佳的安全模块。有关微处理器智能卡的具体应用,我们将在以后详细讨论。
转载:http://blog.ednchina.com/Smart_Card/36094/category.aspx