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