cos中的文件結構(DF/EF/MF/FID/AID/SFI..)
剛開始接觸CPU卡的時候,對于各種文件、應用的定義容易模糊不清,通常不能準確地界定什么是文件?什么是應用?DF和EF的區(qū)別真的就像計算機里的目錄和文檔那樣嗎?FID、AID、SFI這些概念都在什么時候派上用場?一個EF必須依存于某個DF嗎?MF是必須存在的嗎?腦海里會有無數(shù)個問號奔騰而來。
其實文件的本質就是一組一組的數(shù)據(jù)而已,對這些數(shù)據(jù)的操作(選擇、讀取、寫入/更新)是通過特定的文件操作APDU命令來完成的。所以數(shù)據(jù)才是本真,文件只是表象。某一組數(shù)據(jù)該作為什么樣的文件讓外界來訪問,是由卡片的COS決定的。
按照規(guī)范的約定DF指的是專用文件Dedicated File的縮寫,DF的作用可以等同于計算機中的目錄文件,EF則是基本信息文件Elementary File,也就是說通常情況下和應用相關的數(shù)據(jù)都會存放于EF中。
為了對文件進行訪問,需要給文件分配一個特定的標識。無論是DF還是EF都會有對應的兩個字節(jié)長ID標識,也就是所謂的FID。而DF還會有5-16個字節(jié)長的名字,也叫做AID。EF還會有一個5位長(范圍從1到30)的短文件標識,就是SFI。按照7816規(guī)范的定義,以及根據(jù)7816派生出來的一些行業(yè)應用規(guī)范的定義基本上都是這樣的。無論是FID還是AID以及SFI,在可以選擇的路徑范圍內(這句話可能稍微有點繞,體會后也就自然明白了),不同的文件(包括DF和EF)的取值都不能相同。
在一張卡片里(這里說的是卡片而不是某個應用)有且僅有一個特殊的DF,稱為主文件MF,這個MF的FID默認為3F00,相當于計算機中的根目錄,而且在任何時候MF都可以被選擇。如果某個DF下沒有子DF,只有若干EF,那么這個DF也被稱作ADF,反之如果某個DF下除了有EF之外,還有子DF,那么這個父級的DF也被稱作DDF。
在卡片的使用過程中,對于DF的操作只有“選擇”一種而已,但是對于EF的操作則有:選擇、讀、寫三種形式。
在文件選擇操作過程中,對于DF的選擇可以通過FID或者AID來實現(xiàn),而對于EF的選擇只有FID的方式。能夠被選擇的文件(無論是DF還是EF)必須在可見的路徑范圍內(這句話也有點繞)。
至于對EF文件的讀、寫可以通過SFI的方式直接進行,也可以先通過FID選擇某個EF,然后再進行讀寫。
要特別強調的一點:以上說的這些都是和某些應用規(guī)范細細相關的,也和COS的實現(xiàn)細細相關。換句話說,如果你自己寫一個滿足某個特定應用的COS,你完全可以按照自己的意愿來。比如把MF的FID定義為8F00,比如EF也可以增加AID,比如卡片在任何時候都可以選擇各級DF及其下屬的EF,等等。。。。。。
總之,既要熟悉規(guī)范,但是又不能把某個行業(yè)應用的規(guī)范奉為號令天下的圣旨。
規(guī)范并不是試圖對復雜的公鑰基礎設施結構的全部實施作出規(guī)定,而旨在為各國提供一種實施辦法,使其能夠在若干領域(如主動認證、防非法瀏覽和訪問控制等)做出選擇,從而可逐漸實施更多的功能,而又不會與整個架構不相容。
誰擁有技術,誰就擁有話語權;而話語權就是規(guī)范的制定。在別人的基礎上開發(fā),不僅僅是遵守,更多的是方便,在全球化大背景之下,規(guī)范是必不可少的;當然按部就班肯定是不好的,在學會實用的情況下,勇于探索才是我們應該不懈追求的!
非常感謝:http://blog.sina.com.cn/s/blog_4df8400a0102vkbr.html