1. 程式人生 > >CPU卡檔案系統

CPU卡檔案系統

轉自:https://blog.csdn.net/red_sky_blue/article/details/42494517

CPU卡其實跟我們接觸的計算機一樣,也有自己的檔案系統,要做一個應用,其實就是規定在CPU卡上有哪些檔案(在CPU卡初始化時,建立檔案系統檔案的格式),在哪個檔案裡面儲存什麼內容,比如做一個IC卡燃氣預付費系統,就是規定卡上的某個檔案代表使用者購買了多少氣,什麼時間購買的等等,當然,CPU卡的檔案系統的控制機制要複雜的多,有些檔案是不能讀取的(如金鑰檔案),有些檔案是隻能讀,不能寫,有些檔案是可讀可寫,但是要驗證金鑰,有些檔案是可以直接讀寫,無需驗證身份的。也就是說掌握了CPU卡上的檔案系統的內容,基本就掌握了CPU卡這個應用的本質。

檔案系統的組織結構

下圖是,dos的資料夾樹

智慧卡的檔案系統類似DOS 的樹形檔案系統。ISO7816 支援兩類檔案:DF(Dedicated File ) 和EF(Ele2

mentary File) 。DF 檔案有點類似DOS 的目錄,而EF 檔案則有點類似DOS 的資料檔案。DF 檔案之下的

DF 檔案,類似DOS 的子目錄。當然,DF 之下還可以有DF 檔案。同DOS 檔案系統一樣,智慧卡的檔案系

統也必須有一個根檔案,這個根檔案是一個DF 檔案,我們把它稱為MF (Master File) 檔案,MF 檔案類似

DOS 的根目錄。

在智慧卡的檔案系統結構中,MF 檔案有且只能有一個;DF 檔案是可選的,這兩種檔案主要起管理和

形成樹形的檔案系統結構的作用,真正存放資料的是EF 檔案。

 

  MF 檔案是智慧卡檔案系統的根。在MF 檔案下可以建立各種DF 和EF 檔案。雖然系統允許在根下

直接生成各種EF 應用檔案,但最佳的檔案組織方法是每一種應用均分配一個DF 檔案,在相應的DF 文

件下再具體組織各種EF 應用資料。

  DF 檔案含有檔案控制資訊和可分配的儲存空間的資訊,其下可以建立各種DF 和EF 檔案。一般而

言,一個DF 檔案將被用來儲存某一應用的所有資料。DF 檔案在使用者儲存器中佔據一塊靜態儲存器,一

旦DF 檔案建立,其儲存器的大小就不能變動。但在該DF 檔案下的EF 檔案則可以重新分配所使用儲存

器大小,也可以被刪除。該DF 檔案被刪除之後,其下的DF 和EF 檔案也同時被刪除,釋放的儲存器塊可

由其它DF 檔案使用。

EF 檔案是智慧卡樹形檔案系統的葉,其下不能再建立其他任何檔案。

2. 2  檔案系統的檔案訪問機制

當訪問一個檔案時,我們可以使用下面幾種方法中的至少一種來進行:

(1) 通過檔案標誌符(File Identifier) 來訪問

在智慧卡檔案系統中每一個檔案都有一個檔案標誌符,它佔用2 個位元組。值“3FFF”和“FFFF”系統保

留,不能用於具體的檔案。對於MF 檔案來說,它的檔案標誌符必須為“3F00”。因此,當我們訪問智慧卡

的檔案系統時,起點就是從檔案標誌符為“3F00”的MF 檔案開始。

(2) 通過檔案路徑來訪問

所謂檔案路徑,就是無分隔符的檔案標誌符的串聯形式。智慧卡檔案系統的檔案路徑起始於MF 文

件或者當前的DF 檔案的檔案標誌符,而以要訪問的檔案的檔案標誌符結束;在這兩者之間則是相關的

DF 檔案的檔案標誌符。如果當前的DF 檔案的檔案標誌符未知,則“3FFF”可以作為檔案路徑的開始。如

果檔案路徑以MF 檔案的檔案標誌符開始,則稱該檔案路徑為絕對路徑;如果以當前DF 檔案的檔案標誌

符開始,則稱為相對路徑。

(3) 通過EF 短標誌符來訪問

對於任意一個EF 檔案,可以通過一個5bit 編碼的短標誌符來訪問,其範圍為1~30 。0 具有特殊含

義,表示當前正在訪問的EF 檔案。短標誌符不能用於檔案路徑,也不能用作檔案標誌符。

(4) 通過DF 檔名來訪問

每個DF 檔案可以有一個1~16 位元組長的檔名。為了能夠明確無誤的通過DF 檔名來訪問DF 文

件,智慧卡中的每個DF 檔案的檔名必須不同。

2. 3  EF 檔案的內部結構

EF 檔案的結構可分為透明結構和記錄結構兩種。

(1) 透明結構:

透明結構EF 檔案在通過介面被訪問時只被視為資料單元(Data Unit) 序列,而好像沒

有結構一樣,所以我們稱之為透明結構。所謂資料單元,就是可被訪問的最小的位集(Smallest set of bits) ,

如1 個位元組,2 個位元組等等。透明結構本質上也就是二進位制資料結構。

(2) 記錄結構:

記錄結構EF 檔案在通過介面被訪問時被視為具有結構的記錄(Record) 序列。所謂記

錄,就是可被作為一個整體加以處理的具有結構的位元組串,類似於PASCAL 語言的記錄的概念。

2. 4  EF 檔案中的資料訪問機制

  EF 檔案中的資料可以通過記錄、資料單元或者資料物件來訪問。對記錄結構的EF 檔案而言,資料

被儲存在連續的記錄序列中;對透明結構的EF 檔案而言,資料被儲存在連續的資料單元序列中。如果試

圖訪問不在EF 檔案中的記錄、資料單元或者資料物件,將導致錯誤。資料訪問方法、記錄編號方法以及

資料單元的大小等作為檔案系統的特徵,在智慧卡的復位應答過程ATR (Answer to reset) 中由智慧卡給

出,還可以由智慧卡中的ATR 檔案給出,以及由其他檔案控制資訊給出。如果智慧卡在上面提及的三種

方式中不止一處給出了資料訪問方法、記錄編號方法以及資料單元的大小等資訊,那麼對於任意一個EF

檔案而言,由於不同出處給出的資訊可能不一樣,因此很明顯只能有一個資訊是有效的。而有效的資訊

就是從MF 檔案到該EF 檔案的檔案路徑上最靠近該EF 檔案的位置給出的資訊。

 

(1) 記錄結構EF 檔案中記錄的訪問方法

對記錄結構的EF 檔案,其中的記錄可以通過記錄編號來訪問。記錄編號是無符號8 位整數,其取值

範圍為01~FE。值00 保留作特殊用途;值FF 保留來將來使用。在每個記錄結構的EF 檔案中,每個記

錄的記錄編號都是唯一併且是有序的。

對於線性記錄結構的EF 檔案:當建立新增記錄時,記錄編號按照以一定順序予以指定。也就是說記

錄的記錄編號按照記錄的建立順序指定。因此,第一個記錄(記錄編號為1) 就是第一個建立的記錄;第

二個記錄(記錄編號為2) 就是第二個建立的記錄⋯⋯以次類推。

對於迴圈記錄結構的EF 檔案:第一個記錄(記錄編號為1) 總是最後建立的記錄;第二個記錄(記錄

編號為2) 就是倒數第二個建立的記錄⋯⋯以次類推。很顯然,對於迴圈記錄結構的EF 檔案的記錄編

號順序剛好和線性記錄結構的EF 檔案相反。

記錄編號值00 總是表示當前記錄,就是記錄指標(record pointer) 當前指向的記錄。

(2) 透明結構EF 檔案中資料單元的訪問方法

對每一個透明結構的EF 檔案而言,其內部的資料單元通過偏移(Offset) 來訪問。偏移是一個無符號

整數,長度為8 位或者15 位(由不同的訪問命令來決定) 。當偏移為0 時,則訪問該透明結構EF 檔案的

第一個資料單元;偏移為1 時,訪問第二個資料單元;偏移為2 時,訪問第三個資料單元⋯⋯以次類推。

在預設情況下,也就是智慧卡沒有給出資料單元大小的資訊時,預設採用每個資料單元大小為1 位元組。

(3) 資料物件的訪問方法

所謂資料物件,就是採用抽象語法表示ASN. 1 (Abstract syntax notation) 的編碼規則,如BER(Basic en2

coding rule) 等對資料按照一定的格式編碼形成的一個數據結構。該資料結構通常包含三部分資訊:標籤

(tag) 、長度(length) 和資料(data) 。標籤給出了資料的資料型別,如整數、ASCII 字串、UNICODE 字串、

structure 結構型別等等;長度則給出了資料的長度。很明顯,這種資料物件本質上是自描述的。因此,當

訪問資料物件時,可以通過標籤等對資料物件進行訪問。