CPU卡文件系统

转自:https://blog.csdn.net/red_sky_blue/article/details/42494517

CPU卡其实跟我们接触的计算机一样,也有自己的文件系统,要做一个应用,其实就是规定在CPU卡上有哪些文件(在CPU卡初始化时,建立文件系统文件的格式),在哪个文件里面存储什么内容,比如做一个IC卡燃气预付费系统,就是规定卡上的某个文件代表用户购买了多少气,什么时间购买的等等,当然,CPU卡的文件系统的控制机制要复杂的多,有些文件是不能读取的(如密钥文件),有些文件是只能读,不能写,有些文件是可读可写,但是要验证密钥,有些文件是可以直接读写,无需验证身份的。也就是说掌握了CPU卡上的文件系统的内容,基本就掌握了CPU卡这个应用的本质。

文件系统的组织结构

下图是,dos的文件夹树

智能卡的文件系统类似DOS 的树形文件系统。ISO7816 支持两类文件:DF(Dedicated File ) 和EF(Ele2

mentary File) 。DF 文件有点类似DOS 的目录,而EF 文件则有点类似DOS 的数据文件。DF 文件之下的

DF 文件,类似DOS 的子目录。当然,DF 之下还可以有DF 文件。同DOS 文件系统一样,智能卡的文件系

统也必须有一个根文件,这个根文件是一个DF 文件,我们把它称为MF (Master File) 文件,MF 文件类似

DOS 的根目录。

在智能卡的文件系统结构中,MF 文件有且只能有一个;DF 文件是可选的,这两种文件主要起管理和

形成树形的文件系统结构的作用,真正存放数据的是EF 文件。

  MF 文件是智能卡文件系统的根。在MF 文件下可以建立各种DF 和EF 文件。虽然系统允许在根下

直接生成各种EF 应用文件,但最佳的文件组织方法是每一种应用均分配一个DF 文件,在相应的DF 文

件下再具体组织各种EF 应用数据。

  DF 文件含有文件控制信息和可分配的存储空间的信息,其下可以建立各种DF 和EF 文件。一般而

言,一个DF 文件将被用来存储某一应用的所有数据。DF 文件在用户存储器中占据一块静态存储器,一

旦DF 文件建立,其存储器的大小就不能变动。但在该DF 文件下的EF 文件则可以重新分配所使用存储

器大小,也可以被删除。该DF 文件被删除之后,其下的DF 和EF 文件也同时被删除,释放的存储器块可

由其它DF 文件使用。

EF 文件是智能卡树形文件系统的叶,其下不能再建立其他任何文件。

2. 2  文件系统的文件访问机制

当访问一个文件时,我们可以使用下面几种方法中的至少一种来进行:

(1) 通过文件标志符(File Identifier) 来访问

在智能卡文件系统中每一个文件都有一个文件标志符,它占用2 个字节。值“3FFF”和“FFFF”系统保

留,不能用于具体的文件。对于MF 文件来说,它的文件标志符必须为“3F00”。因此,当我们访问智能卡

的文件系统时,起点就是从文件标志符为“3F00”的MF 文件开始。

(2) 通过文件路径来访问

所谓文件路径,就是无分隔符的文件标志符的串联形式。智能卡文件系统的文件路径起始于MF 文

件或者当前的DF 文件的文件标志符,而以要访问的文件的文件标志符结束;在这两者之间则是相关的

DF 文件的文件标志符。如果当前的DF 文件的文件标志符未知,则“3FFF”可以作为文件路径的开始。如

果文件路径以MF 文件的文件标志符开始,则称该文件路径为绝对路径;如果以当前DF 文件的文件标志

符开始,则称为相对路径。

(3) 通过EF 短标志符来访问

对于任意一个EF 文件,可以通过一个5bit 编码的短标志符来访问,其范围为1~30 。0 具有特殊含

义,表示当前正在访问的EF 文件。短标志符不能用于文件路径,也不能用作文件标志符。

(4) 通过DF 文件名来访问

每个DF 文件可以有一个1~16 字节长的文件名。为了能够明确无误的通过DF 文件名来访问DF 文

件,智能卡中的每个DF 文件的文件名必须不同。

2. 3  EF 文件的内部结构

EF 文件的结构可分为透明结构和记录结构两种。

(1) 透明结构:

透明结构EF 文件在通过接口被访问时只被视为数据单元(Data Unit) 序列,而好像没

有结构一样,所以我们称之为透明结构。所谓数据单元,就是可被访问的最小的位集(Smallest set of bits) ,

如1 个字节,2 个字节等等。透明结构本质上也就是二进制数据结构。

(2) 记录结构:

记录结构EF 文件在通过接口被访问时被视为具有结构的记录(Record) 序列。所谓记

录,就是可被作为一个整体加以处理的具有结构的字节串,类似于PASCAL 语言的记录的概念。

2. 4  EF 文件中的数据访问机制

  EF 文件中的数据可以通过记录、数据单元或者数据对象来访问。对记录结构的EF 文件而言,数据

被存储在连续的记录序列中;对透明结构的EF 文件而言,数据被存储在连续的数据单元序列中。如果试

图访问不在EF 文件中的记录、数据单元或者数据对象,将导致错误。数据访问方法、记录编号方法以及

数据单元的大小等作为文件系统的特征,在智能卡的复位应答过程ATR (Answer to reset) 中由智能卡给

出,还可以由智能卡中的ATR 文件给出,以及由其他文件控制信息给出。如果智能卡在上面提及的三种

方式中不止一处给出了数据访问方法、记录编号方法以及数据单元的大小等信息,那么对于任意一个EF

文件而言,由于不同出处给出的信息可能不一样,因此很明显只能有一个信息是有效的。而有效的信息

就是从MF 文件到该EF 文件的文件路径上最靠近该EF 文件的位置给出的信息。

(1) 记录结构EF 文件中记录的访问方法

对记录结构的EF 文件,其中的记录可以通过记录编号来访问。记录编号是无符号8 位整数,其取值

范围为01~FE。值00 保留作特殊用途;值FF 保留来将来使用。在每个记录结构的EF 文件中,每个记

录的记录编号都是唯一并且是有序的。

对于线性记录结构的EF 文件:当创建添加记录时,记录编号按照以一定顺序予以指定。也就是说记

录的记录编号按照记录的创建顺序指定。因此,第一个记录(记录编号为1) 就是第一个创建的记录;第

二个记录(记录编号为2) 就是第二个创建的记录⋯⋯以次类推。

对于循环记录结构的EF 文件:第一个记录(记录编号为1) 总是最后创建的记录;第二个记录(记录

编号为2) 就是倒数第二个创建的记录⋯⋯以次类推。很显然,对于循环记录结构的EF 文件的记录编

号顺序刚好和线性记录结构的EF 文件相反。

记录编号值00 总是表示当前记录,就是记录指针(record pointer) 当前指向的记录。

(2) 透明结构EF 文件中数据单元的访问方法

对每一个透明结构的EF 文件而言,其内部的数据单元通过偏移(Offset) 来访问。偏移是一个无符号

整数,长度为8 位或者15 位(由不同的访问命令来决定) 。当偏移为0 时,则访问该透明结构EF 文件的

第一个数据单元;偏移为1 时,访问第二个数据单元;偏移为2 时,访问第三个数据单元⋯⋯以次类推。

在缺省情况下,也就是智能卡没有给出数据单元大小的信息时,默认采用每个数据单元大小为1 字节。

(3) 数据对象的访问方法

所谓数据对象,就是采用抽象语法表示ASN. 1 (Abstract syntax notation) 的编码规则,如BER(Basic en2

coding rule) 等对数据按照一定的格式编码形成的一个数据结构。该数据结构通常包含三部分信息:标签

(tag) 、长度(length) 和数据(data) 。标签给出了数据的数据类型,如整数、ASCII 字符串、UNICODE 字符串、

structure 结构类型等等;长度则给出了数据的长度。很明显,这种数据对象本质上是自描述的。因此,当

访问数据对象时,可以通过标签等对数据对象进行访问。

猜你喜欢

转载自blog.csdn.net/luo4566/article/details/85643131