CPU卡內(nèi)的文件類型
文章出處:http://www.fang1.net 作者:興邦科技 人氣: 發(fā)表時(shí)間:2011年01月31日
根據(jù)樹(shù)狀的卡內(nèi)文件結(jié)構(gòu),CPU卡內(nèi)的文件分為3種類型:主文件MF、專用文件DF、基本文件EF。
??? 1、主文件MF
??? 在每一張卡片文件系統(tǒng)的文件樹(shù)中都只存在著一個(gè)根文件,其他所有文件都是該文件的子文件。
??? 這個(gè)文件也是整個(gè)卡片的入口,稱為MF(Master File)。每一張卡片中有且只有一個(gè)MF。
??? MF也是文件系統(tǒng)中最重要的一個(gè)文件,對(duì)卡片的操作通常從選擇MF開(kāi)始。此外,由于MF的特殊性,通常將MF的標(biāo)識(shí)符定義為3F00,這樣,對(duì)于不同的卡片,通常都可以通過(guò)這一默認(rèn)的標(biāo)識(shí)符進(jìn)行MF的選擇操作。由于MF不存在父文件,在卡片的應(yīng)用階段又必須存在,所以在卡片的初始化階段就必須首先建立MF。除此之外,MF的其他屬性與DF完全類似。
??? 2、專用文件DF
??? DF類似于PC文件系統(tǒng)中的目錄文件,一般情況下,也可以將MF看作是特殊的DF。
??? 如果把MF作為卡片的邏輯映射的話,一個(gè)DF往往可以看作是一類數(shù)據(jù)或者一個(gè)應(yīng)用在卡內(nèi)的映射。通常,同級(jí)的DF之間完全獨(dú)立,COS能夠確保它們之間的數(shù)據(jù)獨(dú)立性和安全性;對(duì)于不同級(jí)的DF之間,包括具有父子關(guān)系的DF,在實(shí)際的應(yīng)用階段可以根據(jù)實(shí)際應(yīng)用的定義實(shí)現(xiàn)隔絕或者托管的安全邏輯。
??? 為了標(biāo)識(shí)不同的DF,每一個(gè)DF具有一個(gè)同級(jí)DF下唯一的文件標(biāo)識(shí)符和一個(gè)卡內(nèi)全局唯一的應(yīng)用標(biāo)識(shí)符(AID)。
??? 在實(shí)現(xiàn)上,文件標(biāo)識(shí)符通常采用一個(gè)Word類型的整數(shù)來(lái)標(biāo)識(shí),而且其值為0x100的倍數(shù),例如3F00、4F00、5F00等等。1F00和2F00通常保留作為系統(tǒng)特殊文件標(biāo)識(shí)。應(yīng)用標(biāo)識(shí)符AID通常是一個(gè)有限長(zhǎng)的二進(jìn)制串,通常作為該DF對(duì)應(yīng)的應(yīng)用的簡(jiǎn)單描述。使用文件標(biāo)識(shí)符和應(yīng)用標(biāo)識(shí)符都可以對(duì)當(dāng)前文件子層DF文件進(jìn)行檢索,如果使用3F00使用文件標(biāo)識(shí)符檢索條件,則COS自動(dòng)選擇MF;如果卡片資源允許的話,COS也可以實(shí)現(xiàn)對(duì)卡內(nèi)所有DF或者當(dāng)前DF以下包含的所有子DF文件進(jìn)行檢索,這時(shí)一般采用AID作為檢索條件。
??? 可以將DF分為DDF和ADF兩類。
??? (1)目錄專用文件DDF
??? 如果在一個(gè)DF下還包含子DF的話,也就是,在文件樹(shù)中如果子結(jié)點(diǎn)不全部為葉子結(jié)點(diǎn)的話,這樣的DF被稱為DDF(Directory Definition File)。
??? 一般的,DDF可以作為一組應(yīng)用(DF)的集合,也可以作為一個(gè)復(fù)雜多層次應(yīng)用的入口。
??? 在多應(yīng)用卡中,MF下通常包含了多個(gè)DF,這里的MF就是一個(gè)典型的DDF。為了維護(hù)管理DDF下所有的DF,在每一個(gè)DDF下一般可以包含一個(gè)系統(tǒng)文件(DIR文件),記錄所有子DF的入口。
??? (2)應(yīng)用專用文件ADF
??? 如果在一個(gè)DF下不包含有其它的子DF的話,也就是,在文件樹(shù)中如果所有的子結(jié)點(diǎn)全部都是葉子結(jié)點(diǎn)的話,這樣的DF稱為ADF(Application Definition File)。
??? 一般的,ADF是一個(gè)應(yīng)用在卡內(nèi)的邏輯映射,ADF下包含的都是存數(shù)據(jù)文件,從卡外來(lái)看,一個(gè)ADF可以看作是一個(gè)只包含了文件控制信息和存數(shù)據(jù)對(duì)象的集合。
??? ADF下沒(méi)有DF文件,所以也就不需要DIR文件。
??? 從理論上說(shuō),只要卡片空間允許,在卡內(nèi)可以建立無(wú)數(shù)多層的文件結(jié)構(gòu)。但是,從卡片的實(shí)際應(yīng)用來(lái)看,很少有應(yīng)用會(huì)要求超過(guò)3層的DF結(jié)構(gòu),即MF、DDF、ADF;更一般的來(lái)看,如果卡片資源有限,應(yīng)用目標(biāo)明確的話,COS可以只支持兩層的DF結(jié)構(gòu),即MF、ADF(MF是卡內(nèi)唯一的DDF)。
??? COS對(duì)多層次DF結(jié)構(gòu)的支持可以帶來(lái)很大的應(yīng)用靈活性,但是同時(shí)也會(huì)造成COS開(kāi)發(fā)的復(fù)雜度大大提升。DF層次的選擇和卡片面向的應(yīng)用有很大的關(guān)系,可以根據(jù)不同的應(yīng)用需求來(lái)進(jìn)行選擇。例如,在只支持單一應(yīng)用的COS中,可以直接將MF作為ADF,不支持DDF;對(duì)于支持多應(yīng)用的COS,通常可以選擇兩層的DF結(jié)構(gòu),MF下的每一個(gè)ADF對(duì)應(yīng)一個(gè)獨(dú)立的應(yīng)用;對(duì)于卡片資源豐富,可以支持復(fù)雜應(yīng)用模式,建立動(dòng)態(tài)應(yīng)用體系的卡片來(lái)說(shuō),可以選擇實(shí)現(xiàn)3層甚至無(wú)限多層DF的模式。
??? 3、基本數(shù)據(jù)文件EF
??? 在文件樹(shù)中,如果一個(gè)文件節(jié)點(diǎn)沒(méi)有子節(jié)點(diǎn),也就是說(shuō)它本身是一個(gè)葉子節(jié)點(diǎn)的話,這樣的文件稱為EF(Elementary File,基本數(shù)據(jù)文件)。
??? EF是卡內(nèi)數(shù)據(jù)的基本載體,根據(jù)不同的形式,EF文件可以分為不同的類型,COS根據(jù)EF的各種類型定義了不同的文件操作邏輯。
??? 在卡內(nèi),EF都隸屬于某一個(gè)DF,COS采用兩種方式來(lái)標(biāo)識(shí)EF。一個(gè)是EF的文件標(biāo)識(shí)符FID,一般的,EF和其父DF的FID高字節(jié)相同,EF的FID低字節(jié)作為EF文件的擴(kuò)展短文件標(biāo)識(shí)符,稱為eSFI,eSFI的低5位稱為短文件標(biāo)識(shí)符SFI,在同一個(gè)DF下,所有EF的SFI要求都不相同。二是EF的文件類型,在每一個(gè)EF的文件屬性描述中都包含有文件類型標(biāo)識(shí),某些特殊類型的EF在同一DF下要求唯一。
??? 對(duì)EF的選擇方式和DF不同。對(duì)DF的操作一般要求事先進(jìn)行顯式的選擇操作,被選的DF作為當(dāng)前文件,接下來(lái)的所有文件操作都針對(duì)當(dāng)前文件進(jìn)行;對(duì)EF操作之前要求先選擇其父DF作為當(dāng)前文件,對(duì)EF的選擇在具體的操作命令中隱式的進(jìn)行。EF的選擇方式有兩種,一是通過(guò)SFI進(jìn)行選擇,SFI在當(dāng)前DF下唯一;二是通過(guò)文件類型進(jìn)行選擇,主要針對(duì)一些系統(tǒng)文件的操作,例如個(gè)人密碼PIN文件、對(duì)稱密鑰文件等,這些類型的文件在當(dāng)前DF下也要求唯一存在。
??? 下面我們來(lái)看看不同的EF及其操作模式。
??? (1)按數(shù)據(jù)結(jié)構(gòu)分類
??? 卡內(nèi)保存的數(shù)據(jù)可以分為兩類,一類是透明的流數(shù)據(jù),具體的數(shù)據(jù)內(nèi)容和格式在卡外進(jìn)行解釋,卡內(nèi)解釋為一個(gè)連續(xù)的二進(jìn)制數(shù)據(jù)流;第二類是結(jié)構(gòu)數(shù)據(jù),數(shù)據(jù)以記錄的形式存在,COS能夠?qū)?shù)據(jù)解釋為若干條二進(jìn)制的記錄流。根據(jù)所存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)不同,EF可以分為不同的類別,不同結(jié)構(gòu)的EF對(duì)應(yīng)了不同類型的操作。
??? a. 透明二進(jìn)制文件
??? 透明二進(jìn)制文件是卡內(nèi)所有文件的基礎(chǔ),卡片將數(shù)據(jù)作為一個(gè)字節(jié)流來(lái)進(jìn)行處理,二進(jìn)制文件的主要屬性只有文件體的大小。
??? 對(duì)二進(jìn)制文件夾的操作包括文件數(shù)據(jù)的讀、寫兩種模式。
??? 數(shù)據(jù)的讀寫操作包括以下兩種方式。
??? 文件體全部數(shù)據(jù)的讀寫操作。
??? 文件體某一區(qū)段數(shù)據(jù)的讀寫操作。在讀寫操作之前,必須給出要讀寫區(qū)段起始位置在文件體的偏移量和要讀寫區(qū)段的長(zhǎng)度。
??? 需要注意的是,對(duì)于區(qū)段讀寫需要嚴(yán)格檢查區(qū)段是否超出了文件體的范圍。
??? b. 定長(zhǎng)記錄文件
??? 在定長(zhǎng)記錄文件中,文件體劃分為n個(gè)等長(zhǎng)的區(qū)段,每一個(gè)區(qū)段對(duì)應(yīng)一條數(shù)據(jù)記錄。
??? 二進(jìn)制文件的主要屬性包括:所容納的記錄每一條的大小,能夠容納的總的記錄條數(shù)。在實(shí)際的使用階段,為了標(biāo)識(shí)記錄的有效性,還可以包括當(dāng)前已經(jīng)寫入的記錄的數(shù)目,為了進(jìn)行記錄逐一檢索,還需要記錄當(dāng)前操作的記錄序號(hào)等。
??? 當(dāng)前操作的記錄序號(hào)由COS來(lái)進(jìn)行自動(dòng)維護(hù),在文件第一次被選擇時(shí)自動(dòng)置為空,以后根據(jù)實(shí)際訪問(wèn)進(jìn)行修改。
??? 對(duì)定長(zhǎng)記錄文件的操作都以記錄為對(duì)象進(jìn)行,包括記錄的讀、寫、添加3種模式。
??? 記錄的讀寫操作包括幾種方式。
??? 指定記錄序號(hào)的記錄讀寫操作,這一操作不改變當(dāng)前操作記錄序號(hào)。
??? 相對(duì)當(dāng)前記錄位置的定位方式,包括當(dāng)前記錄的前一條、后一條記錄等。如果當(dāng)前記錄號(hào)為空時(shí),如果訪問(wèn)前一條記錄的話,返回第一條記錄,并置當(dāng)前記錄為第一條記錄;如果訪問(wèn)后一條記錄的話,返回最后一條記錄,并置當(dāng)前記錄為最后一條記錄。
??? 相對(duì)全局記錄位置的定位方式,例如第一條、最后一條記錄等,這一操作將把該記錄設(shè)置為當(dāng)前記錄。
??? 在定長(zhǎng)記錄的操作過(guò)程中,需要嚴(yán)格檢查記錄號(hào)是否在文件包含的記錄數(shù)的范圍內(nèi),當(dāng)前記錄號(hào)對(duì)應(yīng)的記錄數(shù)據(jù)是否有效等。
??? 記錄的添加操作即在最后一條記錄的后面添加新的記錄。
??? 如果邏輯上的最后一條記錄不是物理上的最后一條,即其后還有空閑的記錄空間,新的記錄順序添加在后面,同時(shí)將新的記錄設(shè)為邏輯的“最后一條記錄”。
??? 如果邏輯上的最后一條記錄是物理上的最后一條,即其后沒(méi)有空閑的記錄空間了,則添加操作失敗,卡片返回相應(yīng)的錯(cuò)誤碼。