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