原创 IC卡内文件的类型(2)

2008-12-7 22:14 4735 5 5 分类: 软件与OS
3、基本数据文件EF

    在文件树中,如果一个文件节点没有子节点,也就是说它本身是一个叶子节点的话,这样的文件称为EF(Elementary File,基本数据文件)。

    EF是卡内数据的基本载体,根据不同的形式,EF文件可以分为不同的类型,COS根据EF的各种类型定义了不同的文件操作逻辑。

    在卡内,EF都隶属于某一个DF,COS采用两种方式来标识EF。一个是EF的文件标识符FID,一般的,EF和其父DF的FID高字节相同,EF的FID低字节作为EF文件的扩展短文件标识符,称为eSFI,eSFI的低5位称为短文件标识符SFI,在同一个DF下,所有EF的SFI要求都不相同。二是EF的文件类型,在每一个EF的文件属性描述中都包含有文件类型标识,某些特殊类型的EF在同一DF下要求唯一。

    对EF的选择方式和DF不同。对DF的操作一般要求事先进行显式的选择操作,被选的DF作为当前文件,接下来的所有文件操作都针对当前文件进行;对EF操作之前要求先选择其父DF作为当前文件,对EF的选择在具体的操作命令中隐式的进行。EF的选择方式有两种,一是通过SFI进行选择,SFI在当前DF下唯一;二是通过文件类型进行选择,主要针对一些系统文件的操作,例如个人密码PIN文件、对称密钥文件等,这些类型的文件在当前DF下也要求唯一存在。

    下面我们来看看不同的EF及其操作模式。

   (1)按数据结构分类

    卡内保存的数据可以分为两类,一类是透明的流数据,具体的数据内容和格式在卡外进行解释,卡内解释为一个连续的二进制数据流;第二类是结构数据,数据以记录的形式存在,COS能够将数据解释为若干条二进制的记录流。根据所存储数据的结构不同,EF可以分为不同的类别,不同结构的EF对应了不同类型的操作。

   a. 透明二进制文件

    透明二进制文件是卡内所有文件的基础,卡片将数据作为一个字节流来进行处理,二进制文件的主要属性只有文件体的大小。

    对二进制文件夹的操作包括文件数据的读、写两种模式。

    数据的读写操作包括以下两种方式。

    * 文件体全部数据的读写操作。
    * 文件体某一区段数据的读写操作。在读写操作之前,必须给出要读写区段起始位置在文件体的偏移量和要读写区段的长度。

    需要注意的是,对于区段读写需要严格检查区段是否超出了文件体的范围。

   b. 定长记录文件

    在定长记录文件中,文件体划分为n个等长的区段,每一个区段对应一条数据记录。

    二进制文件的主要属性包括:所容纳的记录每一条的大小,能够容纳的总的记录条数。在实际的使用阶段,为了标识记录的有效性,还可以包括当前已经写入的记录的数目,为了进行记录逐一检索,还需要记录当前操作的记录序号等。

    当前操作的记录序号由COS来进行自动维护,在文件第一次被选择时自动置为空,以后根据实际访问进行修改。

    对定长记录文件的操作都以记录为对象进行,包括记录的读、写、添加3种模式。

    记录的读写操作包括几种方式。

    * 指定记录序号的记录读写操作,这一操作不改变当前操作记录序号。
    * 相对当前记录位置的定位方式,包括当前记录的前一条、后一条记录等。如果当前记录号为空时,如果访问前一条记录的话,返回第一条记录,并置当前记录为第一条记录;如果访问后一条记录的话,返回最后一条记录,并置当前记录为最后一条记录。
    * 相对全局记录位置的定位方式,例如第一条、最后一条记录等,这一操作将把该记录设置为当前记录。

    在定长记录的操作过程中,需要严格检查记录号是否在文件包含的记录数的范围内,当前记录号对应的记录数据是否有效等。

    记录的添加操作即在最后一条记录的后面添加新的记录。

    * 如果逻辑上的最后一条记录不是物理上的最后一条,即其后还有空闲的记录空间,新的记录顺序添加在后面,同时将新的记录设为逻辑的“最后一条记录”。
    * 如果逻辑上的最后一条记录是物理上的最后一条,即其后没有空闲的记录空间了,则添加操作失败,卡片返回相应的错误码。

   c. 变长记录文件

    变长记录文件和定长记录文件一样,文件体的数据区被划分为多个记录段,但是每个记录段的长度都不相同,卡片必须根据每一条记录的实际长度来进行定位。

    变长记录文件的属性包括文件体的大小,也就是所有记录长度之和可能达到的最大值。此外,还有当前文件中包含的所有记录的总数。由于记录的长度都不确定,和定长记录文件中只保存每一条记录体内容不同的是,变长记录文件体中的每一条记录体中还必须包含该条记录的实际数据长度。同时,卡片还需要记录当前操作的记录序号等。

    当前操作的记录序号由COS来进行自动维护,在文件第一次被选择时自动置为空,以后根据实际访问进行修改。

    对变长记录文件的操作也以记录为对象进行,包括了记录的读、写、添加等操作。

    对记录的读写操作包含了如下几种形式。

    * 指定记录序号的记录读写操作,这一操作不改变当前操作记录号。
    * 相对当前记录位置的定位方式,包括当前记录的前一条、后一条记录等。如果当前记录号为空时,如果访问前一条记录的话,返回第一条记录,并置当前记录为第一条记录;如果访问后一条记录的话,返回最后一条记录,并置当前记录为最后一条记录。
    * 相对全局记录位置的定位方式,例如第一条、最后一条记录等,这一操作将把该记录设置为当前记录。

    要注意的是,对变长记录的存储一般使用链式存储方式,对变长记录的写操作必须遵循的重要原则是:新的数据长度必须和原有数据长度等长,这也是进行写操作处理时要重点检查的内容。同时,还需要检查操作指定的记录号是否有效。

    对记录的添加操作是在文件体最后一条记录的后面添加新的记录。新的记录添加成功以后将称为新的最后一条记录。

    进行添加操作时,卡片需要重点检查此时文件体的剩余空间是否能够容纳该记录体,包括记录的实际数据长度和可能需要的长度等指示字节。

  d. 环形定长记录文件

    环形定长记录文件和定长记录文件类似,文件体被划分为多个等长的记录段,区别在于记录之间的关系。定长记录文件逻辑上的第一条和最后一条与物理意义上的基本相符,但是在环形定长文件中数据空间物理意义上的第一条记录和最后一条记录相连组成了一个记录环,逻辑上的第一条和最后一条记录表示的是最早添加和最新添加的记录项。

    环形定长记录文件的属性包括所容纳的每一条记录的大小,能够容纳的记录数。还由于是一个环形的结构,需要记录逻辑第一和逻辑最后一条的记录位置。同时,卡片还需要记录当前操作的记录序号等。

    当前操作的记录序号由COS来进行自动维护,在文件第一次被选择时自动置为空,以后根据实际访问进行修改。

    对环形定长记录文件的操作也以记录为对象进行,包括了记录的读、写、添加等操作。

    对记录的读写操作包含了如下几种形式。

    * 指定记录序号的记录读写操作,这一操作不改变当前操作记录序号。
    * 相对当前记录位置的定位方式,包括当前记录的前一条、后一条记录等。如果当前记录号为空时,如果访问前一条的话,返回第一条记录,并置当前记录为第一条记录;如果访问后一条记录的话,返回最后一条记录,并置当前记录为最后一条记录。
    * 相对全局记录位置的定位方式,例如第一条、最后一条记录等,这一操作将把该记录设置为当前记录。

    要特别注意的是,和定长记录文件不同在于,每一条记录都有下一条记录和上一条记录的概念,可以无限循环进行,此外,第一条、最后一条等都是逻辑概念,要和物理意义上的严格区分开。

    对记录的添加操作是在文件体中逻辑上最后一条记录的后面添加新的记录。

    * 如果在最初记录环还没有完全充满的时候,添加的新记录将占用一个空的位置,成为新的“最后一条”,逻辑上的第一条记录位置不变。
    * 如果在记录环已经完全充满以后,可以设想,这时逻辑上的第一条和最后一条相邻,“第一条”是“最后一条”的“下一条记录”,“最后一条”是“第一条”的“上一条记录”,这时添加新记录的话,新记录将占用原“第一条记录”的空间,旧的记录内容被覆盖了。新的记录将成为“最后一条记录”,原“第一条记录”的下一条记录将成为新的“第一条记录”。

    所以在进行添加操作时,卡片需要根据记录环的占用情况决定环的指示指针更新,和不定长记录文件的添加不一样的在于,环形记录文件可以无限次的进行添加操作。

    当然,对于不同文件类型的操作模式还可以在此基础上进行扩展,或者对以上操作模式进行一定的简化,甚至只实现透明二进制文件一种文件类型等等,这个可以根据COS的实际需求来进行取舍。

  (2)按文件用途分类

    除了按照EF文件内数据结构来进行划分以外,还可以根据EF文件所存储数据的类型进行分类,也即按照文件的用途来分类。

   a. DIR文件

    DIR文件是DDF下用以记录其子DF的文件,通常为一个变长记录文件。

    记录的每一项分别对应着一个子DF,一般包括DF的AID等信息。

    应用终端可以通过读取DIR文件来得到卡内已存在的所有ADF,也即卡内存在的所有应用。

    DIR文件在DDF下唯一存在,必须在创建子DF之前创建出来。

    DIR文件可以作为记录文件进行读取,但是通常不允许外界的写文件操作。此外,一般不实现对DIR文件任何的显式操作,对DIR文件的维护工作由COS系统自动完成。

   b. PIN文件

    PIN文件是卡片中和卡片安全相关的文件,保存和DF相关的用户个人密码信息。

    DF下的PIN文件可以根据应用的需求决定是否存在,如果存在的话在DF下唯一。PIN文件通常是一个定长记录文件。

    记录的每一项分别对应了一条PIN记录,记录体通常是PIN的属性和内容等信息。每一个PIN文件能够容纳的PIN的数目可以根据COS的实现来定义,根据应用的具体情况,COS可以选择实现单一PIN或者能够支持多条PIN的模式。

    PIN文件的内容是需要保密的重要信息,通常不允许进行读操作。

    对PIN文件没有显式的选择过程,在与PIN相关的命令执行过程中由COS自动进行查找。

    对PIN文件通常也没有显式的写文件操作,通常通过添加PIN、修改PIN、重装PIN等命令完成。

   c. 对称KEY文件

    对称KEY文件是卡片中和卡片安全相关的另一个重要文件,保存和DF相关的各种对称KEY信息。

    DF下的KEY文件可以根据应用的需求决定是否存在,如果存在的话在DF下唯一存在。根据对称KEY文件中保存的KEY的类型,KEY文件可以选择采用一个定长记录文件或者变长记录文件,选用的类型由COS来决定。目前卡片安全体系中一般选用DES和3DES算法作为对称密钥体系的基础,所以可以选用定长记录文件。

    记录的每一项分别对应了一条KEY记录,记录体通常是KEY的属性和内容等信息。每一个KEY文件通常能够容纳多条的KEY记录,容纳的条数和每一条KEY的作用都由DF对应的具体应用来决定。

    需要特别注意的是,在目前的卡片安全体系中每一个DF都有一个必备的对称密钥,这个密钥通常不保存在对称KEY文件中。

    KEY文件的内容是需要保密的重要信息,通常不允许进行读操作。

    对KEY文件没有显式的选择过程,在与KEY相关的命令执行过程中由COS自动进行查找。

    对KEY文件通常没有显式的写文件操作,通常通过写KEY、重装KEY等命令完成。    

   d. 非对称KEY文件

    非对称KEY文件和PIN文件、对称KEY文件不同,一方面它是卡片中和卡片安全相关的一个重要文件,保存和DF安全相关的非对称KEY信息,另一方面它也可以作为卡片中的应用文件,具体的使用由应用来定义。

    非对称KEY文件一般只在支持PKI体系的COS和应用中才存在。在每一个文件中一般只保存一对非对称KEY的信息,包括公钥和私钥两部分。通常选用透明二进制文件格式来存储,文件体的内容由COS解释。

    对非对称KEY文件的选择过程,在与非对称相关的命令执行过程中指定,通过选择文件同时可以得到相关的非对称密钥对的信息。

    在这个KEY文件中,私钥的信息是需要严格保密的,公钥的信息可以公开。所以,对文件的读操作要分层次进行控制,通常,对私钥的读取可以设置为禁止或者要求某些保护,对公钥的读取可以设置安全条件没有或者比较宽松。

    对非对称KEY文件没有显式的写文件操作,通常通过写KEY命令来完成。

   e. 应用自定义解释文件

    除了以上这些系统解释的特殊文件类型外,应用还可以自定义一些特殊的文件类型,这些特殊文件的数据含义由应用自定义和自解释,COS只是将其作为透明二进制、定长记录、不定长记录、环形记录等文件类型来操作。

    我们在开发涉及金融的应用支持中经常接触到两种特殊文件,一个是电子钱包文件,一个是电子存折文件,如果COS要支持金融应用,一般在COS中包含这两种特殊文件的定义。对这两类文件的操作完全通过应用命令来完成。


文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条