基于智能卡內(nèi)核的文件系統(tǒng)設(shè)計(jì)
文章出處:http://m.luckydriving.com 作者: 人氣: 發(fā)表時(shí)間:2012年03月18日
摘要:本文從ISO7816-4 協(xié)議和相關(guān)規(guī)范入手,深入分析了智能卡內(nèi)核的基本文件結(jié)構(gòu),并提出了一種合理的設(shè)計(jì)方案。文章說(shuō)明了各個(gè)基本文件的指針構(gòu)成,詳細(xì)闡述了各個(gè)情況下的指針操作要點(diǎn)和細(xì)節(jié),并簡(jiǎn)單介紹了密鑰文件和ATR 文件兩種特殊的EF 文件。最后總結(jié)了不同文件所適用的相關(guān)指令。
關(guān)鍵詞:COS;MF;DF;EF;ATR
1 引言
隨著 IC 卡從簡(jiǎn)單的同步卡發(fā)展到異步卡,從簡(jiǎn)單的EPROM 卡發(fā)展到內(nèi)帶微處理器的智能卡(又稱CPU 卡),對(duì)IC 卡的各種要求越來(lái)越高。而卡本身所需要的各種管理工作也越來(lái)越復(fù)雜,因此就迫切地需要有一種工具來(lái)解決這一矛盾,而內(nèi)部帶有微處理器的智能卡的出現(xiàn),使得這種工具的實(shí)現(xiàn)變成了現(xiàn)實(shí)。人們利用它內(nèi)部的微處理器芯片,開(kāi)發(fā)了應(yīng)用于智能卡內(nèi)部的各種各樣的操作系統(tǒng)。COS 的出現(xiàn)不僅大大地改善了智能卡的交互界面,使智能卡的管理變得容易;而且,更為重要的是使智能卡本身向著個(gè)人計(jì)算機(jī)化的方向邁出了一大步,為智能卡的發(fā)展開(kāi)拓了極為廣闊的前景。
COS 的全稱是Chip Operating System(片內(nèi)操作系統(tǒng)),它一般是緊緊圍繞著它所服務(wù)的智能卡的特點(diǎn)而開(kāi)發(fā)的。由于不可避免地受到了智能卡內(nèi)微處理器芯片的性能及內(nèi)存容量的影響,因此,COS 在很大程度上不同于我們通常所能見(jiàn)到的微機(jī)上的操作系統(tǒng)(例如DOS、UNIX 等)[1]。
COS 的主要功能是控制智能卡同外界的信息交換,管理智能卡內(nèi)的存儲(chǔ)器并在卡內(nèi)部完成各種命令的處理。其中,與外界進(jìn)行信息交換是COS 最基本的要求。在交換過(guò)程中,COS 所遵循的信息交換協(xié)議目前包括兩類(lèi):異步字符傳輸?shù)腡=0 協(xié)議以及異步分組傳輸?shù)腡=l 協(xié)議。這兩種信息交換協(xié)議的具體內(nèi)容和實(shí)現(xiàn)機(jī)制在IS0/IEC78l6-3 和IS0/IEC7816-3A3 標(biāo)準(zhǔn)中作了規(guī)定;而COS 所應(yīng)完成的管理和控制的基中功能則是在ISO/IEC78l6-4 標(biāo)準(zhǔn)中作出規(guī)定的。在該國(guó)際標(biāo)準(zhǔn)中,還對(duì)智能卡的數(shù)據(jù)結(jié)構(gòu)以及COS 的基本命令集作出了較為詳細(xì)的說(shuō)明。至于 IS0/IEC78l6-l 和2,則是對(duì)智能卡的物理參數(shù)、外形尺寸作了規(guī)定,它們與COS 的關(guān)系不是很密切。
2 文件系統(tǒng)
2.1 文件系統(tǒng)概述
整張卡片包含3 種基本文件結(jié)構(gòu):
MF(Master File)文件:是整個(gè)文件系統(tǒng)的最高級(jí),可以包含若干的DF 和EF 文件,卡片中只能有一個(gè)MF 文件。它是在卡的個(gè)人化過(guò)程被首先建立起來(lái),在卡的整個(gè)生命周期內(nèi)一直保持有效,可存儲(chǔ)卡片的公共數(shù)據(jù)信息并為各種應(yīng)用服務(wù)??ㄆ瑥?fù)位后,自動(dòng)選擇MF 文件為當(dāng)前文件。
DF(Dedicated File)文件:是MF 或DF 的下一級(jí),包含用戶設(shè)置的系統(tǒng)信息和應(yīng)用相關(guān)數(shù)據(jù),在MF 下DF 的數(shù)量只取決與卡片容量和用戶的應(yīng)用,它也可以包含若干的DF。
EF(Elementary File)文件:是文件結(jié)構(gòu)的末端,只包含系統(tǒng)信息、內(nèi)部數(shù)據(jù)或用戶數(shù)據(jù)。EF 文件從存儲(chǔ)內(nèi)容上分為三類(lèi):密鑰文件、工作基本文件和ATR 文件[2]。
文件系統(tǒng)結(jié)構(gòu)圖如下:
圖1 文件系統(tǒng)結(jié)構(gòu)圖
2.2 文件結(jié)構(gòu)
2.2.1 MF 文件
2.2.2 DF 文件
2.2.3 EF 文件
對(duì)于二進(jìn)制文件和變長(zhǎng)記錄文件,文件空間 = 空間大小高字節(jié) || 低字節(jié)
對(duì)于定長(zhǎng)和循環(huán)文件,文件空間 = 記錄數(shù)字節(jié) || 記錄長(zhǎng)度字節(jié)
當(dāng)前記錄指針:最新寫(xiě)入記錄的位置
對(duì)于循環(huán)文件,B7(最高位)表示記錄是否已經(jīng)寫(xiě)滿,B7=0 表示寫(xiě)滿,B7=1 表示未寫(xiě)滿,所以循環(huán)文件最大記錄數(shù)為127。此位對(duì)于定長(zhǎng)記錄文件不起作用。
定長(zhǎng)、循環(huán)記錄文件每條記錄只包含記錄內(nèi)容值V;變長(zhǎng)記錄文件每條記錄中包含記錄內(nèi)容長(zhǎng)度L+記錄內(nèi)容值V
2.2.4 文件指針
文件指針共6 字節(jié):2 字節(jié)的父目錄指針+2 字節(jié)的子目錄的指針+2 字節(jié)的EF 指針,所有指針都指向文件頭的首地址,在卡片剛上電或選擇了MF 之后,2 字節(jié)的父目錄指針為空(00 00),2 字節(jié)的子目錄的指針為MF 的首地址;在任意選擇某個(gè)目錄(按部分AID 選擇下一個(gè)DF 除外)后,原來(lái)的子目錄設(shè)置為父目錄,新選擇的目錄設(shè)置為子目錄,同時(shí)EF 指針置為空(00 00);在任意位置選擇EF 文件后,都只設(shè)置EF 指針,不影響父目錄和子目錄指針。如果是按部分AID 選擇下一個(gè)DF,則父目錄不改變,只改變重新設(shè)置子目錄和EF 指針。
2.3 EF 文件
2.3.1 文件類(lèi)型
2.3.2 循環(huán)文件
假設(shè)已經(jīng)建立一個(gè)記錄數(shù)=10 的循環(huán)文件,如果沒(méi)有寫(xiě)入任何記錄,則當(dāng)前記錄指針=80。(bit7=1,表明當(dāng)前記錄未寫(xiě)滿)如果追加了(Append Record)4 條記錄,則當(dāng)前記錄指針=84。在成功選擇這個(gè)文件后,內(nèi)存記錄指針CP=00,具體操作(讀或更新)如下:
如果操作第一條記錄:則操作第4 條記錄,操作成功后,設(shè)置CP=4。
如果操作最后一條記錄:則操作第1 條記錄,操作成功后,設(shè)置CP=1。
如果操作下一條記錄:
如果CP=00,則操作第4 條記錄,操作成功后,設(shè)置CP=4。
如果CP!=00,則操作第CP-1 條記錄,當(dāng)CP=1,返回錯(cuò)誤狀態(tài)碼,否則操作成功后,設(shè)置CP=CP-1。
如果操作上一條記錄:
如果CP=00,則操作第1 條記錄,操作成功后,設(shè)置CP=1。
如果CP!=00,則操作第CP+1 條記錄,當(dāng)CP=當(dāng)前記錄指針,返回錯(cuò)誤狀態(tài)碼,否則操作成功后,設(shè)置CP=CP+1。
如果假設(shè)又追加了10 條記錄,則當(dāng)前記錄指針=04(在追加第7 條記錄時(shí),因?yàn)榭臻g已滿必須覆蓋第1 條,寫(xiě)成功后同時(shí)設(shè)置當(dāng)前記錄指針最高位=0)在成功選擇這個(gè)文件后,內(nèi)存記錄指針(CP)=00,具體操作如下:
如果操作第一條記錄:則操作第4 條記錄,操作成功后,設(shè)置CP=4。
如果操作最后一條記錄:則操作第5 條(當(dāng)前記錄指針+1)記錄,操作成功后,設(shè)置CP=5。
如果操作下一條記錄:
如果CP=00,則操作第4 條記錄,操作成功后,設(shè)置CP=4。
如果CP!=00,則操作第CP-1 條記錄,當(dāng)CP=1,操作CP=10 的記錄,操作成功后,設(shè)置CP=10(總記錄數(shù));當(dāng)CP-1=當(dāng)前記錄指針,返回錯(cuò)誤狀態(tài)碼。
如果操作上一條記錄:
如果CP=00,則操作第5(當(dāng)前記錄指針+1)條記錄,操作成功后,設(shè)置CP=5。
如果CP!=00,則操作第CP+1 條記錄,當(dāng)CP=10(總記錄數(shù)),操作CP=1 的記錄,操作成功后,設(shè)置CP=1;當(dāng)CP=當(dāng)前記錄指針,返回錯(cuò)誤狀態(tài)碼。(以上返回的錯(cuò)誤狀態(tài)碼=6A83)
執(zhí)行APPEND RECORD 命令時(shí),將新記錄寫(xiě)入當(dāng)前記錄指針+1 的位置(只在執(zhí)行APPEND RECORD 命令成功后才修改當(dāng)前記錄指針),例如,如果當(dāng)前文件為空(當(dāng)前記錄指針=80),那么寫(xiě)完新記錄后,當(dāng)前記錄指針應(yīng)為81,每次寫(xiě)完當(dāng)前記錄指針都加1。
如果當(dāng)前記錄指針=8A(剛好寫(xiě)滿文件),再寫(xiě)入新記錄后,當(dāng)前記錄指針變?yōu)?1。
第1頁(yè)第2頁(yè) |