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