什么是Java智能卡?

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

 

 

1、智能卡与安全

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

 

2、为什么使用智能卡?

       * 正由于智能卡在当今网络系统应用中的最突出的两个特点:个人身份性和密文性。智能卡的出现大大提高了交易的方便性和安全性。

       * 个人身份性是指智能卡可以表明持卡人的身份。当今各式各样的交易最终都要确认交易方的身份。打个比方,你欠了债要写一张欠款条,债主可以让你签名来表明这是你的欠条,也可以让你画押来表示这是你的欠条。而现在智能卡通过存储在卡里的一个ID号就可以方便的表明你的身份。简单又安全。

       * 密文性是指智能卡可以以密文的形式存储某些数据。有些智能卡还能利用自带的微处理器进行动态的数据加减密。

       * 充分利用智能卡的个人身份性和密文性,就可以为任何类型的网络的数据传递和身份认证提供安全性,从而大幅度的提高现行系统的安全性和便利性。

       * 除此之外,智能卡还有:大容量性,可携带性,兼容性好等特点。

3、智能卡的应用

       如今智能卡在以下行业中扮演着重要的角色:

       * 电信业

       智能卡在典型行业中的最著名的应用是:GSM中的SIM卡,和IC电话机中的IC卡。SIM卡是GSM网络中的个人身份模块,即SIM卡中有一个ID来唯一 的确定该卡的身份。这个ID号会被GSM的鉴权中心,计费中心使用。IC电话机中的IC卡中存储着剩余话费的金额。IC电话机会依据通话时间,通话的费率对IC卡中的存储金额进行扣除。

       * 银行业

       银行业是智能卡展示才华的另一舞台。离线交易是智能卡的一大卖点。通过复杂的加减密算法,和完善的密钥管理系统,POS终端的对银行的智能卡进行离线的交易处理,而无需每次交易都用MODEM拨号到后台数据库进行查询。

       * 交通运输

       交通运输是智能卡的另一舞台,一种叫非接触式卡的智能卡在这一领域扮演主要角色。如香港地铁的“八达通卡”,用户在进入地铁站时,只要将“八达通”卡在入口出的一个装置上晃一下,地铁入口处的门就会自动打开,同时“八达通”卡上的存储金额就会变少。当“八达通”卡上的存储金额变为零时,用户就需要对卡进行充值了。

 

3、智能卡的类型

       按嵌入式的芯片种类,智能卡可以分为以下几类:

       * 接触式卡

       这种卡需要一种叫做读卡器的装置进行信息的读写操作。与信用卡上的磁带条不同,这种卡的表面上镶嵌着一个小的金属片,当把卡插入读卡器时,这个小金属片就会同一个电子接头相接触,通过这个电子接头对芯片读写数据。从卡的结构来分,接触式卡的主要分为以下两类:

       。存储卡

              存储卡不包含复杂的处理器,它不能动态的管理文件。存储卡与读卡器的通信是同步的。IC电话中的IC卡就是存储卡。

       。微处理器卡

              微处理器卡是主要讨论对象。他与存储卡的最大区别就是:他具有动态处理数据的能力。微处理器卡的系统结构有的像PC机。他也有ROM,RAM,CPU,EEPROM。以下的讨论如无特别指出,讨论的对象都是微处理器卡。像SIM卡,银行卡等都是微处理器卡。

 

       * 非接触式卡

       另一种是非接触式智能卡这种卡看上去和普通的塑料信用卡很相似,但却在卡中内嵌了一个天线和一个微电子芯片,当把它放近读卡器的天线时,他们之间就可以完成一次信息交换。这使其不用与耦合感应器做任何接触,就可与之交换信息,并且处理时间极短,这一特性,是非接触式智能卡在一些像高速公路收费站这样要求大批量超快速运转的场所成为理想的解决方案

 

4、国际标准

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

 

       例如根据智能卡规范(ISO7816.1),接触式智能卡共有8个触点,定义如下图所示。智能卡正是通过这8个触点与外界进行通信的。

 

 

触点

定义

触点

定义

C1

VCC供电电压

C5

GND接地

C2

RST重置信号

C6

VPP编程电压

C3

CLK时钟信号

C7

I/O数据输入/输出

C4

保留

C8

保留

 

*其中ISO7816是接触式智能卡必须遵循的的国际规范。目前ISO7816已经陆续发布了9个部分了:

l         ISO7816-1:接触式智能卡的物理特性

l         ISO7816-2:接触式智能卡触电的尺寸与位置

l         ISO7816-3:接触式智能卡的电信号和传输协议

l         ISO7816-4:接触式智能卡与外界交互的接口

l         ISO7816-5:接触式智能卡应用的命名方式与注册系统

l         ISO7816-6:接触式智能卡与外界交互的数据对象

l         ISO7816-7:接触式智能卡的结构化查询语句

l         ISO7816-8:接触式智能卡与安全有关的指令

l         ISO7816-9:接触式智能卡附加值令与安全参数

ISO7816是研究接触式智能卡的基础,如果你对接触式智能卡感兴趣,ISO7816是必不可少的资料。

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

 

而我们这次讨论的主题JAVA卡,她首先遵循ISO7816的规范,她还遵循JAVA卡的规范:

l         Java Card 2.1.1 Runtime Environment Specification

l         Java Card 2.1.1 Virtual Machine Specification

l         Java Card 2.1.1 Application Programming Interfaces Specification

5、读卡器与终端

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

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

 

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

 

6、智能卡的文件系统

       智能卡的文件系统有点像DOS的树形文件系统。按照ISO7816.4的规定,智能卡的文件分为:DF(Dedicated File)和EF(Elementary File)。

       DF包含一些控制信息,它可以成为EF或DF的父文件。这有点像DOS中的目录文件。

EF是数据单位的集合,他不能成为任何文件的父文件。这有点像DOS中的TXT文件。

一般而言,智能卡文件系统都有一个必须的根文件,他是DF文件,一般叫他MF。

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

EF的文件类型有:透明EF,线性定长EF,线性变长EF,循环EF。对后三种EF文件的操作需要通过对他们所包含的记录进行操作。ISO7816中有更为详细的关于智能卡的文件结构的介绍。

 

7、智能卡的接口协议。

 

       一般而言,智能卡自身没有电源,显示器,键盘,那他是从哪里与外界进行通信的呢?

       智能卡是通过他的8个触点与读卡器进行通信的,,两台PC进行通信时,进行数据交换时,他们必须服从一定的通信协议。卡与读卡器也是如此。根据ISO7816.4规定,智能卡与外界的通信数据接口为:APDU(Application Protocol DataUnits,应用协议数据单元)。APDU既制订了命令格式,也制定了响应格式。智能卡只能等待读卡器或终端向他发送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都有这些部分。

l         CLA –Class Byte,用于识别applet

l         INS-Instruction Byte,下达给applet的指令

l         P1-第一个指令参数

l         P2-第二个指令参数

l         LC-Data Field之长度、

l         Data-Field-资料栏

l         Le-会传资料的长度

 

 

APDU响应部分:

 

 

Response APDU(APDU响应)

 

 

Conditional Body(非强制部分)

 

Mandatory Trailen(强制部分)

 

Data Field

 

SW1

 

SW2

 

各部分所表示的意义如下:

l         Data Filed-return的资料栏位

l         SW1-执行状态参数1(1字节)

l         SW2-执行状态参数2(1字节)

 

一般SW1+SW2 = “9000”表明指令执行成功

 

举例如下:

我们要选择SIM卡中的root文件,则APDU命令的格式如下:

 

CLA

 

INS

 

P1

 

P2

 

LC

 

Data

 

A0

 

A4

 

00

 

00

 

02

 

3F00

A0代表这是SIM卡,A4代表这是Select命令,P1、P2在Select命令中没有作用、LC说明Data的长度为两个字节、Data=3F00,是ROOT的文件ID

 

若APDU响应为:9F1A说明指令成功完成,而且你可以用GetResponse命令得到   1A长度的响应数据。关于SIM卡的操作,请参阅GSM11.11的文档。

 

8、智能卡的安全性

安全

       由于智能卡采用了不同的安全机制,这种安全机制主要体现在一下两个方面:其中用于微处理器卡比只用于只读存储器卡的要复杂一些

l         从卡上信息的读取方式来控制

1.         从智能卡的用户范围

*有些智能卡,任何人都可以读取上面的信息,像记录病人的姓名和血型的医疗卡,这种卡一般不舍密码,只要拿到卡的人都可以读取卡上的信息。这时卡体本身就是一种保护。

* 对于只许持卡人读取信息的智能卡通常采用一种叫PIN(个人识别码)的密码形式来保护卡上的信息,一般PIN有4到8位数字组成,通过键盘输入读卡器,他允许持卡人输入3次密码,3次不对,卡将被锁住,对了才能对卡进行操作,有更高级的密码形式正在研究中。

* 对于只许第三方读取信息的智能卡便只有发卡人才能读取卡上的信息(比如只有发卡银行才能改写电子钱夹上的信息)。这时智能卡有16-32位数字的密码来保护。

       2.限制读取智能卡信息的方式。

              存储在智能卡上的信息一般被划分为若干个部分:

                     * 只读信息

                     * 只可添加信息

                     * 只可更新信息

                     * 无法读取的信息

              有些密码信息可以存储在无法读取的存储区域中

l         从卡的结构和支持的加密算法来控制(智能卡的安全性)

如上所述只有知道密码的人才能有权使用智能卡,但如果需要通过无线电或电话线将卡上的信息向异地传送,就必须要有额外的防护手段。

 

防护手段之一就是加密,这就好像要把传送的信息翻译成为外语。微处理器智能卡有加密和解密算法,是的在传送存储卡上的信息的同时,也不用担心会发生泄密。

 

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

 

9、智能卡的安全算法

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

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

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

 

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

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

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

 

 

 

              原作者:包胜杰,高级程序员,毕业于上海交通大学,97年起开始研究智能卡和与之相关的系统。