一种基于FLASH的智能卡文件系统的实现方法*
2019-04-30马资道魏贵鹏
马资道,魏贵鹏,谢 演
(成都三零嘉微电子有限公司,四川 成都 610041)
0 引 言
智能卡将计算机技术、微电子技术、高频技术、半导体技术、信息安全技术特别是数据保护和密码学技术结合在一起,提高了人们生活和工作的安全性,是用户信息的载体,在进行用户身份认证和金融交易过程中起到了重要的作用。智能卡由硬件资源(智能卡芯片)和智能卡操作系统COS(Chip Operating System)组成,COS是智能卡的核心。智能卡操作系统用于控制卡片和终端设备的通信,管理卡内存储的数据资源,并对终端设备发送的指令进行分析和处理。智能卡操作系统中最重要的是对数据进行存储和读写的文件系统,ISO7816-4[1]规定了智能卡操作系统的文件系统的规范,规范要求智能卡采用统一的文件类型和组织格式,包括文件系统的文件类型和基本的文件操作。
本系统中,在基于ARMSC000核自主研发的芯片上,采用ISO7816-4接口协议,实现了一种基于芯片内部FLASH存储器的智能卡文件系统。本文对整个文件系统的框架结构进行了概述,并介绍了芯片内FLASH上文件系统存储结构的设计,同时重点讲述了文件系统中文件的创建、查找、读写和密钥安装及索引功能的实现。最后对本系统进行了总结和分析。
1 智能卡文件系统概述
在智能卡内,数据的管理和维护一般通过文件系统来进行。文件系统是COS的重要模块之一,它负责组织、管理和维护智能卡内存储器的所有数据。智能卡文件系统的主要功能包括空间的管理和维护、数据的有效存储、数据的查找与定位和数据的修改及维护。智能卡文件系统是一个承上启下的模块,对底层实现了存储空间的管理维护,对上层完全透明地实现了数据的管理功能,隐藏其实现的细节。智能卡文件系统的设计和实现是COS系统中最灵活、最具个性的部分,也是对系统整体结构影响最大的模块之一。文件系统设计是否合理直接关系到文件的数据结构、存取速度和智能卡的整体性能。
根据ISO7816-4标准中规定的文件系统结构说明,智能卡内的文件分为3种类型:主文件MF(Main File)、专用文件DF(Dedicated File)和基本文件EF(Elementary File)。这些文件依照规定的格式组成了智能卡文件系统的树状结构,如图1所示。
图1 智能卡文件系统结构
MF是文件系统的根目录,这个文件是整个智能卡的入口,一个智能卡文件系统中只能包含一个主文件MF,MF文件下可以包含其它两类文件。专用文件DF可以是其它DF文件的父目录,也可以是EF文件的父目录。基本文件EF是一个文件元,它是保存数据的实体,根据数据结构的不同,可将EF文件分为透明二进制文件、定长记录文件、变长记录文件、循环记录文件。MF和DF相当于文件夹,MF是顶层根文件夹,DF是各个具体的应用的文件夹,EF是具体的数据文件,EF文件不能是DF或者其它EF文件的父文件[2]。
2 智能卡文件系统的实现
文件系统及其存储管理空间管理是智能卡系统的重要组成部分,其设计是否合理直接影响到智能卡的性能[3]。智能卡文件系统的设计主要涉及文件存储管理、目录及文件数据结构设计、文件创建、文件查找、文件读写和系统安全数据如密钥和PIN(Personal Identification Number)码的安装和索引等机制的设计与实现。
2.1 文件系统存储管理
智能卡文件系统的存储管理有多种设计方法。针对存储容量大的系统,可以采用动态的方式,数据可以乱序存储,依据目录项和文件编号建立链表,动态分配空间和回收,但需要复杂的文件搜索方法,比较消耗资源。本系统采用静态的方式,依序存储,系统创建后不需要对文件的大小和位置等进行频繁的改动,适合存储空间较小的嵌入式系统[4]。
本系统中,选取智能卡芯片FLASH中的一块连续地址空间作为整个文件系统的存储区域。该区域划分为系统配置区和文件数据区。如图2所示。
图2 FLASH数据空间划分结构
FLASH内部以BLOCK(数据块)作为最小的存储单元,每个BLOCK的大小固定,文件数据区的空间划分为多个连续的BLOCK并从1开始进行编号。如上图所示,本系统中系统配置区起始位置使用几个固定字节用来记录当前文件数据区剩余可用的起始BLOCK号,以文件数据区的第1个BLOCK为起始块并不断更新,用于后续文件创建分配空间时进行地址计算。文件系统区的第1个BLOCK区用来存储MF主文件数据结构,后续BLOCK用来存储DF文件或是EF文件。DF文件占用一个BLOCK空间大小,EF文件可以占用一个或多个BLOCK。MF和DF文件包含文件索引区和目录结构区,而EF文件包含文件索引区、文件结构区和文本内容区。其中文件索引区用来统计存储当前文件所占用的BLOCK个数和文件数据区剩余的可用BLOCK个数,同样用于文件的存储地址计算。目录结构区存储目录的数据头信息,文件结构区存储文件的数据头信息。
本系统中,文件在创建时其大小,存储地址,索引偏移就已确定并被保存起来,形成一个单向链表,方便访问。
2.2 文件系统数据结构设计
本文件系统的数据结构主要包含图2中所示的文件索引结构,目录数据结构和文件数据结构。
文件索引结构包括下一个BLOCK号、剩余BLOCK个数和起始BLOCK号等字段。设计如下:
目录数据结构包括指向下一个同级文件的指针、指向子文件链表的首地址的指针、按ISO7816-4规定定义的文件标识符、子文件链表记录标记、在该DF下创建文件时的访问条件、在该DF下创建文件时的数据传输条件、该DF的名字长度和文件名等字段。设计如下:
文件数据结构包括指向下一个同级文件的指针、按ISO7816规定定义的文件标识符、文件类型、短文件标识符、该文件的数据长度、读写文件时的访问条件和读写文件时的传输条件等字段。设计如下:
typedef struct _EFHeader
2.3 文件创建
智能卡文件系统一个重要的功能是进行各种文件的创建,支持的文件类型有目录文件(包括MF、DF)、KEY和PIN文件、二进制文件和记录文件。本系统中,创建文件的流程如图3所示。
图3 文件创建流程
智能卡中第一次创建文件时,必须先创建MF文件作为根目录。创建MF时,终端需传送MF的文件头信息,包括创建MF标志、MF的文件标识、MF的文件类型、错误重试次数、创建文件时的访问条件和传输条件、文件名长度和文件名等参数,创建成功后,自动选中MF文件。创建DF文件与创建MF文件类似,不同之处是文件标识和文件名不同,创建成功后,自动选中DF文件。创建EF文件时,终端需传送EF的文件头信息,包括创建EF标志、EF的文件标识、EF的文件类型、EF的短文件标识符、文件长度、读写权限,传输权限等参数。创建文件时应当根据传输条件和访问条件检测数据是否满足安全状态,是否需要依据主控密钥(Main Key)对数据进行MAC检验和解密,然后输出解密出来的原始数据进行文件的创建。
创建文件时,根据系统配置区中的剩余起始BLOCK号、文件索引中的剩余可用BLOCK个数和文件大小在文件数据区的进行所需空间的分配和地址的计算,并更新文件索引区和目录头或文件头结构,为EF文本内容区预留空间,后续文件读写操作就可以向此地址处读写数据。同时更新系统配置区和下一BLOCK预分配的文件索引区,形成一个单向的链表,完成文件的创建。
2.4 文件查找
本文件系统中,提供了文件查找功能,可以依据文件名、文件短文件标识符(Short File Identifier,SFI)、文件类型和文件标识(File Identifier,FID)来进行文件的查找。在当前目录下,所有创建的文件头信息中,存在一个单向树状链表结构,此链表是在文件创建是建立的,如图4所示。
图4 文件树状链表
根据此链表,从该目录的指向子文件的指针指向最后一个文件的BLOCK起始块号开始,然后最后一个文件的指向下一个文件的指针指向上一个文件的起始块号,依次链接,直到本目录的指向下一个文件的指针指向系统配置区中的剩余起始BLOCK号。依据此路径查找,反向遍历读取FLASH中所有文件的头信息,并与传入的查找字段进行对比,如果二者相同,则表示找到对应的文件,返回该文件的头结构信息,否则继续查找直到当前目录下的所有文件均遍历完成而没有找到,则表示查找失败。
ISO7816规范通用指令中的文件选择功能就是先调用文件查找接口,查找到对应的文件后,再更新当前的文件头信息。
2.5 文件读写操作
本系统中文件的读写操作主要包括二进制文件的读(Read Binary)和写(Update Binary)操作,记录文件的读(Read Record)、写(Update Record)和追加(Append Record)操作[5]。
文件读写操作需先按层级定位到对应的文件,依照FID选择目录,再选择该目录下的文件,使得该文件的数据头结构更新为当前文件的信息。
二进制文件的读写操作流程设计如图5所示。
图5 二进制文件读写流程
如图5所示,二进制文件的读写操作需判断是否满足访问条件,是否需对传输的数据进行MAC检验和解密,再调用文件访问接口。底层文件读写访问接口中,先根据文件的头信息、传入的偏移地址计算该文件对应的文本区域读写地址,再根据文件长度读取或写入数据到文本内容区。
记录文件的读写操作与二进制大致相同,但需传入该记录的索引号和记录长度,用来计算记录文件读写地址。
记录文件的读写操作流程设计如图6所示。
单个文件中可以存在多条记录,依序存储,以记录号作为索引。通过记录索引号,可以根据需求完成指定的记录、当前文件读写指针所指定的上一条记录、下一次记录,最后一条记录和第一条记录的读写操作。
追加记录文件则是始终追加一条新的记录到该文件的最后索引处。值得注意的是,读写、追加记录文件时,如果操作指针已经到了文件的末尾,如果是循环记录文件,则从该文件的第一条开始操作,如此循环。如果是非循环记录文件,则会报错。
图6 记录文件读写流程
2.6 密钥安装与索引
本系统中密钥和PIN码都存放在一个特殊的密钥文件中,不得出卡,只能在智能卡创建文件系统时通过上终端对密钥和PIN码进行安装,并提供查找和读接口供外部调用。要安装的密钥必须被安装在当前DF目录下的密钥文件中,如果密钥文件不存在,则必须先创建密钥文件。终端发送过来的密钥和PIN必须经过MAC检验和加密处理,安装时再进行解密。第一次安装密钥时,需先安装主控密钥(MKey),每个DF目录下都有唯一的一个MKey,MKey是安装其它密钥的加密密钥。
安装密钥时需终端传入密钥标志、密钥类型、密钥版本号、密钥算法、密钥索引号、密钥的使用权限、最大错误重试次数、密钥数据长度和密钥的数据内容。安装PIN时需终端传入PIN标志、PIN索引号、PIN重装密钥ID、PIN解锁密钥ID、最大错误重试次数、验证成功后的安全状态、PIN数据长度和PIN的数据内容。
安装密钥或PIN时在其头结构信息中保存了密钥或PIN的索引号,并在密钥文件的头信息中保存了一份密钥和PIN的个数统计信息,芯片内部使用密钥时,可以先根据密钥文件中的统计信息,遍历查找和读取每个密钥的头信息,并与传入的索引号和KEY类型进行对比,相同则表示查找成功,返回KEY的内容。
3 结 语
本系统实现了一种基于FLASH的智能卡文件系统,满足ISO7816-4规范的接口要求,对智能卡相关产品具有重要的借鉴作用。具有较高的安全性能,在同类产品应用中具有较大的优势,是一种实用新型的智能卡文件系统解决方案。