一种新的“一卡多用”智能卡模型
文章出处:http://www.singbon.com 作者:徐中华,刘玉珍, 张焕国 人气: 发表时间:2011年10月07日
1、问题的提出
智能卡(Smart Card)又称CPU卡,是一种镶嵌有单片机芯片的IC卡。卡上的单片机芯片包含中央处理器CPU、随机存储器RAM 、电擦除可编程存储器EEPROM 或FlashMemory、只读存储器ROM和I/O接口。COS (ChipOperating System)为芯片操作系统,它是掩膜在IC卡内单片机ROM中的可执行代码,是芯片资源的管理者和安全保密的基础。
传统的COS基本操作方式为:从接口设备接收到一条命令,然后经过加工处理返回应答信息给接口设备。处理过程如图1所示。
每个命令都要经过其中4个模块,如果其中任意一个模块在处理中发现错误都将返回相应的出错信息。传输管理负责卡和接口设备之间的数据通信,通信使用的协议一般是1SO7816-3所规定的T=O的异步半双工字符传输协议豉T=1异步半双工块传输协议。数据在传输方式上一般有3种不同的类型:明文方式、明文校验方式和密文方式。对于以明文方式进行传输的数据由传输管理器直接送给命令处理模块。当数据以明文校验方式或密文方式传输时需要加密运算器对数据进行相应的处理。命令解释器只是对外部输入的每条命令作语法分析,分析和检查命令参数是否正确,然后根据命令参数的含义执行相应的功能模块。如果发现参数有错,直接返回出错的信息。文件管理器控制对文件的操作和访问。在做数据操作前,文件管理器将根据文件的安全属性来检查卡的安全状态,以确定操作的可行性。文件的安全属性和文件结构一旦产生便处于文件管理器的控制之下。对文件数据的操作和管理将按如下的规则:对某个文件做操作之前,必须先选择该文件;文件系统有三层结构,并且操作系统不支持以路径的方式选择文件,所以在选择某个文件之前必须先选择它的上一层文件,不允许跨层选择。卡片上电后自动选择主控文件;访问文件中的数据要受文件的安全属性的控制;对文件的建立受该文件所属上层文件的安全属性的控制。
综上所述,对于传统的卡和COS,由于在卡的生命周期内不能更新卡上的COS,并采用了相应的访问控制措施和加密传输方式,从而可以保证卡上数据的安全和完整。智能卡的发展趋势之一是“一卡多用” ,即在一张智能卡上集成多个应用。这不仅可以有效地降低单个应用的使用成本,而且也便于用户的携带。对单应用智能卡来说,由于应用的提供者通常就是卡的发行者,因此卡上的数据安全通常就由卡的发行者负责。支持“一卡多用” 的智能卡应允许用户下载其特定的应用程序,允许用户扩充或修改部分COS命令。每一应用只能访问其自己的数据和程序,而不能访问其它应用的数据或程序。由于一张智能卡同时存在多个应用,应用可能由于本身的缺陷或出于恶意攻击的目的,访问其他应用的数据或程序。数据安全性无法只由卡片发行商、应用的提供商或者用户来单独保证。因此如何保证卡上的数据安全是支持”一卡多用”智能卡系统应解决的核心问题。
COS中与安全最相关的部分就是文件的管理,也就是存储器的管理(包括RAM、ROM、EEPROM和Flashmemory等)。对于传统的COS而言,COS中的命令可以对所有的存储空间进行操作, 由于COS不可以更新,所有对存储器的操作都要通过相应的COS命令来进行,所以存储器都处于COS的控制之下,而在COS命令中采用了相应的控制方法就可以保证存储器上的数据安全。利用有关的指令就可以读取所有的存储器的数据和写所有能写的存储区(除ROM外)。在“一卡多用”的系统中,显然,可以利用添加新的应用的方法来对系统进行攻击(读出所有数据进行分析、改写一些系统关键数据等),这些攻击方法可以绕过COS的文件控制模块直接进行,使得文件控制模块形同虚设。同时,添加的应用如果存在缺陷也可能会存在破坏系统的问题。因此,如何实施有效地存储管理来防止这类问题的发生就成为系统安全的关键问题。
特定用户下载的程序可以对其他用户的程序和数据进行访问。现有智能卡硬件设计不能对多个用户区进行隔离保护,即限制特定用户命令的访问范围。本文提出了一种一卡多用智能卡的安全模型,它能支持一卡多用的安全使用,允许多个应用在智能卡中下载其特殊命令,并实现多个应用的隔离。每一应用只能访问其自身的数据或用户命令,不能访问其他应用的数据或命令。
2 、“一卡多用”智能卡的硬件模型
在Intel 8086/8088系统中,由于硬件的限制,系统程序和用户程序同属于一个安全级别(即系统程序和用户程序在执行上没有任何区别,例如DOS系统),因此用户特定应用程序的执行可能破坏系统从而导致整个系统崩溃或者存取其它用户的数据,显然这种模型是非常不安全的,而现在的智能卡系统几乎都是基于这种模型的,利用现有的智能卡来实现“一卡多用” 就难以保证整个系统的安全。借鉴Intel80386中利用硬件建立4个特权级来保证系统程序和用户程序分离以实现多任务及任务切换和对各个任务环境进行保护的方法,可以在智能卡芯片中增添一个特权级,使得这样的智能卡芯片具备两个特权级,即内核级和用户级。为了支持这种功能,在智能卡芯片中必须提供相应的硬件支持(这里假定智能卡中所用的CPU至少是l6位的,因为8位CPU的智能卡功能太弱)。智能卡中需要增加标志位flag来决定CPU当前处于内核级还是处于用户级。需要添加数据地址界限寄存器、应用地址界限寄存器、内核级堆栈和异常寄存器。增加这些寄存器的目的主要是用来从硬件上对存储空间的管理提供更强的支持。数据地址界限寄存器用于限定特定应用的数据地址空间(允许存放数据的地址空间范围)。应用地址界限寄存器用于限定特定应用的程序地址空间(执行程序时使用的地址空间范围)。同时,需要把COS中的核心模块和一般应用程序区分开来。只有当CPU处于内核级时才能执行COS的核心模块,而应用程序只能在CPU处于应用级时执行。当应用程序执行时,若应用程序试图访问比较寄存器范围以外的地址空间,则程序被异常终止,并引起中断。内核级堆栈只能是当CPU处于核心级时才能被访问,异常寄存器用于发生异常时保存发生异常的地址。针对这种安全模型,还需要增加新的指令或扩充诸如JMP、CALL、IRET之类的指令执行功能。
“一卡多用”智能卡中的控制转移分为从内核级到用户级的控制转移、从用户级到内核级的控制转移和无级别变化的控制转移3种。卡片插入后,系统首先进入内核级,芯片操作系统产生复位应答,并等待接收命令。若接收的命令是用户自定义命令,则系统将进入用户级。为实现从内核级到用户级的控制转移,系统根据应用索引文件为当前应用设置相应的地址界限寄存器,保存返回地址并将控制切换到相应的应用程序并把flag取反。当应用程序从调用系统功能函数返回时,也需要将控制从内核级转移到用户级,此时只需将返回地址等出栈并把flag取反即可。若应用程序需要使用COS提供的功能函数时,则需要将控制从用户级转移到内核级。为了实现这种转移,系统首先判断是否符合转移的条件,如果符合,则把当前应用的执行地址、调用函数使用的参数放入内核级堆栈中,以便应用程序返回时使用,同时把flag取反。应用程序执行完成后返回系统时,也需要将控制从用户级转移到内核级,这时系统就不用保存当前应用所执行的地址,只需将返回地址等出栈并把flag~反即可。任务中无特权级变换转移包括内核中的转移和应用中的转移两种情况,这种控制转移与当前使用的智能卡中的实现方式相似,只是在应用中执行转移指令和存取器存取指令前,系统会自动利用界限寄存器判断地址是否越界,如果越界则转入中断和异常处理。
系统给每种可能的中断赋予一个中断号,并在系统初始化时,安排好相应的中断向量表。当中断发生时,系统根据一定的规则决定是否响应该中断。若需要响应,则先保存好当前的系统状态,然后根据中断寄存器中保存的中断向量号转移到相应的中断响应程序执行。当中断执行完后,返回到断点继续执行。当CPU处于用户态和内核态下,对中断的响应规则可能是不一样的,如CPU处在内核态下可能需要屏蔽某些中断,而CPU在系统态下就不需要屏蔽这些中断了。系统给每个可能的异常赋予一个异常号,并在系统初始化时,安排好相应的异常向量表。当异常发生时,系统根据异常号转移到相应的异常处理程序进行相应的处理。但是处理完后,要进行报错,并中断当前程序的执行。
3 、芯片操作系统COS
传统COS一般由传输管理、文件管理、安全管理、命令处理4个功能模块组成。传统COS中所有命令的执行方式是相同的。系统调用命令时,就把执行权限交给了命令程序,此时,命令程序对卡上的所有的硬软件资源拥有完全的控制权,当应用程序完成了相应的处理后,就返回系统。如上文所述,在新的模型中,所有命令应被分为两个部分:核心命令和用户命令。核心命令应由以下几个部分组成:与密码运算有关的命令、与存储管理有关的命令、与身份验证有关的命令、与通信传输有关的命令、与硬件资源管理有关的命令等。这些命令一般是独立于具体的应用的,在执行时对所有的硬软件资源拥有完全的控制权。用户命令是与具体的应用相联系的所有命令的集合,在执行时只能使用特定的硬软件资源,否则就会出错。
卡上电后,COS首先发送复位应答给终端来建立双方的通信并设置好相应的通信参数,接着就等待接收终端的命令,当接到终端的命令时,COS将从索引文件中来查找该命令,并区分它是系统核心命令还是一般的用户命令,如果是系统核心命令,COS按要求处理完后就返回给终端相应的结果;如果是一般的用户命令,COS将从索引文件中查找出该命令所对应的应用,找到后将系统切换到该应用的环境下进行相应的处理,处理完并返回处理结果后,系统就在切换的COS环境下等待新的命令;如果COS不能从索引文件中找到该命令,则返回给终端出错标志。值得注意的是:这些命令应该有一系列的权限验证方式来保障系统的安全。
为适应上面提出的“一卡多用”智能卡的安全模型,我们将对COS的一般模型进行改造。在文件管理中,需要建立应用索引文件,用于存储所有应用的索引、应用中的命令以及相应的数据地址空间范围和应用地址空间范围,并把这个文件存储在系统存储区,因此,只有COS系统才能够存取该文件。在技术实现上,可用图2描述该文件系统模型的实现。
在卡的生命周期内,卡上的硬件资源在一般情况下不会改变,因此对于硬件资源管理功能和通信传输管理功能一般不需要更新。作为系统安全核心的安全控制管理功能则可能随时间的推移而需要进行部分更新以适应新的应用环境。如一些传统加密算法经过一段时问的使用后可能需要替换成新的加密算法,因此需要考虑安全管理模块的更新问题。由于安全管理模块属于COS核心模块部分,安全模块的更新就涉及到了COS的更新,因此,需要建立相应的机制以适应这样情况。由于安全控制模块一般由COS的提供者提供,当需要更新时,应该使用COS提供者提供的特定的更新验证程序后才能更新。当原有的DES需要升级至AES时,可以通过把COS提供者提供的相应的AES模块下载到卡中来实现更新,而不必换卡,这样可提高智能卡的使用寿命。
命令分为核心命令和用户命令。如果要更新或添加核心命令,则涉及到对COS的更新。如果更新或添加用户命令,则涉及到对应用的管理。为了便于COS的更新,我们将COS的存储分为以下几个部分:将COS提供的核心管理功能模块和一些在卡的生命期内不需要改变的模块掩膜到ROM中;对于可能需要更新的模块, 写到EEPROM 或FLASHMEMORY中以方便今后的更新操作;考虑到COS自身的扩充以及x,tcos中某些模块的更新可能需要的更大的存储空间,同时还在EEPROM或FLASHMEMORY预留出部分空间。COS自身的存储主要由以上的3部分组成,其存储逻辑图如图3。
4、应用管理
系统中另一个重要的方面是对应用的管理,它包括应用的添加、删除、更新和执行4个方面。
当需要添加一个新的应用时,系统顺序地给该应用分配一个标志号,并在应用索引文件中添加一项,把允许该应用使用的地址空间范围和起始地址存于其中,同时根据有关规则建立起一个DF文件分配给该应用。在应用索引文件中还应该包括该应用所使用的所有命令。
对于应用删除有3种方式:(1)应用一旦被添加就不再允许被删除。(2)允许用户删除所有的应用,这种方式实现比前一种要复杂,当某个应用有使用的时间限制或者不需要再使用时,就可以考虑将该应用从卡上删除,以便回收存储空间。删除方法是:将该应用在应用索引文件中所对应的索引项删除就行了。回收的存储空间可以分配新添加的应用,但是新添加的应用所要求的存储空间大小不得超过回收的存储空间的大小,否则不得分配。(3)允许删除部分应用,某些应用在卡上起着非常重要的作用,这些应用只允许更新,而不能被删除,在这种方式下,在添加应用时就应该确定哪些应用可以被删除,哪些应用不能被删除。对可以删除的应用,删除方式同上,对不能删除的应用,删除时就要报错。
比较这3种实现方式,第1种方式实现容易,缺点是不够灵活,浪费有限的存储资源,第2种方式稍难一些,可以节约一些存储资源,但仍不够灵活,第3种方式实现比较困难,但相对而言比较灵活一些。但就技术实现而言,一般采用第2种方式为宜。
当一个应用中的某些内容需更新时,可用系统中有关的命令来更新相应的内容,但是更新后该应用所占的空间不能超出分配给该应用的地址空间,否则将拒绝更新。在更新过程中,一般是用更新的内容覆盖掉原有的内容。如果原有的内容仍有很大的价值,那么就应该考虑是否执行更新操作。提供更新操作的主要优点是可以延长卡的使用寿命。
当执行应用中的命令时,系统自动将应用索引文件的地址范围装入界限寄存器,一旦应用在执行中的地址越界,就需进行异常处理,并中断应用程序。采用这种方式就可以保证应用不会在执行过程中非法访问其他应用的数据或破坏系统资源。
5、小结
从理论上来说这种系统中可以添加无限个应用。但是到底能够添加多少个应用是受硬件和软件条件的限制的,应根据系统具体情况来决定。 “一卡多用”智能卡的应用范围是极其广泛的,它可以应用于金融财务(现金卡、信用卡、预付卡、电子支票、证券卡等)、社会安全(人寿和意外保险卡、社会保障卡等)、医疗(健康检查卡、捐血卡、病历卡等)、交通(交通卡等)等方面。本文从卡的硬件模型和软件模型方面讨论了一种“一卡多用”智能卡模型,着重讨论了它和传统智能卡模型的不同之处,并给出了一些实现的方法。使用上述“一卡多用”智能卡,能在硬件上提供物理隔离,可以实现真正的一卡多用并保证卡上多个应用及其数据的安全。
(文/武汉大学计算机科学学院,徐中华,刘玉珍, 张焕国)