智能卡操作系統(tǒng)的補(bǔ)丁機(jī)制研究
文章出處:http://56733.cn 作者:張李靜, 張秋燕 人氣: 發(fā)表時(shí)間:2011年09月30日
隨著科學(xué)技術(shù)的不斷進(jìn)步,智能卡的應(yīng)用已涉及到人類生活的各個(gè)領(lǐng)域,如商業(yè)、醫(yī)療、保險(xiǎn)、交通、社會(huì)公共事業(yè)等多種領(lǐng)域。同時(shí),用戶手里的智能卡數(shù)量也越來越多,特別是同種類的卡由于要升級(jí)卡片信息往往需要換一張新卡。 所以,如何高效利用智能卡,即如何設(shè)計(jì)智能卡的補(bǔ)丁機(jī)制,以實(shí)現(xiàn)發(fā)卡后更新卡片應(yīng)用程序或者修改卡片操作系統(tǒng)BUG是十分重要的課題。
1 智能卡操作系統(tǒng)概述
智能卡操作系統(tǒng),簡(jiǎn)稱COS。COS一般是緊緊圍繞著它所服務(wù)的智能卡的特點(diǎn)而開發(fā)的。與那些常見的微機(jī)上的操作系統(tǒng)相比較而言, COS在本質(zhì)上更加接近于監(jiān)控程序。智能卡和終端進(jìn)行通信是以命令的形式進(jìn)行的。根據(jù)規(guī)范要求,系統(tǒng)所采用的都是命令應(yīng)答對(duì)的方式,由讀寫設(shè)備發(fā)出命令,智能卡則接收命令,進(jìn)行處理,處理完畢后送出相應(yīng)的應(yīng)答。所以,COS所需要解決的最根本問題是對(duì)外部的命令如何進(jìn)行處理、響應(yīng)的問題。
整個(gè)COS是通過文件來實(shí)現(xiàn)存儲(chǔ)和管理數(shù)據(jù)的,文件結(jié)構(gòu)系統(tǒng)類似于DOS的目錄管理方式,可以實(shí)現(xiàn)多級(jí)目錄,每個(gè)目錄下面可以創(chuàng)建多種類型文件。文件系統(tǒng)是由專有文件DF (Dedicated File)和基本文件EF (Elementary File)組成的. 根目錄的DF稱為MF,任何一個(gè)文件組織均是以MF開頭的結(jié)構(gòu).所有的其余文件(DF、EF)均是MF的分支, DF下可以創(chuàng)建DF和EF分支, EF是末端,不能在EF下創(chuàng)建文件,文件系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 智能卡操作系統(tǒng)的文件結(jié)構(gòu)
Fig. 1 File structures of COS
智能卡操作系統(tǒng)COS在設(shè)計(jì)主函數(shù)時(shí)比較通用的方式是設(shè)計(jì)成一個(gè)循環(huán)的方式. 循環(huán)實(shí)現(xiàn)智能卡接收命令, 進(jìn)行處理, 處理完畢后送出相應(yīng)的應(yīng)答。
主程序在接收到終端發(fā)來的指令會(huì)經(jīng)過傳輸管理模塊,首先判斷是什么樣的指令,以及要對(duì)那些文件進(jìn)行操作,操作后再返回主程序進(jìn)行處理,返回相應(yīng)的數(shù)據(jù)和執(zhí)行結(jié)果. 智能卡和終端的交互過程是通過對(duì)卡內(nèi)文件的連續(xù)操作進(jìn)行的。
2 智能卡操作系統(tǒng)補(bǔ)丁機(jī)制的應(yīng)用背景
2. 1 補(bǔ)丁在智能卡操作系統(tǒng)中的使用
通常,智能卡操作系統(tǒng)COS的下載方式是由芯片提供商決定的. 在下載COS之前,卡片的狀態(tài)為BootLoader狀態(tài). 卡片BootLoader有一套自己的操作指令. 本文中的補(bǔ)丁機(jī)制研究以51系列智能卡為例, 實(shí)際操作時(shí),采用的編譯器是Keil編譯器,程序編譯后會(huì)產(chǎn)生一個(gè). hex文件. 下載程序時(shí)把. hex文件中地址信息和對(duì)應(yīng)的數(shù)據(jù)信息解析出來,然后用BootLoader的下載指令即可。
一般情況下,在下載完COS后,如果發(fā)現(xiàn)COS中有程序錯(cuò)誤或者需要增加新的功能而需要修改某些函或文件,最簡(jiǎn)單的辦法就是重新發(fā)卡,即回收卡片,重新下載COS. 但是當(dāng)卡片已經(jīng)在用戶手中,這時(shí),不僅要回收卡片,還要經(jīng)歷COS下載、個(gè)人化等階段. 這就顯的非常麻煩。 所以,我們?cè)谠O(shè)計(jì)卡操作系統(tǒng)時(shí)最好能給出一個(gè)補(bǔ)丁( PATCH)的接口,這樣的話,當(dāng)卡片需要增加新的功能或是修改BUG時(shí),只需將補(bǔ)丁程序下載到卡片這一個(gè)步驟。
2. 2 補(bǔ)丁的實(shí)現(xiàn)方式
傳統(tǒng)的補(bǔ)丁設(shè)計(jì)方法是直接在程序中預(yù)留一段或者多段代碼. 這樣,當(dāng)需要下載補(bǔ)丁時(shí),只需將補(bǔ)丁程序?qū)懙筋A(yù)留的地址中去即可. 但是,由于在預(yù)留代碼時(shí)一般不能確定未來下載補(bǔ)丁的大小和個(gè)數(shù),所以,這種實(shí)現(xiàn)方法有一定的局限性,而且,在需要下載的補(bǔ)丁較大或者較多時(shí),比較容易出現(xiàn)代碼重疊的情況,使COS在執(zhí)行過程中出現(xiàn)異常錯(cuò)誤。
基于以上問題,下面結(jié)合51系列智能卡研究出一套補(bǔ)丁機(jī)制,這種方案適合任意的51系列智能卡的補(bǔ)丁下載. 該方法通過建立PATCH函數(shù)表和在操作系統(tǒng)主程序中設(shè)計(jì)調(diào)用補(bǔ)丁的接口來實(shí)現(xiàn)補(bǔ)丁的下載和管理,可以根據(jù)不同的補(bǔ)丁分類索引進(jìn)行補(bǔ)丁下載,而且不再受補(bǔ)丁大小的限制,同時(shí)支持多個(gè)補(bǔ)丁的下載。
3 智能卡操作系統(tǒng)補(bǔ)丁機(jī)制方案設(shè)計(jì)
3. 1 實(shí)現(xiàn)機(jī)制
本文中智能卡操作系統(tǒng)的補(bǔ)丁機(jī)制采用地址映射表的方式實(shí)現(xiàn). 即在EEPROM /FLASH ( ram)放置一個(gè)PATCH函數(shù)表(或者創(chuàng)建一個(gè)內(nèi)部管理文件存儲(chǔ)). 數(shù)據(jù)記錄格式如表1所示. 其中, Patch ID值為自定義或運(yùn)營(yíng)商定義. Patch屬性字節(jié)定義如表2所示。
3. 2 實(shí)現(xiàn)方式
1)在卡片中的系統(tǒng)數(shù)據(jù)區(qū)預(yù)先創(chuàng)建Patch索引表,預(yù)留足夠的表空間。
2)在固化程序中預(yù)留可能會(huì)調(diào)用補(bǔ)丁的接口。
調(diào)用方式舉例:
Judge_Patch函數(shù)位于固化程序中,它可以解析Patch索引表,根據(jù)Patch ID來確定是否有Patch需要執(zhí)行,及獲得Patch程序首地址. Judge_Patch函數(shù)中會(huì)自動(dòng)將補(bǔ)丁程序的首地址賦給一個(gè)全局函數(shù)指針,所以如果存在Patch程序,可以直接調(diào)用函數(shù)指針實(shí)現(xiàn)對(duì)補(bǔ)丁函數(shù)的調(diào)用. 如果Judge_Patch函數(shù)返回0,表示沒有找到相關(guān)的補(bǔ)丁函數(shù),則繼續(xù)執(zhí)行原來的處理流程。
3)執(zhí)行補(bǔ)丁程序, COS直接轉(zhuǎn)到獲得的Patch程序首地址開始執(zhí)行. 補(bǔ)丁程序執(zhí)行之前內(nèi)部實(shí)現(xiàn)保護(hù)目前的程序地址和寄存器等。
4 實(shí)例分析
若智能卡操作系統(tǒng)的兩個(gè)補(bǔ)丁函數(shù)為: AP I_FindDfEf_patch,即找到當(dāng)前DF文件下的EF文件;Update_Record_Patch,即更新記錄文件,下面給出具體進(jìn)行補(bǔ)丁函數(shù)下載時(shí)的詳細(xì)步驟:
1)編寫補(bǔ)丁函數(shù),并將這段代碼下載到芯片的代碼區(qū)空余位置(可以從COS編譯后生成的文件中獲取地址) ,并記錄下載的首地址。
2)為當(dāng)前補(bǔ)丁設(shè)置在補(bǔ)丁索引表中的位置和相關(guān)屬性,如表4所示。
3)卡片復(fù)位,重新上電后,COS會(huì)通過Judge _Patch函數(shù)進(jìn)行對(duì)判斷是否要執(zhí)行補(bǔ)丁函數(shù)以及執(zhí)行哪個(gè)補(bǔ)丁,根據(jù)屬性字節(jié)可知要執(zhí)行的補(bǔ)丁是第一個(gè)補(bǔ)丁,即找到當(dāng)前DF文件下的EF文件,Judge_Patch會(huì)送出補(bǔ)丁的起始地址,在接下來補(bǔ)丁程序,實(shí)現(xiàn)如下:
4)是補(bǔ)丁功能驗(yàn)證,卡片復(fù)位,執(zhí)行選擇DF下某EF文件指令。 因?yàn)樵撝噶顑?nèi)部是通過前面下載的補(bǔ)丁來實(shí)現(xiàn)的。 所以,從指令的執(zhí)行結(jié)果就能觀察出本文中下載補(bǔ)丁的正確與否, 本例中,卡片返回正確的狀態(tài)碼以及所選EF的相關(guān)信息。
5 結(jié) 論
本文首先介紹智能卡操作系統(tǒng)的基本概念,其次結(jié)合接觸式51系列智能卡芯片說明補(bǔ)丁下載在智能卡操作系統(tǒng)中的應(yīng)用背景。并針對(duì)當(dāng)前補(bǔ)丁下載方法的不足,提出了一種補(bǔ)丁管理機(jī)制。文中給出具體的實(shí)例,并進(jìn)行分析,給出實(shí)現(xiàn)方法和步驟,同時(shí)驗(yàn)證了此補(bǔ)丁下載方法的可行性,本文中提出的補(bǔ)丁管理機(jī)制適合任意的51系列智能卡的補(bǔ)丁下載,而且不再受補(bǔ)丁大小的限制,并可根據(jù)不同的補(bǔ)丁分類索引進(jìn)行補(bǔ)丁下載,因此,該方案具用很好的應(yīng)用價(jià)值。
(文/天津理工大學(xué)計(jì)算機(jī)與通信工程學(xué)院, 張李靜, 張秋燕)