CPU卡內的文件類型
文章出處:http://5052h112.com 作者:興邦科技 人氣: 發表時間:2011年01月31日
根據樹狀的卡內文件結構,CPU卡內的文件分為3種類型:主文件MF、專用文件DF、基本文件EF。
??? 1、主文件MF
??? 在每一張卡片文件系統的文件樹中都只存在著一個根文件,其他所有文件都是該文件的子文件。
??? 這個文件也是整個卡片的入口,稱為MF(Master File)。每一張卡片中有且只有一個MF。
??? MF也是文件系統中最重要的一個文件,對卡片的操作通常從選擇MF開始。此外,由于MF的特殊性,通常將MF的標識符定義為3F00,這樣,對于不同的卡片,通常都可以通過這一默認的標識符進行MF的選擇操作。由于MF不存在父文件,在卡片的應用階段又必須存在,所以在卡片的初始化階段就必須首先建立MF。除此之外,MF的其他屬性與DF完全類似。
??? 2、專用文件DF
??? DF類似于PC文件系統中的目錄文件,一般情況下,也可以將MF看作是特殊的DF。
??? 如果把MF作為卡片的邏輯映射的話,一個DF往往可以看作是一類數據或者一個應用在卡內的映射。通常,同級的DF之間完全獨立,COS能夠確保它們之間的數據獨立性和安全性;對于不同級的DF之間,包括具有父子關系的DF,在實際的應用階段可以根據實際應用的定義實現隔絕或者托管的安全邏輯。
??? 為了標識不同的DF,每一個DF具有一個同級DF下唯一的文件標識符和一個卡內全局唯一的應用標識符(AID)。
??? 在實現上,文件標識符通常采用一個Word類型的整數來標識,而且其值為0x100的倍數,例如3F00、4F00、5F00等等。1F00和2F00通常保留作為系統特殊文件標識。應用標識符AID通常是一個有限長的二進制串,通常作為該DF對應的應用的簡單描述。使用文件標識符和應用標識符都可以對當前文件子層DF文件進行檢索,如果使用3F00使用文件標識符檢索條件,則COS自動選擇MF;如果卡片資源允許的話,COS也可以實現對卡內所有DF或者當前DF以下包含的所有子DF文件進行檢索,這時一般采用AID作為檢索條件。
??? 可以將DF分為DDF和ADF兩類。
??? (1)目錄專用文件DDF
??? 如果在一個DF下還包含子DF的話,也就是,在文件樹中如果子結點不全部為葉子結點的話,這樣的DF被稱為DDF(Directory Definition File)。
??? 一般的,DDF可以作為一組應用(DF)的集合,也可以作為一個復雜多層次應用的入口。
??? 在多應用卡中,MF下通常包含了多個DF,這里的MF就是一個典型的DDF。為了維護管理DDF下所有的DF,在每一個DDF下一般可以包含一個系統文件(DIR文件),記錄所有子DF的入口。
??? (2)應用專用文件ADF
??? 如果在一個DF下不包含有其它的子DF的話,也就是,在文件樹中如果所有的子結點全部都是葉子結點的話,這樣的DF稱為ADF(Application Definition File)。
??? 一般的,ADF是一個應用在卡內的邏輯映射,ADF下包含的都是存數據文件,從卡外來看,一個ADF可以看作是一個只包含了文件控制信息和存數據對象的集合。
??? ADF下沒有DF文件,所以也就不需要DIR文件。
??? 從理論上說,只要卡片空間允許,在卡內可以建立無數多層的文件結構。但是,從卡片的實際應用來看,很少有應用會要求超過3層的DF結構,即MF、DDF、ADF;更一般的來看,如果卡片資源有限,應用目標明確的話,COS可以只支持兩層的DF結構,即MF、ADF(MF是卡內唯一的DDF)。
??? COS對多層次DF結構的支持可以帶來很大的應用靈活性,但是同時也會造成COS開發的復雜度大大提升。DF層次的選擇和卡片面向的應用有很大的關系,可以根據不同的應用需求來進行選擇。例如,在只支持單一應用的COS中,可以直接將MF作為ADF,不支持DDF;對于支持多應用的COS,通常可以選擇兩層的DF結構,MF下的每一個ADF對應一個獨立的應用;對于卡片資源豐富,可以支持復雜應用模式,建立動態應用體系的卡片來說,可以選擇實現3層甚至無限多層DF的模式。
??? 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種模式。
??? 記錄的讀寫操作包括幾種方式。
??? 指定記錄序號的記錄讀寫操作,這一操作不改變當前操作記錄序號。
??? 相對當前記錄位置的定位方式,包括當前記錄的前一條、后一條記錄等。如果當前記錄號為空時,如果訪問前一條記錄的話,返回第一條記錄,并置當前記錄為第一條記錄;如果訪問后一條記錄的話,返回最后一條記錄,并置當前記錄為最后一條記錄。
??? 相對全局記錄位置的定位方式,例如第一條、最后一條記錄等,這一操作將把該記錄設置為當前記錄。
??? 在定長記錄的操作過程中,需要嚴格檢查記錄號是否在文件包含的記錄數的范圍內,當前記錄號對應的記錄數據是否有效等。
??? 記錄的添加操作即在最后一條記錄的后面添加新的記錄。
??? 如果邏輯上的最后一條記錄不是物理上的最后一條,即其后還有空閑的記錄空間,新的記錄順序添加在后面,同時將新的記錄設為邏輯的“最后一條記錄”。
??? 如果邏輯上的最后一條記錄是物理上的最后一條,即其后沒有空閑的記錄空間了,則添加操作失敗,卡片返回相應的錯誤碼。