基于智能卡内核的文件系统设计
文章出处:http://www.nexussmartsolutions.com 作者: 人气: 发表时间:2012年03月18日
摘要:本文从ISO7816-4 协议和相关规范入手,深入分析了智能卡内核的基本文件结构,并提出了一种合理的设计方案。文章说明了各个基本文件的指针构成,详细阐述了各个情况下的指针操作要点和细节,并简单介绍了密钥文件和ATR 文件两种特殊的EF 文件。最后总结了不同文件所适用的相关指令。
关键词:COS;MF;DF;EF;ATR
1 引言
随着 IC 卡从简单的同步卡发展到异步卡,从简单的EPROM 卡发展到内带微处理器的智能卡(又称CPU 卡),对IC 卡的各种要求越来越高。而卡本身所需要的各种管理工作也越来越复杂,因此就迫切地需要有一种工具来解决这一矛盾,而内部带有微处理器的智能卡的出现,使得这种工具的实现变成了现实。人们利用它内部的微处理器芯片,开发了应用于智能卡内部的各种各样的操作系统。COS 的出现不仅大大地改善了智能卡的交互界面,使智能卡的管理变得容易;而且,更为重要的是使智能卡本身向着个人计算机化的方向迈出了一大步,为智能卡的发展开拓了极为广阔的前景。
COS 的全称是Chip Operating System(片内操作系统),它一般是紧紧围绕着它所服务的智能卡的特点而开发的。由于不可避免地受到了智能卡内微处理器芯片的性能及内存容量的影响,因此,COS 在很大程度上不同于我们通常所能见到的微机上的操作系统(例如DOS、UNIX 等)[1]。
COS 的主要功能是控制智能卡同外界的信息交换,管理智能卡内的存储器并在卡内部完成各种命令的处理。其中,与外界进行信息交换是COS 最基本的要求。在交换过程中,COS 所遵循的信息交换协议目前包括两类:异步字符传输的T=0 协议以及异步分组传输的T=l 协议。这两种信息交换协议的具体内容和实现机制在IS0/IEC78l6-3 和IS0/IEC7816-3A3 标准中作了规定;而COS 所应完成的管理和控制的基中功能则是在ISO/IEC78l6-4 标准中作出规定的。在该国际标准中,还对智能卡的数据结构以及COS 的基本命令集作出了较为详细的说明。至于 IS0/IEC78l6-l 和2,则是对智能卡的物理参数、外形尺寸作了规定,它们与COS 的关系不是很密切。
2 文件系统
2.1 文件系统概述
整张卡片包含3 种基本文件结构:
MF(Master File)文件:是整个文件系统的最高级,可以包含若干的DF 和EF 文件,卡片中只能有一个MF 文件。它是在卡的个人化过程被首先建立起来,在卡的整个生命周期内一直保持有效,可存储卡片的公共数据信息并为各种应用服务。卡片复位后,自动选择MF 文件为当前文件。
DF(Dedicated File)文件:是MF 或DF 的下一级,包含用户设置的系统信息和应用相关数据,在MF 下DF 的数量只取决与卡片容量和用户的应用,它也可以包含若干的DF。
EF(Elementary File)文件:是文件结构的末端,只包含系统信息、内部数据或用户数据。EF 文件从存储内容上分为三类:密钥文件、工作基本文件和ATR 文件[2]。
文件系统结构图如下:
图1 文件系统结构图
2.2 文件结构
2.2.1 MF 文件
2.2.2 DF 文件
2.2.3 EF 文件
对于二进制文件和变长记录文件,文件空间 = 空间大小高字节 || 低字节
对于定长和循环文件,文件空间 = 记录数字节 || 记录长度字节
当前记录指针:最新写入记录的位置
对于循环文件,B7(最高位)表示记录是否已经写满,B7=0 表示写满,B7=1 表示未写满,所以循环文件最大记录数为127。此位对于定长记录文件不起作用。
定长、循环记录文件每条记录只包含记录内容值V;变长记录文件每条记录中包含记录内容长度L+记录内容值V
2.2.4 文件指针
文件指针共6 字节:2 字节的父目录指针+2 字节的子目录的指针+2 字节的EF 指针,所有指针都指向文件头的首地址,在卡片刚上电或选择了MF 之后,2 字节的父目录指针为空(00 00),2 字节的子目录的指针为MF 的首地址;在任意选择某个目录(按部分AID 选择下一个DF 除外)后,原来的子目录设置为父目录,新选择的目录设置为子目录,同时EF 指针置为空(00 00);在任意位置选择EF 文件后,都只设置EF 指针,不影响父目录和子目录指针。如果是按部分AID 选择下一个DF,则父目录不改变,只改变重新设置子目录和EF 指针。
2.3 EF 文件
2.3.1 文件类型
2.3.2 循环文件
假设已经建立一个记录数=10 的循环文件,如果没有写入任何记录,则当前记录指针=80。(bit7=1,表明当前记录未写满)如果追加了(Append Record)4 条记录,则当前记录指针=84。在成功选择这个文件后,内存记录指针CP=00,具体操作(读或更新)如下:
如果操作第一条记录:则操作第4 条记录,操作成功后,设置CP=4。
如果操作最后一条记录:则操作第1 条记录,操作成功后,设置CP=1。
如果操作下一条记录:
如果CP=00,则操作第4 条记录,操作成功后,设置CP=4。
如果CP!=00,则操作第CP-1 条记录,当CP=1,返回错误状态码,否则操作成功后,设置CP=CP-1。
如果操作上一条记录:
如果CP=00,则操作第1 条记录,操作成功后,设置CP=1。
如果CP!=00,则操作第CP+1 条记录,当CP=当前记录指针,返回错误状态码,否则操作成功后,设置CP=CP+1。
如果假设又追加了10 条记录,则当前记录指针=04(在追加第7 条记录时,因为空间已满必须覆盖第1 条,写成功后同时设置当前记录指针最高位=0)在成功选择这个文件后,内存记录指针(CP)=00,具体操作如下:
如果操作第一条记录:则操作第4 条记录,操作成功后,设置CP=4。
如果操作最后一条记录:则操作第5 条(当前记录指针+1)记录,操作成功后,设置CP=5。
如果操作下一条记录:
如果CP=00,则操作第4 条记录,操作成功后,设置CP=4。
如果CP!=00,则操作第CP-1 条记录,当CP=1,操作CP=10 的记录,操作成功后,设置CP=10(总记录数);当CP-1=当前记录指针,返回错误状态码。
如果操作上一条记录:
如果CP=00,则操作第5(当前记录指针+1)条记录,操作成功后,设置CP=5。
如果CP!=00,则操作第CP+1 条记录,当CP=10(总记录数),操作CP=1 的记录,操作成功后,设置CP=1;当CP=当前记录指针,返回错误状态码。(以上返回的错误状态码=6A83)
执行APPEND RECORD 命令时,将新记录写入当前记录指针+1 的位置(只在执行APPEND RECORD 命令成功后才修改当前记录指针),例如,如果当前文件为空(当前记录指针=80),那么写完新记录后,当前记录指针应为81,每次写完当前记录指针都加1。
如果当前记录指针=8A(刚好写满文件),再写入新记录后,当前记录指针变为01。
第1页第2页 |