新闻  |   论坛  |   博客  |   在线研讨会
智慧卡与安全
zhchxgh | 2009-07-10 17:00:08    阅读:1226   发布文章

智慧卡与安全 
包盛杰 
资深程式设计师


前言

        在这篇文章中我们将讨论一种目前较为流行的智慧卡: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拨号到後台资料库进行查询。

 

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

智能卡的类型

按嵌入的晶片种类分,智慧卡可以分为以下几类:

接触式卡 
o 存储卡
存储卡不包含复杂的处理器,它不能动态的管理档案。存储卡与读卡器的通信是同步通信。IC电话机中的IC卡就是存储卡。
o 微处理器卡
微处理器卡是我们在这要主要讨论的。她与存储卡的最大的区别就是:她具有动态处理资料的功能。微处理器卡的系统结构有的像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演算法,资料发送方采用自己的私钥加密资料,接受方用发送方的公钥解密,由於私钥和公钥之间的严格对应性,使用其中一个只能用另一个来解,保证了发送方不能抵赖发送过资料,完全对应了现实生活中的签名。

        由於微处理器智慧卡带有微处理器,同时又支援对称密钥演算法和公开密钥演算法,同时它的尺寸大小极方便於携带,所以它必然成为网路资料传递和身份认证极佳的安全模组。有关微处理器智慧卡的具体应用,我们将在以後详细讨论。

关於作者:

包盛杰,资深程式设计师,毕业於上海交通大学,97年起开始研究智慧卡和与之相关的系统,研究领域:智慧卡,读卡器,POS终端,GSM网路,银行的KMS系统。参与设计开发过中国电信和一些银行的与智慧卡相关的项目。Mailto:sjbao@iname.com 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客