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