动态多应用智能卡文件系统的研究与设计
作者:RFID世界网 收编
来源:维库开发网
日期:2010-06-23 09:12:44
摘要:本文研究并设计动态多应用智能卡文件系统。利用文件分配表为每个文件建立映像,利用 CMB 块进行文件管理,设置文件访问机制保证了每个应用的读写安全,最后详细设计文件操作命令,使得 应用可以对文件进行建立,删除等操作。
引言
智能卡或称 IC 卡,英文名称为SMART Card 或Integrated CircuitCard。它是由一个集成电路芯片嵌 于塑料基片中封装而成。卡中的集成电路包括中央处理器(CPU) ,闪存(EEPROM)、随机存储器 (RAM)、只读存储器(ROM) 等[1]。动态多应用智能卡允许一张卡片上可以同时容纳多个应用,并且在 不同的场合使用不同的应用,同时应用本身还可以根据需要随时下载到卡中或从卡中删除。这给供卡 方、发卡方和持卡方都带来了好处。动态多应用智能卡将是智能卡未来发展的总趋势。
1 智能卡文件系统的设计模型
1.1 文件的类型及组织结构
本系统遵守ISO/IEC 781* 标准所定义文件标准。根据标准,可以支持专用文件(DF)和基本 文件(EF)两种文件。卡内的文件的逻辑组织结构由下列专用文件的结构化分级组成,在根处的DF 称为主文件(MF)。该MF 是必备的。其他DF 是任选的。定义两种类型的EF:1)内部EF(KEF)。 存储那些预期由卡解释的数据。如密钥。2)工作EF(WEF)。存储那些预期不由卡解释的数据。
EF 结构有以下几种,
1)透明结构。指的是二进制的或杂乱无章的结构。换句话说,一个透明文 件根本没有内部结构。该结构的文件可以通过使用偏移值进行读出和写入。READ BINARY 和 UPDATE BINARY 命令可用于这些方面。
2)记录结构。是基于链接固定长度的记录文件结构,这种 结构的数据可以自由存储,存取的最小单位是一个记录。该操作系统支持线性定长记录结构,并且记 录长度必须为4 个字节的偶数倍数,并且小于一页大小,这样就防止一条记录跨页存储。
文件的逻辑组织结构如图 1 所示。文件系统是一个树型结构,根目录为MF。MF(主文件)是 特殊的文件,是文件系统的根,在卡片中唯一存在,相当于DOS 的根目录。EF(基本文件)建在DF 下,存储应用的各种数据和管理信息。DF(专有文件)一般仅相当于DOS 的子目录,但主文件MF 的一个DF 则代表了一个应用。MF 下和应用的根DF 下都有一KEF,用于存储密钥或PIN。MF 下的 DF 中建立的EF 和DF 都只能由该应用使用,其他应用不能访问。
智能卡中的目录文件(MF 和DF)仅由文件头标组成,EF 文件是由文件头标和文件体两部分组 成的。文件头中包含文件的标识、大小、访问权限和其他基本信息。文件头的长度是一定的。EF 的 文件体就是各种卡片应用所需的数据元。其大小是在文件创建时就确定的。
1.2 文件访问以及文件管理
所有EF 文件头中都含有属性字段,指明此文件的特殊信息。属性字段占两字节,字段中的每一 比特位代表一种属性。它们在创建时确定,不允许更改。目前只使用了前三个比特位,分别是:
1)可删除属性。此属性位为1 表示可以被删除,0 表示不可被删除。
2)可写属性。此属性位为1 表示可以被修改,0 则表明此文件为只读文件。
3)可读属性。此属性位为1 表明此文件可以被浏览,0 表示不可以被浏览。
应用要对文件访问需要达到一定的安全状态。当该应用的进程现有状态满足所需要状态,并且符 合和该文件的属性要求时,该进程才能访问文件。当前进程的安全状态是由其是否满足当前目录文件 下的KEF 中的相应密钥决定的。在MF 下仅有DF(应用目录),没有EF 文件,其KEF 则只含有创 建密钥,读密钥,删除密钥。而一般的KEF 文件中含有四个密钥,分别是读密钥,写密钥, 创建密 钥,删除密钥。
为了方便文件管理,有一些典型变量要保存在 RAM 中,把这些变量封装成一个结构体CMB, 放在进程的PCB 中。一个CMB 块包含如下变量:1)mfhead。此变量总指向最高层MF 文件头地址。 2)mfsecurity。此变量表明MF 达到的安全状态。其初始值在进程建立时赋值。3)dfsecurity。此变量 表明现行选择的DF 达到的安全状态。其初值在进程建立时赋值。4)currentdf、currentwef。这两个 变量分别为当前DF、当前WEF 文件头地址。在进程时它们的值为NULL,在进程运行过程中由 SELECT 命令显式赋值。5)currentrecord_adr。此变量在当前WEF 为记录结构时使用,它指向当前使 用记录号, 如为透明文件,无效地址。在进程建立或者重新选择WEF 时,其值被赋为0。由记录结构 WEF 读、写命令更改。6)currentef_kef。此变量为当前DF 下KEF 文件头地址。当创建进程时,就 会创建一个CMB 块,其 currentdf 被赋为当时正在访问的DF,安全状态被赋为0。如果currentdf 为 0 时,表示当前的工作目录为MF。
1.3 EEPROM 的划分该智能卡的EEPROM 大小为256K,其中分为应用数据区(32K),应用代码去(160K),系统区 (16K)以及交换区(48K)。
应用数据区存放着应用的配置数据,并且都是以文件的形式存储的。应用数据区的 EEPROM 是 以页的形式动态分配给各个应用,每页大小为32 字节。每个文件的页地址信息由文件分配表详细记 录。应用代码区存放着应用的运行代码。应用代码区分为40 块,每块大小为4K。块和应用是一一对 应的关系,即每块对映一个应用。系统区:存放操作系统的信息以及用于管理应用及文件的一些系统 表:应用使用表,文件分配表,文件打开表,数据区使用表。文件打开表是用来防止读写冲突的,当 某文件正在被改写时,需要给该文件上锁,等对该文件操作完成后再对该文件解锁。
数据区使用表记录了应用数据文件在数据区的存储情况,当一个应用要访问某一个数据文件时,需要查看该表,检查 该文件是否属于该应用,防止应用篡改其他应用的数据文件。操作系统的信息用超级块记录。交换区 就是当内存不足时,使用交换区来扩充内存。
2 文件系统
2.1 文件分配表该操作系统中,文件系统仅设计到应用数据区,和应用系统区以及应用代码去无关,所以文件系 统占32K 的EEPROM 空间。数据区是以页的形式分配给文件的,每页大小是32 字节,共设有1024 页。存储在系统区的文件分配表占用1K 空间。分配表如图2 所示:该表一共有1024 页(用十六进制 表示),第1 页代表数据区的前32 个字节,以后依次类推。当表项为FFFF,表示文件结束。当记录 为FFFE 时,该页可用。每页的表项记录该文件下一页的页码。如图所示。该文件占用的页码分别是 1,0xC,0xD,0x10,0x14。
2.2 文件管理的指令
1)SELECT FILE(选择文件):建立文件成功后,才能进行文件选择,面向对象文件管理系统要 求在文件被选中之后才可以进行存取处理。文件选择就是通知操作系统即将对哪个文件进行访问。新 文件的成功选择将导致前面的选择无效。这就意味着在任何时候被选中的文件只有一个。该文件系统 的支持根据文件的FID 进行文件的选择。
2)CREATE FILE(创建文件):该命令允许在智能卡中建立EF、KEF、DF。在执行该命令之前, 必须先达到特定的安全状态。在创建时,判断创建地址是否有效,即CMB 块的相应地址。同时创建 时会影响目录树的结构,可能需要修改其父亲节点或者其兄弟节点,因此要检测所影响的结点是否可 以访问,如果需要修改的节点不可被访问,该命令则不能执行。对于EF 和KEF,他们都拥有文件体, 则根据其大小具体分配。在申请页面时,一次把所需要的页数全部分配给该文件,并且在文件分配表 里建立好映像。然后文件系统再根据文件分配表,把文件体写入EEPROM 中。
3)DELETE FILE(删除文件):是把指定的智能卡的文件从存储器中删除,其释放的存储空间由 操作系统收回。文件系统的文件是存储在应用数据区,因此该命令的操作对象是数据区的文件,并不 涉及其他存储区域的数据。MF 为文件系统的根目录,是不可被删除的。
KEF 为DF 中的密钥文件, 仅删除KEF 会对其上层DF 造成极大的安全隐患,因此不提供单纯的删除KEF 操作,把该操作是嵌 入在删除DF。该命令分为两类:删除DF 和删除EF。删除DF 函数仅删除没有子DF 文件的DF 文件, 如果所删除的DF 具有直接子DF 文件(可以有EF 文件),则DF 不能直接删除,需要首先删除子DF文件,然后再使用本函数删除。该操作会影响其父亲节点或兄弟节点以及子EF 节点,所以删除之前 需要查看文件打开表,检查这些文件是否可以访问,如果有不可以访问的节点,则退出返回相应的错 误信息。
当然执行该操作之前,必须达到一定的要求安全状态。删除EF 时,操作对象是CMB 块中 的当前工作文件EF,因此要删除某EF 之前需要先选择该文件。如果当前工作文件地址无效,则返回 相应的错误信息。当然执行该操作之前,必须达到一定的要求安全状态并且该EF 具有可删除属性。
4)VERIFY 命令用来把传送给智能卡的秘密对象和所存储的基准值相比较,根据比较结果,改 变CMB 块中的安全状态。该操作系统的密钥存储在密钥文件KEF 中,位于MF 的KEF 被用来作为 智能卡中所有应用通用的密钥,如果是DF 的KEF,则它仅可用于在DF 内的有关应用,即应用的专 用密钥。
该命令的操作对象默认为CMB块中指向的当前所使用密钥文件。一般的密钥文件含有四个密钥, 分别是:
(1)浏览密钥:满足该密钥后,可以读该目录下的所有EF 文件和子DF 头标。
(2)更新密 钥:满足该密钥后,可以在该目录下的所有EF 文件中执行更新操作。
(3)删除密钥:满足该密钥后, 可以在该目录下执行删除操作。
(4)创建操作:满足该密钥后,可以在该目录下执行删除操作。因此, verify 函数就是判断其满足相应的密钥,然后改变CMB 块中的安全状态,使其可以执行后需操作。
对于每一个密钥都有一个重试计数器。对于肯定的比较结果,它被赋予零,对于否定的比较结果, 它增量1。如果重试计数器达到对大值,则绝对没有任何可能再进行对密钥的进一步比较。为了保证 安全,先对计数器字段加一并写入到记录中。然后比较读出密钥和输入密钥是否匹配。匹配则将0 写 入到记录的计数器字段中,并将安全状态设置为OK 结果状态。否则将安全状态设置为NOK 结果状 态,并返回允许尝试的剩余次数或记录被锁。
3 结论
本文研究并设计动态多应用智能卡文件系统。利用文件分配表为每个文件建立映像,利用 CMB 块进行文件管理,设置文件访问机制保证了每个应用的读写安全,最后详细设计文件操作命令,使得 应用可以对文件进行建立,删除等操作。
智能卡或称 IC 卡,英文名称为SMART Card 或Integrated CircuitCard。它是由一个集成电路芯片嵌 于塑料基片中封装而成。卡中的集成电路包括中央处理器(CPU) ,闪存(EEPROM)、随机存储器 (RAM)、只读存储器(ROM) 等[1]。动态多应用智能卡允许一张卡片上可以同时容纳多个应用,并且在 不同的场合使用不同的应用,同时应用本身还可以根据需要随时下载到卡中或从卡中删除。这给供卡 方、发卡方和持卡方都带来了好处。动态多应用智能卡将是智能卡未来发展的总趋势。
1 智能卡文件系统的设计模型
1.1 文件的类型及组织结构
本系统遵守ISO/IEC 781* 标准所定义文件标准。根据标准,可以支持专用文件(DF)和基本 文件(EF)两种文件。卡内的文件的逻辑组织结构由下列专用文件的结构化分级组成,在根处的DF 称为主文件(MF)。该MF 是必备的。其他DF 是任选的。定义两种类型的EF:1)内部EF(KEF)。 存储那些预期由卡解释的数据。如密钥。2)工作EF(WEF)。存储那些预期不由卡解释的数据。
EF 结构有以下几种,
1)透明结构。指的是二进制的或杂乱无章的结构。换句话说,一个透明文 件根本没有内部结构。该结构的文件可以通过使用偏移值进行读出和写入。READ BINARY 和 UPDATE BINARY 命令可用于这些方面。
2)记录结构。是基于链接固定长度的记录文件结构,这种 结构的数据可以自由存储,存取的最小单位是一个记录。该操作系统支持线性定长记录结构,并且记 录长度必须为4 个字节的偶数倍数,并且小于一页大小,这样就防止一条记录跨页存储。
文件的逻辑组织结构如图 1 所示。文件系统是一个树型结构,根目录为MF。MF(主文件)是 特殊的文件,是文件系统的根,在卡片中唯一存在,相当于DOS 的根目录。EF(基本文件)建在DF 下,存储应用的各种数据和管理信息。DF(专有文件)一般仅相当于DOS 的子目录,但主文件MF 的一个DF 则代表了一个应用。MF 下和应用的根DF 下都有一KEF,用于存储密钥或PIN。MF 下的 DF 中建立的EF 和DF 都只能由该应用使用,其他应用不能访问。
智能卡中的目录文件(MF 和DF)仅由文件头标组成,EF 文件是由文件头标和文件体两部分组 成的。文件头中包含文件的标识、大小、访问权限和其他基本信息。文件头的长度是一定的。EF 的 文件体就是各种卡片应用所需的数据元。其大小是在文件创建时就确定的。
1.2 文件访问以及文件管理
所有EF 文件头中都含有属性字段,指明此文件的特殊信息。属性字段占两字节,字段中的每一 比特位代表一种属性。它们在创建时确定,不允许更改。目前只使用了前三个比特位,分别是:
1)可删除属性。此属性位为1 表示可以被删除,0 表示不可被删除。
2)可写属性。此属性位为1 表示可以被修改,0 则表明此文件为只读文件。
3)可读属性。此属性位为1 表明此文件可以被浏览,0 表示不可以被浏览。
应用要对文件访问需要达到一定的安全状态。当该应用的进程现有状态满足所需要状态,并且符 合和该文件的属性要求时,该进程才能访问文件。当前进程的安全状态是由其是否满足当前目录文件 下的KEF 中的相应密钥决定的。在MF 下仅有DF(应用目录),没有EF 文件,其KEF 则只含有创 建密钥,读密钥,删除密钥。而一般的KEF 文件中含有四个密钥,分别是读密钥,写密钥, 创建密 钥,删除密钥。
为了方便文件管理,有一些典型变量要保存在 RAM 中,把这些变量封装成一个结构体CMB, 放在进程的PCB 中。一个CMB 块包含如下变量:1)mfhead。此变量总指向最高层MF 文件头地址。 2)mfsecurity。此变量表明MF 达到的安全状态。其初始值在进程建立时赋值。3)dfsecurity。此变量 表明现行选择的DF 达到的安全状态。其初值在进程建立时赋值。4)currentdf、currentwef。这两个 变量分别为当前DF、当前WEF 文件头地址。在进程时它们的值为NULL,在进程运行过程中由 SELECT 命令显式赋值。5)currentrecord_adr。此变量在当前WEF 为记录结构时使用,它指向当前使 用记录号, 如为透明文件,无效地址。在进程建立或者重新选择WEF 时,其值被赋为0。由记录结构 WEF 读、写命令更改。6)currentef_kef。此变量为当前DF 下KEF 文件头地址。当创建进程时,就 会创建一个CMB 块,其 currentdf 被赋为当时正在访问的DF,安全状态被赋为0。如果currentdf 为 0 时,表示当前的工作目录为MF。
1.3 EEPROM 的划分该智能卡的EEPROM 大小为256K,其中分为应用数据区(32K),应用代码去(160K),系统区 (16K)以及交换区(48K)。
应用数据区存放着应用的配置数据,并且都是以文件的形式存储的。应用数据区的 EEPROM 是 以页的形式动态分配给各个应用,每页大小为32 字节。每个文件的页地址信息由文件分配表详细记 录。应用代码区存放着应用的运行代码。应用代码区分为40 块,每块大小为4K。块和应用是一一对 应的关系,即每块对映一个应用。系统区:存放操作系统的信息以及用于管理应用及文件的一些系统 表:应用使用表,文件分配表,文件打开表,数据区使用表。文件打开表是用来防止读写冲突的,当 某文件正在被改写时,需要给该文件上锁,等对该文件操作完成后再对该文件解锁。
数据区使用表记录了应用数据文件在数据区的存储情况,当一个应用要访问某一个数据文件时,需要查看该表,检查 该文件是否属于该应用,防止应用篡改其他应用的数据文件。操作系统的信息用超级块记录。交换区 就是当内存不足时,使用交换区来扩充内存。
2 文件系统
2.1 文件分配表该操作系统中,文件系统仅设计到应用数据区,和应用系统区以及应用代码去无关,所以文件系 统占32K 的EEPROM 空间。数据区是以页的形式分配给文件的,每页大小是32 字节,共设有1024 页。存储在系统区的文件分配表占用1K 空间。分配表如图2 所示:该表一共有1024 页(用十六进制 表示),第1 页代表数据区的前32 个字节,以后依次类推。当表项为FFFF,表示文件结束。当记录 为FFFE 时,该页可用。每页的表项记录该文件下一页的页码。如图所示。该文件占用的页码分别是 1,0xC,0xD,0x10,0x14。
2.2 文件管理的指令
1)SELECT FILE(选择文件):建立文件成功后,才能进行文件选择,面向对象文件管理系统要 求在文件被选中之后才可以进行存取处理。文件选择就是通知操作系统即将对哪个文件进行访问。新 文件的成功选择将导致前面的选择无效。这就意味着在任何时候被选中的文件只有一个。该文件系统 的支持根据文件的FID 进行文件的选择。
2)CREATE FILE(创建文件):该命令允许在智能卡中建立EF、KEF、DF。在执行该命令之前, 必须先达到特定的安全状态。在创建时,判断创建地址是否有效,即CMB 块的相应地址。同时创建 时会影响目录树的结构,可能需要修改其父亲节点或者其兄弟节点,因此要检测所影响的结点是否可 以访问,如果需要修改的节点不可被访问,该命令则不能执行。对于EF 和KEF,他们都拥有文件体, 则根据其大小具体分配。在申请页面时,一次把所需要的页数全部分配给该文件,并且在文件分配表 里建立好映像。然后文件系统再根据文件分配表,把文件体写入EEPROM 中。
3)DELETE FILE(删除文件):是把指定的智能卡的文件从存储器中删除,其释放的存储空间由 操作系统收回。文件系统的文件是存储在应用数据区,因此该命令的操作对象是数据区的文件,并不 涉及其他存储区域的数据。MF 为文件系统的根目录,是不可被删除的。
KEF 为DF 中的密钥文件, 仅删除KEF 会对其上层DF 造成极大的安全隐患,因此不提供单纯的删除KEF 操作,把该操作是嵌 入在删除DF。该命令分为两类:删除DF 和删除EF。删除DF 函数仅删除没有子DF 文件的DF 文件, 如果所删除的DF 具有直接子DF 文件(可以有EF 文件),则DF 不能直接删除,需要首先删除子DF文件,然后再使用本函数删除。该操作会影响其父亲节点或兄弟节点以及子EF 节点,所以删除之前 需要查看文件打开表,检查这些文件是否可以访问,如果有不可以访问的节点,则退出返回相应的错 误信息。
当然执行该操作之前,必须达到一定的要求安全状态。删除EF 时,操作对象是CMB 块中 的当前工作文件EF,因此要删除某EF 之前需要先选择该文件。如果当前工作文件地址无效,则返回 相应的错误信息。当然执行该操作之前,必须达到一定的要求安全状态并且该EF 具有可删除属性。
4)VERIFY 命令用来把传送给智能卡的秘密对象和所存储的基准值相比较,根据比较结果,改 变CMB 块中的安全状态。该操作系统的密钥存储在密钥文件KEF 中,位于MF 的KEF 被用来作为 智能卡中所有应用通用的密钥,如果是DF 的KEF,则它仅可用于在DF 内的有关应用,即应用的专 用密钥。
该命令的操作对象默认为CMB块中指向的当前所使用密钥文件。一般的密钥文件含有四个密钥, 分别是:
(1)浏览密钥:满足该密钥后,可以读该目录下的所有EF 文件和子DF 头标。
(2)更新密 钥:满足该密钥后,可以在该目录下的所有EF 文件中执行更新操作。
(3)删除密钥:满足该密钥后, 可以在该目录下执行删除操作。
(4)创建操作:满足该密钥后,可以在该目录下执行删除操作。因此, verify 函数就是判断其满足相应的密钥,然后改变CMB 块中的安全状态,使其可以执行后需操作。
对于每一个密钥都有一个重试计数器。对于肯定的比较结果,它被赋予零,对于否定的比较结果, 它增量1。如果重试计数器达到对大值,则绝对没有任何可能再进行对密钥的进一步比较。为了保证 安全,先对计数器字段加一并写入到记录中。然后比较读出密钥和输入密钥是否匹配。匹配则将0 写 入到记录的计数器字段中,并将安全状态设置为OK 结果状态。否则将安全状态设置为NOK 结果状 态,并返回允许尝试的剩余次数或记录被锁。
3 结论
本文研究并设计动态多应用智能卡文件系统。利用文件分配表为每个文件建立映像,利用 CMB 块进行文件管理,设置文件访问机制保证了每个应用的读写安全,最后详细设计文件操作命令,使得 应用可以对文件进行建立,删除等操作。