一種新的“一卡多用”智能卡模型
文章出處:http://m.botanicstilllife.com 作者:徐中華,劉玉珍, 張煥國 人氣: 發(fā)表時(shí)間:2011年10月07日
1、問題的提出
智能卡(Smart Card)又稱CPU卡,是一種鑲嵌有單片機(jī)芯片的IC卡??ㄉ系膯纹瑱C(jī)芯片包含中央處理器CPU、隨機(jī)存儲器RAM 、電擦除可編程存儲器EEPROM 或FlashMemory、只讀存儲器ROM和I/O接口。COS (ChipOperating System)為芯片操作系統(tǒng),它是掩膜在IC卡內(nèi)單片機(jī)ROM中的可執(zhí)行代碼,是芯片資源的管理者和安全保密的基礎(chǔ)。
傳統(tǒng)的COS基本操作方式為:從接口設(shè)備接收到一條命令,然后經(jīng)過加工處理返回應(yīng)答信息給接口設(shè)備。處理過程如圖1所示。
每個(gè)命令都要經(jīng)過其中4個(gè)模塊,如果其中任意一個(gè)模塊在處理中發(fā)現(xiàn)錯(cuò)誤都將返回相應(yīng)的出錯(cuò)信息。傳輸管理負(fù)責(zé)卡和接口設(shè)備之間的數(shù)據(jù)通信,通信使用的協(xié)議一般是1SO7816-3所規(guī)定的T=O的異步半雙工字符傳輸協(xié)議豉T=1異步半雙工塊傳輸協(xié)議。數(shù)據(jù)在傳輸方式上一般有3種不同的類型:明文方式、明文校驗(yàn)方式和密文方式。對于以明文方式進(jìn)行傳輸?shù)臄?shù)據(jù)由傳輸管理器直接送給命令處理模塊。當(dāng)數(shù)據(jù)以明文校驗(yàn)方式或密文方式傳輸時(shí)需要加密運(yùn)算器對數(shù)據(jù)進(jìn)行相應(yīng)的處理。命令解釋器只是對外部輸入的每條命令作語法分析,分析和檢查命令參數(shù)是否正確,然后根據(jù)命令參數(shù)的含義執(zhí)行相應(yīng)的功能模塊。如果發(fā)現(xiàn)參數(shù)有錯(cuò),直接返回出錯(cuò)的信息。文件管理器控制對文件的操作和訪問。在做數(shù)據(jù)操作前,文件管理器將根據(jù)文件的安全屬性來檢查卡的安全狀態(tài),以確定操作的可行性。文件的安全屬性和文件結(jié)構(gòu)一旦產(chǎn)生便處于文件管理器的控制之下。對文件數(shù)據(jù)的操作和管理將按如下的規(guī)則:對某個(gè)文件做操作之前,必須先選擇該文件;文件系統(tǒng)有三層結(jié)構(gòu),并且操作系統(tǒng)不支持以路徑的方式選擇文件,所以在選擇某個(gè)文件之前必須先選擇它的上一層文件,不允許跨層選擇??ㄆ想姾笞詣舆x擇主控文件;訪問文件中的數(shù)據(jù)要受文件的安全屬性的控制;對文件的建立受該文件所屬上層文件的安全屬性的控制。
綜上所述,對于傳統(tǒng)的卡和COS,由于在卡的生命周期內(nèi)不能更新卡上的COS,并采用了相應(yīng)的訪問控制措施和加密傳輸方式,從而可以保證卡上數(shù)據(jù)的安全和完整。智能卡的發(fā)展趨勢之一是“一卡多用” ,即在一張智能卡上集成多個(gè)應(yīng)用。這不僅可以有效地降低單個(gè)應(yīng)用的使用成本,而且也便于用戶的攜帶。對單應(yīng)用智能卡來說,由于應(yīng)用的提供者通常就是卡的發(fā)行者,因此卡上的數(shù)據(jù)安全通常就由卡的發(fā)行者負(fù)責(zé)。支持“一卡多用” 的智能卡應(yīng)允許用戶下載其特定的應(yīng)用程序,允許用戶擴(kuò)充或修改部分COS命令。每一應(yīng)用只能訪問其自己的數(shù)據(jù)和程序,而不能訪問其它應(yīng)用的數(shù)據(jù)或程序。由于一張智能卡同時(shí)存在多個(gè)應(yīng)用,應(yīng)用可能由于本身的缺陷或出于惡意攻擊的目的,訪問其他應(yīng)用的數(shù)據(jù)或程序。數(shù)據(jù)安全性無法只由卡片發(fā)行商、應(yīng)用的提供商或者用戶來單獨(dú)保證。因此如何保證卡上的數(shù)據(jù)安全是支持”一卡多用”智能卡系統(tǒng)應(yīng)解決的核心問題。
COS中與安全最相關(guān)的部分就是文件的管理,也就是存儲器的管理(包括RAM、ROM、EEPROM和Flashmemory等)。對于傳統(tǒng)的COS而言,COS中的命令可以對所有的存儲空間進(jìn)行操作, 由于COS不可以更新,所有對存儲器的操作都要通過相應(yīng)的COS命令來進(jìn)行,所以存儲器都處于COS的控制之下,而在COS命令中采用了相應(yīng)的控制方法就可以保證存儲器上的數(shù)據(jù)安全。利用有關(guān)的指令就可以讀取所有的存儲器的數(shù)據(jù)和寫所有能寫的存儲區(qū)(除ROM外)。在“一卡多用”的系統(tǒng)中,顯然,可以利用添加新的應(yīng)用的方法來對系統(tǒng)進(jìn)行攻擊(讀出所有數(shù)據(jù)進(jìn)行分析、改寫一些系統(tǒng)關(guān)鍵數(shù)據(jù)等),這些攻擊方法可以繞過COS的文件控制模塊直接進(jìn)行,使得文件控制模塊形同虛設(shè)。同時(shí),添加的應(yīng)用如果存在缺陷也可能會存在破壞系統(tǒng)的問題。因此,如何實(shí)施有效地存儲管理來防止這類問題的發(fā)生就成為系統(tǒng)安全的關(guān)鍵問題。
特定用戶下載的程序可以對其他用戶的程序和數(shù)據(jù)進(jìn)行訪問。現(xiàn)有智能卡硬件設(shè)計(jì)不能對多個(gè)用戶區(qū)進(jìn)行隔離保護(hù),即限制特定用戶命令的訪問范圍。本文提出了一種一卡多用智能卡的安全模型,它能支持一卡多用的安全使用,允許多個(gè)應(yīng)用在智能卡中下載其特殊命令,并實(shí)現(xiàn)多個(gè)應(yīng)用的隔離。每一應(yīng)用只能訪問其自身的數(shù)據(jù)或用戶命令,不能訪問其他應(yīng)用的數(shù)據(jù)或命令。
2 、“一卡多用”智能卡的硬件模型
在Intel 8086/8088系統(tǒng)中,由于硬件的限制,系統(tǒng)程序和用戶程序同屬于一個(gè)安全級別(即系統(tǒng)程序和用戶程序在執(zhí)行上沒有任何區(qū)別,例如DOS系統(tǒng)),因此用戶特定應(yīng)用程序的執(zhí)行可能破壞系統(tǒng)從而導(dǎo)致整個(gè)系統(tǒng)崩潰或者存取其它用戶的數(shù)據(jù),顯然這種模型是非常不安全的,而現(xiàn)在的智能卡系統(tǒng)幾乎都是基于這種模型的,利用現(xiàn)有的智能卡來實(shí)現(xiàn)“一卡多用” 就難以保證整個(gè)系統(tǒng)的安全。借鑒Intel80386中利用硬件建立4個(gè)特權(quán)級來保證系統(tǒng)程序和用戶程序分離以實(shí)現(xiàn)多任務(wù)及任務(wù)切換和對各個(gè)任務(wù)環(huán)境進(jìn)行保護(hù)的方法,可以在智能卡芯片中增添一個(gè)特權(quán)級,使得這樣的智能卡芯片具備兩個(gè)特權(quán)級,即內(nèi)核級和用戶級。為了支持這種功能,在智能卡芯片中必須提供相應(yīng)的硬件支持(這里假定智能卡中所用的CPU至少是l6位的,因?yàn)?位CPU的智能卡功能太弱)。智能卡中需要增加標(biāo)志位flag來決定CPU當(dāng)前處于內(nèi)核級還是處于用戶級。需要添加數(shù)據(jù)地址界限寄存器、應(yīng)用地址界限寄存器、內(nèi)核級堆棧和異常寄存器。增加這些寄存器的目的主要是用來從硬件上對存儲空間的管理提供更強(qiáng)的支持。數(shù)據(jù)地址界限寄存器用于限定特定應(yīng)用的數(shù)據(jù)地址空間(允許存放數(shù)據(jù)的地址空間范圍)。應(yīng)用地址界限寄存器用于限定特定應(yīng)用的程序地址空間(執(zhí)行程序時(shí)使用的地址空間范圍)。同時(shí),需要把COS中的核心模塊和一般應(yīng)用程序區(qū)分開來。只有當(dāng)CPU處于內(nèi)核級時(shí)才能執(zhí)行COS的核心模塊,而應(yīng)用程序只能在CPU處于應(yīng)用級時(shí)執(zhí)行。當(dāng)應(yīng)用程序執(zhí)行時(shí),若應(yīng)用程序試圖訪問比較寄存器范圍以外的地址空間,則程序被異常終止,并引起中斷。內(nèi)核級堆棧只能是當(dāng)CPU處于核心級時(shí)才能被訪問,異常寄存器用于發(fā)生異常時(shí)保存發(fā)生異常的地址。針對這種安全模型,還需要增加新的指令或擴(kuò)充諸如JMP、CALL、IRET之類的指令執(zhí)行功能。
“一卡多用”智能卡中的控制轉(zhuǎn)移分為從內(nèi)核級到用戶級的控制轉(zhuǎn)移、從用戶級到內(nèi)核級的控制轉(zhuǎn)移和無級別變化的控制轉(zhuǎn)移3種??ㄆ迦牒?,系統(tǒng)首先進(jìn)入內(nèi)核級,芯片操作系統(tǒng)產(chǎn)生復(fù)位應(yīng)答,并等待接收命令。若接收的命令是用戶自定義命令,則系統(tǒng)將進(jìn)入用戶級。為實(shí)現(xiàn)從內(nèi)核級到用戶級的控制轉(zhuǎn)移,系統(tǒng)根據(jù)應(yīng)用索引文件為當(dāng)前應(yīng)用設(shè)置相應(yīng)的地址界限寄存器,保存返回地址并將控制切換到相應(yīng)的應(yīng)用程序并把flag取反。當(dāng)應(yīng)用程序從調(diào)用系統(tǒng)功能函數(shù)返回時(shí),也需要將控制從內(nèi)核級轉(zhuǎn)移到用戶級,此時(shí)只需將返回地址等出棧并把flag取反即可。若應(yīng)用程序需要使用COS提供的功能函數(shù)時(shí),則需要將控制從用戶級轉(zhuǎn)移到內(nèi)核級。為了實(shí)現(xiàn)這種轉(zhuǎn)移,系統(tǒng)首先判斷是否符合轉(zhuǎn)移的條件,如果符合,則把當(dāng)前應(yīng)用的執(zhí)行地址、調(diào)用函數(shù)使用的參數(shù)放入內(nèi)核級堆棧中,以便應(yīng)用程序返回時(shí)使用,同時(shí)把flag取反。應(yīng)用程序執(zhí)行完成后返回系統(tǒng)時(shí),也需要將控制從用戶級轉(zhuǎn)移到內(nèi)核級,這時(shí)系統(tǒng)就不用保存當(dāng)前應(yīng)用所執(zhí)行的地址,只需將返回地址等出棧并把flag~反即可。任務(wù)中無特權(quán)級變換轉(zhuǎn)移包括內(nèi)核中的轉(zhuǎn)移和應(yīng)用中的轉(zhuǎn)移兩種情況,這種控制轉(zhuǎn)移與當(dāng)前使用的智能卡中的實(shí)現(xiàn)方式相似,只是在應(yīng)用中執(zhí)行轉(zhuǎn)移指令和存取器存取指令前,系統(tǒng)會自動利用界限寄存器判斷地址是否越界,如果越界則轉(zhuǎn)入中斷和異常處理。
系統(tǒng)給每種可能的中斷賦予一個(gè)中斷號,并在系統(tǒng)初始化時(shí),安排好相應(yīng)的中斷向量表。當(dāng)中斷發(fā)生時(shí),系統(tǒng)根據(jù)一定的規(guī)則決定是否響應(yīng)該中斷。若需要響應(yīng),則先保存好當(dāng)前的系統(tǒng)狀態(tài),然后根據(jù)中斷寄存器中保存的中斷向量號轉(zhuǎn)移到相應(yīng)的中斷響應(yīng)程序執(zhí)行。當(dāng)中斷執(zhí)行完后,返回到斷點(diǎn)繼續(xù)執(zhí)行。當(dāng)CPU處于用戶態(tài)和內(nèi)核態(tài)下,對中斷的響應(yīng)規(guī)則可能是不一樣的,如CPU處在內(nèi)核態(tài)下可能需要屏蔽某些中斷,而CPU在系統(tǒng)態(tài)下就不需要屏蔽這些中斷了。系統(tǒng)給每個(gè)可能的異常賦予一個(gè)異常號,并在系統(tǒng)初始化時(shí),安排好相應(yīng)的異常向量表。當(dāng)異常發(fā)生時(shí),系統(tǒng)根據(jù)異常號轉(zhuǎn)移到相應(yīng)的異常處理程序進(jìn)行相應(yīng)的處理。但是處理完后,要進(jìn)行報(bào)錯(cuò),并中斷當(dāng)前程序的執(zhí)行。
3 、芯片操作系統(tǒng)COS
傳統(tǒng)COS一般由傳輸管理、文件管理、安全管理、命令處理4個(gè)功能模塊組成。傳統(tǒng)COS中所有命令的執(zhí)行方式是相同的。系統(tǒng)調(diào)用命令時(shí),就把執(zhí)行權(quán)限交給了命令程序,此時(shí),命令程序?qū)ㄉ系乃械挠曹浖Y源擁有完全的控制權(quán),當(dāng)應(yīng)用程序完成了相應(yīng)的處理后,就返回系統(tǒng)。如上文所述,在新的模型中,所有命令應(yīng)被分為兩個(gè)部分:核心命令和用戶命令。核心命令應(yīng)由以下幾個(gè)部分組成:與密碼運(yùn)算有關(guān)的命令、與存儲管理有關(guān)的命令、與身份驗(yàn)證有關(guān)的命令、與通信傳輸有關(guān)的命令、與硬件資源管理有關(guān)的命令等。這些命令一般是獨(dú)立于具體的應(yīng)用的,在執(zhí)行時(shí)對所有的硬軟件資源擁有完全的控制權(quán)。用戶命令是與具體的應(yīng)用相聯(lián)系的所有命令的集合,在執(zhí)行時(shí)只能使用特定的硬軟件資源,否則就會出錯(cuò)。
卡上電后,COS首先發(fā)送復(fù)位應(yīng)答給終端來建立雙方的通信并設(shè)置好相應(yīng)的通信參數(shù),接著就等待接收終端的命令,當(dāng)接到終端的命令時(shí),COS將從索引文件中來查找該命令,并區(qū)分它是系統(tǒng)核心命令還是一般的用戶命令,如果是系統(tǒng)核心命令,COS按要求處理完后就返回給終端相應(yīng)的結(jié)果;如果是一般的用戶命令,COS將從索引文件中查找出該命令所對應(yīng)的應(yīng)用,找到后將系統(tǒng)切換到該應(yīng)用的環(huán)境下進(jìn)行相應(yīng)的處理,處理完并返回處理結(jié)果后,系統(tǒng)就在切換的COS環(huán)境下等待新的命令;如果COS不能從索引文件中找到該命令,則返回給終端出錯(cuò)標(biāo)志。值得注意的是:這些命令應(yīng)該有一系列的權(quán)限驗(yàn)證方式來保障系統(tǒng)的安全。
為適應(yīng)上面提出的“一卡多用”智能卡的安全模型,我們將對COS的一般模型進(jìn)行改造。在文件管理中,需要建立應(yīng)用索引文件,用于存儲所有應(yīng)用的索引、應(yīng)用中的命令以及相應(yīng)的數(shù)據(jù)地址空間范圍和應(yīng)用地址空間范圍,并把這個(gè)文件存儲在系統(tǒng)存儲區(qū),因此,只有COS系統(tǒng)才能夠存取該文件。在技術(shù)實(shí)現(xiàn)上,可用圖2描述該文件系統(tǒng)模型的實(shí)現(xiàn)。
在卡的生命周期內(nèi),卡上的硬件資源在一般情況下不會改變,因此對于硬件資源管理功能和通信傳輸管理功能一般不需要更新。作為系統(tǒng)安全核心的安全控制管理功能則可能隨時(shí)間的推移而需要進(jìn)行部分更新以適應(yīng)新的應(yīng)用環(huán)境。如一些傳統(tǒng)加密算法經(jīng)過一段時(shí)問的使用后可能需要替換成新的加密算法,因此需要考慮安全管理模塊的更新問題。由于安全管理模塊屬于COS核心模塊部分,安全模塊的更新就涉及到了COS的更新,因此,需要建立相應(yīng)的機(jī)制以適應(yīng)這樣情況。由于安全控制模塊一般由COS的提供者提供,當(dāng)需要更新時(shí),應(yīng)該使用COS提供者提供的特定的更新驗(yàn)證程序后才能更新。當(dāng)原有的DES需要升級至AES時(shí),可以通過把COS提供者提供的相應(yīng)的AES模塊下載到卡中來實(shí)現(xiàn)更新,而不必?fù)Q卡,這樣可提高智能卡的使用壽命。
命令分為核心命令和用戶命令。如果要更新或添加核心命令,則涉及到對COS的更新。如果更新或添加用戶命令,則涉及到對應(yīng)用的管理。為了便于COS的更新,我們將COS的存儲分為以下幾個(gè)部分:將COS提供的核心管理功能模塊和一些在卡的生命期內(nèi)不需要改變的模塊掩膜到ROM中;對于可能需要更新的模塊, 寫到EEPROM 或FLASHMEMORY中以方便今后的更新操作;考慮到COS自身的擴(kuò)充以及x,tcos中某些模塊的更新可能需要的更大的存儲空間,同時(shí)還在EEPROM或FLASHMEMORY預(yù)留出部分空間。COS自身的存儲主要由以上的3部分組成,其存儲邏輯圖如圖3。
4、應(yīng)用管理
系統(tǒng)中另一個(gè)重要的方面是對應(yīng)用的管理,它包括應(yīng)用的添加、刪除、更新和執(zhí)行4個(gè)方面。
當(dāng)需要添加一個(gè)新的應(yīng)用時(shí),系統(tǒng)順序地給該應(yīng)用分配一個(gè)標(biāo)志號,并在應(yīng)用索引文件中添加一項(xiàng),把允許該應(yīng)用使用的地址空間范圍和起始地址存于其中,同時(shí)根據(jù)有關(guān)規(guī)則建立起一個(gè)DF文件分配給該應(yīng)用。在應(yīng)用索引文件中還應(yīng)該包括該應(yīng)用所使用的所有命令。
對于應(yīng)用刪除有3種方式:(1)應(yīng)用一旦被添加就不再允許被刪除。(2)允許用戶刪除所有的應(yīng)用,這種方式實(shí)現(xiàn)比前一種要復(fù)雜,當(dāng)某個(gè)應(yīng)用有使用的時(shí)間限制或者不需要再使用時(shí),就可以考慮將該應(yīng)用從卡上刪除,以便回收存儲空間。刪除方法是:將該應(yīng)用在應(yīng)用索引文件中所對應(yīng)的索引項(xiàng)刪除就行了?;厥盏拇鎯臻g可以分配新添加的應(yīng)用,但是新添加的應(yīng)用所要求的存儲空間大小不得超過回收的存儲空間的大小,否則不得分配。(3)允許刪除部分應(yīng)用,某些應(yīng)用在卡上起著非常重要的作用,這些應(yīng)用只允許更新,而不能被刪除,在這種方式下,在添加應(yīng)用時(shí)就應(yīng)該確定哪些應(yīng)用可以被刪除,哪些應(yīng)用不能被刪除。對可以刪除的應(yīng)用,刪除方式同上,對不能刪除的應(yīng)用,刪除時(shí)就要報(bào)錯(cuò)。
比較這3種實(shí)現(xiàn)方式,第1種方式實(shí)現(xiàn)容易,缺點(diǎn)是不夠靈活,浪費(fèi)有限的存儲資源,第2種方式稍難一些,可以節(jié)約一些存儲資源,但仍不夠靈活,第3種方式實(shí)現(xiàn)比較困難,但相對而言比較靈活一些。但就技術(shù)實(shí)現(xiàn)而言,一般采用第2種方式為宜。
當(dāng)一個(gè)應(yīng)用中的某些內(nèi)容需更新時(shí),可用系統(tǒng)中有關(guān)的命令來更新相應(yīng)的內(nèi)容,但是更新后該應(yīng)用所占的空間不能超出分配給該應(yīng)用的地址空間,否則將拒絕更新。在更新過程中,一般是用更新的內(nèi)容覆蓋掉原有的內(nèi)容。如果原有的內(nèi)容仍有很大的價(jià)值,那么就應(yīng)該考慮是否執(zhí)行更新操作。提供更新操作的主要優(yōu)點(diǎn)是可以延長卡的使用壽命。
當(dāng)執(zhí)行應(yīng)用中的命令時(shí),系統(tǒng)自動將應(yīng)用索引文件的地址范圍裝入界限寄存器,一旦應(yīng)用在執(zhí)行中的地址越界,就需進(jìn)行異常處理,并中斷應(yīng)用程序。采用這種方式就可以保證應(yīng)用不會在執(zhí)行過程中非法訪問其他應(yīng)用的數(shù)據(jù)或破壞系統(tǒng)資源。
5、小結(jié)
從理論上來說這種系統(tǒng)中可以添加無限個(gè)應(yīng)用。但是到底能夠添加多少個(gè)應(yīng)用是受硬件和軟件條件的限制的,應(yīng)根據(jù)系統(tǒng)具體情況來決定。 “一卡多用”智能卡的應(yīng)用范圍是極其廣泛的,它可以應(yīng)用于金融財(cái)務(wù)(現(xiàn)金卡、信用卡、預(yù)付卡、電子支票、證券卡等)、社會安全(人壽和意外保險(xiǎn)卡、社會保障卡等)、醫(yī)療(健康檢查卡、捐血卡、病歷卡等)、交通(交通卡等)等方面。本文從卡的硬件模型和軟件模型方面討論了一種“一卡多用”智能卡模型,著重討論了它和傳統(tǒng)智能卡模型的不同之處,并給出了一些實(shí)現(xiàn)的方法。使用上述“一卡多用”智能卡,能在硬件上提供物理隔離,可以實(shí)現(xiàn)真正的一卡多用并保證卡上多個(gè)應(yīng)用及其數(shù)據(jù)的安全。
(文/武漢大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,徐中華,劉玉珍, 張煥國)