亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

保護(hù)計(jì)算機(jī)程序尤其是在微電路卡中的計(jì)算機(jī)程序的執(zhí)行安全的方法

文檔序號(hào):6488440閱讀:159來源:國知局
專利名稱:保護(hù)計(jì)算機(jī)程序尤其是在微電路卡中的計(jì)算機(jī)程序的執(zhí)行安全的方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種保護(hù)計(jì)算機(jī)程序執(zhí)行安全的方法并涉及一種應(yīng)用這樣一種方法的被安全保護(hù)了的電子實(shí)體。
本發(fā)明尤其被用于保護(hù)微電路卡(也被稱作“智能卡”)的安全。
在下文中,計(jì)算機(jī)程序的“安全保護(hù)”意指— 檢測(cè)旨在修改計(jì)算機(jī)程序的正常行為的惡意攻擊;以及— 任何旨在使計(jì)算機(jī)程序,尤其是在強(qiáng)烈干擾的環(huán)境,例如衛(wèi)星,中執(zhí)行的程序,或者對(duì)可靠性要求極高的計(jì)算機(jī)程序,例如控制心臟植入物的程序,的運(yùn)行可靠的處理;另一方面,“計(jì)算機(jī)程序”意指任何程序,無論哪種計(jì)算機(jī)語言,無論用的哪種存儲(chǔ)裝置。非限制性地舉例而言,計(jì)算機(jī)程序可以是用機(jī)器語言、匯編語言、C、C++、Java、VHDL編寫的。程序可以存儲(chǔ)在永久性存儲(chǔ)器中,例如ROM或EEPROM存儲(chǔ)器中或硬盤中,或存儲(chǔ)在易失性存儲(chǔ)器中,例如RAM類型的存儲(chǔ)器中。還可以用集成電路,例如FPGA類型的,或用ASIC電路(專用集成電路)將程序固化。
本發(fā)明容許檢測(cè)旨在修改在被安全保護(hù)了的電子實(shí)體,例如微電路卡、被安全保護(hù)了的PCMIA卡(例如IBM4758卡)、USB鑰匙、或在頁面上集成了無觸點(diǎn)芯片的護(hù)照,上執(zhí)行的計(jì)算機(jī)程序的執(zhí)行進(jìn)程的攻擊。
本發(fā)明尤其容許檢測(cè)通過干擾電子實(shí)體的運(yùn)行的攻擊,例如“通過制造錯(cuò)誤的攻擊”(英文的“fault Attack”,即“錯(cuò)誤攻擊”)類型的攻擊。
這些攻擊旨在非法修改寄存器、存儲(chǔ)器、或總線的內(nèi)容或?qū)@些內(nèi)容的讀取,或旨在迫使處理器不執(zhí)行或錯(cuò)誤地執(zhí)行計(jì)算機(jī)程序的某些指令。被攻擊的計(jì)算機(jī)程序于是可能以與設(shè)計(jì)時(shí)所預(yù)定的方式非常不同的方式運(yùn)行。
這些攻擊可能通過各種方式實(shí)施,其中已知的有— 通過在處理器的電源端子上產(chǎn)生一個(gè)電壓峰值;— 通過突然升高其溫度;— 通過迅速改變其時(shí)鐘頻率或其電源電壓;— 通過在構(gòu)成它的硅部分上施加閃光、激光射線、或電磁場(chǎng)。
背景技術(shù)
根據(jù)現(xiàn)有技術(shù),對(duì)于保護(hù)計(jì)算機(jī)程序的安全,尤其是對(duì)于抵御通過在微電路卡中制造錯(cuò)誤的攻擊,業(yè)內(nèi)人士有各種各樣的方法。
第一種方法在于在微電路卡的元件中安裝容許檢測(cè)這種攻擊的傳感器。
然而,這種方法的有效性有限,因?yàn)閷?shí)際上不可能在該元件的整個(gè)表面布置上傳感器。此外,這些傳感器也是由硅構(gòu)成的,所以也有可能干擾這些傳感器或修改它們傳輸?shù)男畔ⅰ?br> 第二種已知的并在大多數(shù)微電路卡操作系統(tǒng)中應(yīng)用的安全保護(hù)方法基于“信號(hào)量(semaphore)”的使用。一種這樣的方法包括— 一個(gè)在執(zhí)行關(guān)鍵指令集期間修改存儲(chǔ)器的內(nèi)容的步驟;和— 一個(gè)檢驗(yàn)步驟,在這個(gè)檢驗(yàn)步驟期間,通過讀前述存儲(chǔ)區(qū)的內(nèi)容,從而檢驗(yàn)前述的修改是否實(shí)施了。
如果存儲(chǔ)區(qū)沒有被修改,這說明修改步驟沒有實(shí)施,因此,前述關(guān)鍵指令集沒有正確執(zhí)行。
我們將注意到術(shù)語“信號(hào)量”在本文中表示一個(gè)與編程領(lǐng)域內(nèi)并發(fā)進(jìn)程已知的概念不同卻具有相同名稱的概念。
該第二種方法由軟件實(shí)施,沒有前述第一種方法的弊病。
然而,已經(jīng)知道,傳統(tǒng)上這些信號(hào)量是由駐留在工作存儲(chǔ)器(RAM)中的變量來實(shí)現(xiàn)的,它們的操作(定位、讀取)比較慢或者耗費(fèi)存儲(chǔ)空間。當(dāng)程序在象智能卡這樣的資源(內(nèi)存、計(jì)算能力,......)有限的系統(tǒng)上執(zhí)行時(shí),該限制尤其不利。本發(fā)明力求得到一種沒有前述弊病的軟件安全保護(hù)方法。

發(fā)明內(nèi)容
為此,本發(fā)明涉及一種保護(hù)計(jì)算機(jī)程序執(zhí)行安全的方法,該方法包括— 一個(gè)向該程序的一個(gè)指令棧中推入一個(gè)預(yù)定值的步驟;和— 一個(gè)從該棧出棧的步驟,在必要的情況下,該出棧步驟適于容許檢測(cè)一個(gè)執(zhí)行異常。
我們將在此提醒指令棧是一個(gè)用于臨時(shí)保存數(shù)據(jù)的存儲(chǔ)區(qū)。用兩個(gè)在下文中分別稱作PUSH和POP的專用指令將數(shù)值推入棧中及從棧中彈出。
這些指令只操作固定長度的數(shù)值,例如八位字節(jié)的。
棧的使用遵循LIFO(“后進(jìn)先出”)類型的算法。
已經(jīng)知道,它尤其存儲(chǔ)進(jìn)程的返回地址(例如80×86匯編語言的RET指令)。
根據(jù)本發(fā)明的安全保護(hù)方法因而使用執(zhí)行棧來存儲(chǔ)一個(gè)容許檢測(cè)一個(gè)執(zhí)行異常的數(shù)值。
執(zhí)行棧一方面具有快速的讀寫存取速度,另一方面很少耗費(fèi)存儲(chǔ)空間,因此根據(jù)本發(fā)明的安全保護(hù)方法尤其適合于保護(hù)在資源有限的系統(tǒng)上執(zhí)行的計(jì)算機(jī)程序的安全。
這種對(duì)指令棧的新穎使用具有其它的優(yōu)點(diǎn),將在以后描述。
在一個(gè)最佳實(shí)施方式下,入棧步驟和出棧步驟分別與所述程序的至少一個(gè)指令子集的元素相關(guān)聯(lián)。
例如,入棧步驟可以與打開文件的指令“open(文件)”相關(guān)聯(lián),而出棧步驟可以與關(guān)閉該文件的指令“close(文件)”相關(guān)聯(lián)。
該特征尤其有利,因?yàn)樗菰S通過例如用編輯器將入棧和出棧操作與前述元素,即前面例子中的“open”和“close”指令,關(guān)聯(lián)起來,而使安全保護(hù)指令的編寫自動(dòng)化。
根據(jù)該最佳實(shí)施方式的一個(gè)第一變型,指令子集的元素分別是一個(gè)括號(hào)系統(tǒng)的一個(gè)開括號(hào)和一個(gè)關(guān)括號(hào)。
為此,我們提醒,根據(jù)語言理論以及如計(jì)算機(jī)語言的業(yè)內(nèi)人士所知道的,當(dāng)一段文本包含同樣多的開括號(hào)和關(guān)括號(hào),而且該文本的任何開頭都包含數(shù)量多于或等于關(guān)括號(hào)的數(shù)量的開括號(hào)時(shí),我們面對(duì)的就是一個(gè)括號(hào)系統(tǒng)。
根據(jù)這個(gè)尤其有利的特征,入棧步驟和出棧步驟可以分別與如下指令相關(guān)聯(lián)— “(”和“)”;或— “{”和“}”;或— “begin”和“end”;或— “repeat”和“until”。
在該最佳實(shí)施方式的另一種變型下,出棧步驟與程序或該程序的一個(gè)子程序的一條執(zhí)行返回指令相關(guān)聯(lián)。
該特征有利地容許使用傳統(tǒng)上在一個(gè)程序或子程序的(當(dāng)執(zhí)行return指令時(shí))返回時(shí)實(shí)施的正常出棧操作來檢測(cè)一個(gè)執(zhí)行異常,如果在這種場(chǎng)合下出棧的數(shù)值與在該程序正常執(zhí)行時(shí)本應(yīng)該出棧的數(shù)值不一致的話。
根據(jù)另一個(gè)特征,程序由這樣一種編程語言編寫該語言包含一個(gè)第一指令,該第一指令的執(zhí)行實(shí)施入棧步驟;和/或一個(gè)第二指令,該第二指令的執(zhí)行實(shí)施所述出棧步驟。
在該實(shí)施方式下,一些新的指令被合并到編程語言中,這些指令每條都有一個(gè)專有函數(shù),以及為了程序的安全保護(hù)的要么一個(gè)入棧函數(shù),要么一個(gè)出棧函數(shù)。
再回到上文中簡(jiǎn)短引入的例子,可以創(chuàng)造一條取名為“open(文件)”的新指令,該新指令容許既打開文件又將一個(gè)預(yù)定的數(shù)值推入程序的指令棧。
因此,編程人員確信每次打開文件時(shí),安全保護(hù)函數(shù)都被應(yīng)用了,甚至無需他操心,也不需要特別的軟件工具。
優(yōu)先地,第二指令結(jié)束程序或該程序的一個(gè)子程序。
該實(shí)施方式具有與在前文中引入的實(shí)施方式方式相同的優(yōu)點(diǎn),在前文的這個(gè)實(shí)施方式中,入棧和出棧指令與程序的指令子集的元素相關(guān)聯(lián),而不是與這些元素合并。因此,此處的實(shí)施方式將不在后面詳細(xì)描述。
在一個(gè)最佳實(shí)施方式下,預(yù)定值代表程序的一個(gè)關(guān)鍵指令子集。
當(dāng)安全保護(hù)方法被用于保護(hù)程序的多個(gè)指令子集的安全時(shí),該特征尤其有利。
該特征容許在入棧步驟期間檢測(cè)是否一個(gè)特定的指令子集被正確執(zhí)行了,而不是其執(zhí)行會(huì)導(dǎo)致另一個(gè)預(yù)定值入棧的另一個(gè)指令子集被執(zhí)行。
業(yè)內(nèi)人士將容易地領(lǐng)會(huì)到該特征可以用于保護(hù)一個(gè)(C語言中的“if”,“then”,“else”類型的)測(cè)試的各個(gè)分支的安全,在每一個(gè)分支中,一個(gè)預(yù)定的不同的數(shù)值被入棧,而在該測(cè)試末實(shí)施出棧步驟。
當(dāng)程序調(diào)用一個(gè)子程序時(shí),該特征還容許在執(zhí)行子程序期間確信進(jìn)入的子程序是響應(yīng)這個(gè)調(diào)用的,而不是響應(yīng)一個(gè)通過制造錯(cuò)誤的攻擊的。
應(yīng)用該特征的兩個(gè)例子將在以后參照附錄A和C被詳述。
根據(jù)另一個(gè)特征,根據(jù)本發(fā)明的安全保護(hù)方法包括一個(gè)如果在出棧步驟中出棧的數(shù)值不同于預(yù)定的數(shù)值就執(zhí)行的異常處理步驟。
有利地,該特征容許一旦一個(gè)攻擊有修改程序的正常執(zhí)行,尤其是該程序的一個(gè)函數(shù)的調(diào)用和返回,的后果就應(yīng)用一個(gè)異常處理步驟。該安全保護(hù)方法因而尤其有效。
例如,異常處理可以在一個(gè)微電路卡使用安全保護(hù)方法的情況下旨在通過破壞該卡的操作系統(tǒng)而使該卡無效。
應(yīng)用該特征的三個(gè)例子將在后面參照附錄A、C、D被詳述。
在程序包括至少一個(gè)對(duì)一個(gè)子程序的調(diào)用的一個(gè)特殊實(shí)施方式下,入棧步驟在該調(diào)用之前實(shí)施,并且,在該子程序執(zhí)行期間,預(yù)定值被從棧中刪除。
該特征因此容許檢驗(yàn)子程序是否確實(shí)執(zhí)行了以及是否正確地執(zhí)行了。
事實(shí)上,如果對(duì)該子程序的調(diào)用被跳過了,或者如果出棧步驟沒有執(zhí)行,指令棧中將保存著被入棧的預(yù)定值。
以后該數(shù)值的出棧將導(dǎo)致檢測(cè)出執(zhí)行異常,正如下文中參照附錄B和C所闡明的那樣。
有利的是,在該特殊實(shí)施方式下,預(yù)定值可以是一個(gè)異常的處理函數(shù)的地址。
因此,如果在執(zhí)行子程序期間預(yù)定的數(shù)值沒有出棧,例如由于一個(gè)旨在使該子程序不執(zhí)行的攻擊,那么以后由處理器將該數(shù)值彈出棧就將導(dǎo)致應(yīng)用該處理函數(shù)。以后將在附錄B中詳述一個(gè)例子。
該特征容許如果程序遭受任何一個(gè)其后果為避免執(zhí)行子程序的攻擊就觸發(fā)處理函數(shù)。該特征因而對(duì)保護(hù)關(guān)鍵函數(shù),例如一個(gè)驗(yàn)證過程,的安全尤其有用。
在程序包括至少一個(gè)對(duì)一個(gè)子程序的調(diào)用的另一個(gè)特殊實(shí)施方式下,入棧步驟在執(zhí)行子程序期間實(shí)施,而預(yù)定值在執(zhí)行該子程序之后被刪除。
該特征因此容許檢測(cè)該子程序的返回是否正確執(zhí)行。
事實(shí)上,如果該子程序的返回被干擾了,指令棧將保存著被入棧的預(yù)定值。
該特殊實(shí)施方式將被參照附錄D詳述。
有利的是,在該特殊實(shí)施方式下,預(yù)定值可以是一個(gè)異常的處理函數(shù)的地址。
因?yàn)榍拔闹刑峒暗睦碛?,該特征容許如果程序遭受了任何一個(gè)旨在避免執(zhí)行子程序的攻擊就觸發(fā)處理函數(shù)。該特征因而對(duì)保護(hù)關(guān)鍵函數(shù),例如一個(gè)驗(yàn)證過程,的安全尤其有用。
被參照附錄E,一個(gè)應(yīng)用該特征的例子被給出。
本發(fā)明還力求得到一種計(jì)算機(jī)系統(tǒng)可讀的、可能完全或部分可拆卸的信息載體,尤其是CD-ROM或磁載體,例如硬盤或軟盤,或者如電信號(hào)或光信號(hào)這樣的可以傳輸?shù)妮d體,這種信息載體包括一個(gè)計(jì)算機(jī)程序的一些指令,容許在計(jì)算機(jī)系統(tǒng)加載和執(zhí)行該程序時(shí)應(yīng)用如上文中簡(jiǎn)述的安全保護(hù)方法。
本發(fā)明還力求得到一種存儲(chǔ)在一個(gè)信息載體上的計(jì)算機(jī)程序,該程序包括一些指令,容許在計(jì)算機(jī)系統(tǒng)加載和執(zhí)行該程序時(shí)應(yīng)用如上文中簡(jiǎn)述的安全保護(hù)方法。
本發(fā)明還力求得到一種包括應(yīng)用如上文中簡(jiǎn)述的安全保護(hù)方法的裝置的、被安全保護(hù)了的電子實(shí)體及一個(gè)微電路卡。
信息載體、計(jì)算機(jī)程序、和微電路卡專有的優(yōu)點(diǎn)和特征與上文中關(guān)于根據(jù)本發(fā)明的安全保護(hù)方法所敘述的那些相同,在此將不提醒了。


一閱讀隨后對(duì)特殊實(shí)施方式的描述,本發(fā)明的其它方面和優(yōu)點(diǎn)將更清晰地顯現(xiàn)出來,該描述僅僅是作為非限制性的例子給出,并參照附錄A至E,這些附錄包括五個(gè)被按照本發(fā)明安全保護(hù)了的計(jì)算機(jī)程序的例子。
這些程序用C語言和80c51匯編語言編寫。為了便于描述,每一行前面都有一個(gè)被包含在字符串“/*”和“*/”之間的注釋。
對(duì)一個(gè)最佳實(shí)施方式下的、根據(jù)本發(fā)明的微電路卡的描述將參照?qǐng)D1實(shí)施。
具體實(shí)施例方式
附錄A包含一個(gè)計(jì)算機(jī)程序的、被編為/*a1*/至/*a33*/的33行指令,該計(jì)算機(jī)程序的執(zhí)行被一個(gè)根據(jù)在最佳實(shí)施方式下的本發(fā)明的安全保護(hù)方法保護(hù)。
確切地說,行/*a1*/并不是一條指令。它象征地表示這樣一個(gè)事實(shí)附錄A除那些用于保護(hù)該程序的安全的指令以外還可能包含一定數(shù)量的指令代替字符串“...”。它表示與本發(fā)明無關(guān)的一組指令。
行/*a2*/包括一條指引語句#pragma asm,向編譯程序表明隨后的指令行是用80c51匯編語言編寫的。
行/*a3*/包括這樣一條指令其執(zhí)行將應(yīng)用把預(yù)定值0(用十六進(jìn)制符號(hào)表示)推入附錄A的程序的指令棧中的步驟。為簡(jiǎn)單起見,在下文中我們將說在行/*a3*/把數(shù)值0入棧。
然后,在行/*a4*/把數(shù)值1入棧。
在此處描述的最佳實(shí)施方式下,預(yù)定值00h和01h分別代表用兩個(gè)八位字節(jié)編碼的數(shù)值1(用十六進(jìn)制符號(hào)表示)的高八位字節(jié)和低八位字節(jié)。
行/*a5*/包括一條指引語句#pragma endasm,向編譯程序表明隨后的指令不再是用80c51匯編語言編寫的了,而是用C語言編寫的。
與行/*a1*/相似的行/*a6*/和/*a7*/表示一組與本發(fā)明無關(guān)的指令。
行/*a8*/包括這樣一條指令在這條指令中測(cè)試變量“test”的內(nèi)容是否等于“VRAI(真)”。已經(jīng)知道,如果在執(zhí)行附錄A程序時(shí)這樣的測(cè)試成立,那么處理器將執(zhí)行指令/*a9*/至/*a23*/,作為對(duì)行/*a8*/的測(cè)試的響應(yīng)。
否則,它將直接執(zhí)行行/*a24*/的指令。
行/*a9*/與前述的行/*a2*/相同。
行/*a10*/和/*a11*/與曾經(jīng)描述過的行/*a3*/和/*a4*/相似。它們?nèi)菰S把用兩個(gè)八位字節(jié)編碼的數(shù)值1(用十六進(jìn)制符號(hào)表示)分兩次入棧。
行/*a12*/與前述的行/*a5*/相同。
與前述的行/*a1*/相似的行/*a13*/和/*a14*/表示一組與本發(fā)明無關(guān)的指令。只要在行/*a14*/結(jié)束時(shí)使指令棧處于指令/*a13*/之前的狀態(tài),這些指令當(dāng)然可以操作指令棧。
行/*a15*/與前述的行/*a2*/相同。
行/*a16*/包含這樣一條指令其執(zhí)行實(shí)施一個(gè)指令棧出棧的步驟,出棧的數(shù)值被存儲(chǔ)在寄存器A中。為簡(jiǎn)化起見,下文中我們將說在行/*a16*/出棧入寄存器A。
因而,在指令/*a16*/的結(jié)束時(shí),寄存器A存儲(chǔ)著最后入棧的數(shù)值,這是由于棧按照LIFO的機(jī)制運(yùn)行。
行/*a17*/包含一條容許將寄存器A的內(nèi)容與數(shù)值02H比較的指令。正常情況下,如果程序在其自從行/*a11*/的指令末的執(zhí)行期間沒有遭受到攻擊的話,寄存器A的內(nèi)容就包含著在行/*a11*/的指令期間入棧的數(shù)值02H。
因此,行/*a16*/容許按照本發(fā)明檢測(cè)一個(gè)執(zhí)行異常。
如果在行/*a17*/的比較步驟中發(fā)現(xiàn)寄存器A的數(shù)值不等于數(shù)值02H,附錄A的程序就在行/*a18*/的指令期間分支到“異常”的地址。
在此處描述的實(shí)施方式下,該“異?!钡牡刂肥歉鶕?jù)本發(fā)明的安全保護(hù)方法的異常處理步驟的地址。在實(shí)踐中,“異?!钡牡刂肥且粋€(gè)直接可以由處理器解釋的、用十六進(jìn)制符號(hào)表示的地址。
反之,如果在行/*a17*/的比較步驟中發(fā)現(xiàn)寄存器A存儲(chǔ)著數(shù)值02H,附件A的程序就執(zhí)行行/*a19*/的指令。
行/*a19*/至/*a21*/與前述的行/*a16*/至行/*a18*/相似— 在行/*a18*/處出棧入寄存器A;— 在行/*a20*/處比較寄存器A與數(shù)值00H,數(shù)值00H對(duì)應(yīng)于在行/*a10*/處入棧的預(yù)定值;和— 如果寄存器A在執(zhí)行行/*a20*/的指令時(shí)不包含數(shù)值00H,那么在行/*a21*/的指令期間分支轉(zhuǎn)移至“異?!钡牡刂贰?br> 反之,如果寄存器A包含數(shù)值00H,程序執(zhí)行與前述的行/*a5*/相同的行/*a22*/的指令。
與前述的行/*a1*/相似的行/*a24*/和/*a25*/表示一組與本發(fā)明無關(guān)的指令。
行/*a26*/至/*a33*/與前述的行/*a15*/至行/*a22*/相似它們包括出棧步驟/*a28*/和/*a30*/,這些步驟容許如果棧被破壞了而且就在執(zhí)行行/*a27*/之前該棧不包含分別在行/*a4*/和/*a3*/入棧的預(yù)定值01H和00H,就檢測(cè)出程序的一個(gè)執(zhí)行異常。
綜上所述,分別由行/*a6*/至行/*a25*/和行/*a13*/至行/*a14*/構(gòu)成的兩個(gè)指令子集被安全保護(hù)了。
由行/*a6*/和行/*a25*/構(gòu)成的指令子集由于如下步驟而被安全保護(hù)— 用兩個(gè)八位字節(jié)編碼的預(yù)定值1入棧(行/*a3/和/*a4*/)的步驟;和— 行/*a27*/和行/*a30*/的出棧步驟。
同樣,由行/*a13*/和行/*a14*/構(gòu)成的指令子集由于如下步驟而被安全保護(hù)— 用兩個(gè)八位字節(jié)編碼的預(yù)定值2入棧(行/*a10/和/*a11*/)的步驟;和— 行/*a16*/和行/*a19*/的出棧步驟。
這種實(shí)施絕不是限制性的,預(yù)定值1和2也可以是相同的或隨機(jī)地選擇。
附錄B包含一個(gè)計(jì)算機(jī)程序的、被編為/*b1*/至/*b28*/的28行指令,該計(jì)算機(jī)程序的執(zhí)行被一個(gè)根據(jù)在最佳實(shí)施方式下的本發(fā)明的安全保護(hù)方法保護(hù)。
行/*b1*/和/*b2*/構(gòu)成由C語言編寫的函數(shù)“function”的聲明的前兩行,該函數(shù)既不包含輸入?yún)?shù)也不包含返回值。行/*b11*/包含該函數(shù)的聲明的最后一條指令。
與前文中參照附錄A描述的行/*a1*/相似的行/*b3*/表示與本發(fā)明無關(guān)的一組指令。
行/*b4*/與前文中參照附錄A描述的行/*a2*/相同。
在行/*b5*/和/*b6*/的指令中,分兩次實(shí)施將一個(gè)用兩個(gè)八位字節(jié)編碼的預(yù)定值入棧的步驟,在該最佳實(shí)施方式下,該預(yù)定值是一個(gè)異常處理函數(shù)OS_killcard的地址。在實(shí)踐中,“OS_killcard”的地址是一個(gè)可以由處理器直接解釋的、用十六進(jìn)制符號(hào)表示的地址。
例如,在微電路卡中使用安全保護(hù)方法的情況下,函數(shù)OS_killcard可以通過破壞卡的操作系統(tǒng)來禁止卡的運(yùn)行。
行/*b7*/與前文中參照附錄A描述的行/*a5*/相同。
與前文中參照附錄A描述的行/*a1*/相似的行/*b8*/表示與本發(fā)明無關(guān)的一組指令。
行/*b9*/包含一條調(diào)用一個(gè)關(guān)鍵函數(shù)“fonction_critique”的指令,該指令的代碼將被參照行/*b12*/至/*b28*/描述。
已經(jīng)知道,調(diào)用一個(gè)子程序自動(dòng)導(dǎo)致該子程序的返回地址入指令棧。該返回地址由兩個(gè)八位字節(jié)編碼,因而占用棧的兩個(gè)寄存器。在此處描述的例子中,該地址與行/*b10*/的指令的地址相對(duì)應(yīng),該行應(yīng)該在函數(shù)“fonction_critique”返回時(shí)被執(zhí)行。
一方面,行/*b12*/和/*b13*/,及另一方面,行/*b28*/,構(gòu)成函數(shù)“fonction_critique”的聲明的前兩行和最后一行,該函數(shù)既不包含輸入?yún)?shù)也不包含返回值。
執(zhí)行行/*b12*/和/*b13*/的指令后,入了指令棧的最后四個(gè)數(shù)值按照時(shí)間順序是— 函數(shù)OS_killcard的地址的高八位字節(jié)(行/*b5*/);— 函數(shù)OS_killcard的地址的低八位字節(jié)(行/*b6*/);— 行/*b10*/的第一條指令的地址的高八位字節(jié);和— 行/*b10*/的第一條指令的地址的低八位字節(jié)。
與前文中參照附錄A描述的行/*a1*/相似的行/*b14*/表示與本發(fā)明無關(guān)的一組指令。
與前文參照附錄A的行/*a13*/和/*a14*/所描述的相同,我們假定這些指令使指令棧處于它在指令/*b14*/之前所處的狀態(tài)。
行/*b15*/與前文中參照附錄A描述的行/*a2*/相同。
在行/*b16*/處,出指令棧入寄存器A,該寄存器A的內(nèi)容接著在步驟/*b17*/被保存到寄存器R7中。
同樣,在行/*b18*/處,再一次出指令棧入寄存器A,寄存器A的內(nèi)容在步驟/*b19*/被保存到寄存器R6中。
因而,根據(jù)前面的描述,在附錄B的程序正常執(zhí)行的情況下,在行/*b19*/的指令執(zhí)行結(jié)束時(shí),寄存器R6和R7分別包含
— 行/*b10*/的第一條指令的地址的高八位字節(jié);和— 行/*b10*/的第一條指令的地址的低八位字節(jié)。
然后,在行/*b20*/和/*b21*/,兩次出指令棧入寄存器A,這在附錄B的程序正常執(zhí)行的情況下就相當(dāng)于在執(zhí)行子程序“fonction_critique”期間從指令棧刪除函數(shù)OS-killcard的用兩個(gè)八位字節(jié)編碼的地址。
在行/*b22*/處,往寄存器A中存入寄存器R6的內(nèi)容,即行/*b10*/的第一指令的高八位字節(jié),這個(gè)值在行/*b23*/的步驟中入指令棧。
同樣地,在行/*b24*/和/*b25*/處將行/*b10*/的第一指令的低八位字節(jié)入棧,該八位字節(jié)被存儲(chǔ)在寄存器R7中。
行/*b26*/與前文中參照附錄A描述的行/*a5*/相同。
與前文中參照附錄A描述的行/*a1*/相似的行/*b27*/表示與本發(fā)明無關(guān)的一組指令。
行/*b28*/是子程序“fonction_critique”的最后一行。已經(jīng)知道,它被一條“RETURN”或“RET”類型的指令翻譯成匯編語言,該指令的執(zhí)行導(dǎo)致程序跳轉(zhuǎn)到指令棧的前兩個(gè)寄存器中存儲(chǔ)的地址。
因而,如果程序在執(zhí)行期間沒有遭受到攻擊,它就轉(zhuǎn)移到行/*b10*/的第一指令,該指令的地址在行/*b23*/和/*b25*/入棧了。
與前文中參照附錄A描述的行/*a1*/相似的行/*b10*/表示與本發(fā)明無關(guān)的一組指令。
行/*b11*/結(jié)束函數(shù)“function”。
綜上所述,在附錄B的特殊實(shí)施方式下,將函數(shù)OS_killcard的地址入棧的步驟在調(diào)用子程序“fonction_critique”之前實(shí)施,而在行/*b20*/和/*b21*/處,在執(zhí)行該子程序期間,該地址被從棧中刪除。
因此,該實(shí)施方式容許控制子程序“fonction_critique”是否確實(shí)被執(zhí)行了。
例如,如果對(duì)該子程序的調(diào)用被干擾過,或者,更通常地,該調(diào)用沒有實(shí)施,那么指令棧將保存著函數(shù)OS_killcard的值,而該值在以后的出棧,例如在一條執(zhí)行返回的命令期間出棧,就導(dǎo)致檢測(cè)出該執(zhí)行異常,以及執(zhí)行異常處理函數(shù)OS_killcard。
附錄C包含一個(gè)計(jì)算機(jī)程序的、被編為/*c1*/至/*c32*/的32行指令,該計(jì)算機(jī)程序的執(zhí)行被一個(gè)根據(jù)在最佳實(shí)施方式下的本發(fā)明的安全保護(hù)方法保護(hù)。
行/*c1*/至/*c11*/與參照附錄B描述的行/*b1*/至/*b11*/相似,唯一的不同之處在于將占用兩個(gè)八位字節(jié)、用十六進(jìn)制編碼的預(yù)定值05F1H,而不是函數(shù)OS_killcard的地址,入指令棧(行/*c5*/和/*c6*/)。
在調(diào)用子程序fonction_critique之前,該入棧操作步驟也被實(shí)施。
在該特殊實(shí)施方式下,該預(yù)定值05F1H表示由行/*c12*/至/*c19*/的指令構(gòu)成的子集。
行/*c12*/至/*c19*/與參照附錄B描述的行/*b12*/至/*b19*/相似。
因此,在附錄C的程序正常執(zhí)行的情況下,在行/*C19*/的指令執(zhí)行結(jié)束時(shí),寄存器的R6和R7分別包含著與函數(shù)“fonction_critique”的返回地址相對(duì)應(yīng)的、行/*c10*/的第一條指令的地址的高八位字節(jié)和低八位字節(jié)。
然后,在行/*c20*/出指令棧入寄存器A,然后,在行/*C21*/該寄存器的內(nèi)容與十六進(jìn)制數(shù)值F1H比較。
正常情況下,如果程序沒有遭受過攻擊,尤其是在調(diào)用函數(shù)“fonction_critique”的時(shí)刻沒有遭受攻擊,那么寄存器A就包含著在行/*c5*/的指令期間入棧的數(shù)值F1H。
因此,根據(jù)本發(fā)明,行/*c20*/的出棧步驟容許檢測(cè)一個(gè)執(zhí)行異常。
如果在行/*c21*/的比較步驟中發(fā)現(xiàn)寄存器A的值不等于F1H,附錄C的程序就在行/*c22*/的指令期間轉(zhuǎn)移到“OS_killcard”的地址。尤其,這種情況發(fā)生在一個(gè)導(dǎo)致未經(jīng)調(diào)用而執(zhí)行函數(shù)“fonction_critique”的通過制造錯(cuò)誤的攻擊結(jié)束時(shí)。
因而,在根據(jù)本發(fā)明的安全保護(hù)方法的這種實(shí)施方式下,如果在指令/*c20*/的出棧步驟中彈出一個(gè)與在指令/*c6*/處入棧的預(yù)定值F1H不同的數(shù)值時(shí),異常處理程序OS_killcard就被應(yīng)用了。
反之,如果在行/*c21*/的比較步驟中發(fā)現(xiàn)寄存器A存儲(chǔ)著數(shù)值F1H,附錄C的程序就執(zhí)行行/*c23*/的指令。
行/*c23*/至/*c25*/與前述的行/*c20*/至/*c22*/相似— 在行/*c23*/處出棧入寄存器A;— 在行/*c24*/處比較寄存器A與數(shù)值05H,數(shù)值05H是在行/*c5*/處入棧的預(yù)定值;和— 如果在執(zhí)行行/*c25*/的指令的時(shí)刻寄存器A不包含數(shù)值05H,就在行/*c25*/的指令期間轉(zhuǎn)移到“OS_killcard”地址。
反之,如果寄存器A包含數(shù)值05H,程序就執(zhí)行行/*c26*/的指令。
無論怎樣,行/*c20*/和/*c23*/的指令的執(zhí)行會(huì)從執(zhí)行棧中刪除預(yù)定值05F1H。
行/*c26*至/*c29*/與前文中參照附錄B描述的行/*b22*/至/*b25*/相似。
它們?nèi)菰S在執(zhí)行行/*c17*/和/*c19*/的指令時(shí)將存儲(chǔ)在寄存器R6和R7中的數(shù)值入指令棧,即分別為— 行/*c10*/的第一條指令的地址的高八位字節(jié);和— 行/*c10*/的第一條指令的地址的低八位字節(jié)。
行/*c30*至/*c32*/與前文中參照附錄B描述的行/*b26*/至/*b28*/相似。
因而,如果未曾有過攻擊,程序就轉(zhuǎn)移到行/*c10*/的第一指令,而在行/*c27*/和/*c29*/,該指令的地址已經(jīng)入了棧。
與前文中參照附錄A描述的行/*a1*/相似的行/*c10*/表示與本發(fā)明無關(guān)的一組指令,而行/*c11*/則結(jié)束附錄C的函數(shù)“function1”。
在該實(shí)施方式下,數(shù)值05F1H本可以是一個(gè)異常處理函數(shù)的地址。該特殊實(shí)施方式容許加強(qiáng)程序的安全保護(hù),因?yàn)榧词乖趫?zhí)行行/*c20*/至/*c25*/的測(cè)試期間發(fā)生了一次攻擊,也會(huì)通過后來應(yīng)用該異常處理函數(shù)而檢測(cè)到該攻擊。
作為變型,可以使用多個(gè)異常處理函數(shù)的地址,其中的每一個(gè)各是一個(gè)與一組關(guān)鍵指令相關(guān)聯(lián)的預(yù)定值。
附錄D包含一個(gè)計(jì)算機(jī)程序的、被編為/*d1*/至/*d32*/的32行指令,該計(jì)算機(jī)程序的執(zhí)行被一個(gè)根據(jù)在最佳實(shí)施方式下的本發(fā)明的安全保護(hù)方法保護(hù)。
在該特殊實(shí)施方式下,在行/*d4*/處,程序包含一個(gè)對(duì)子程序“fonction_critique”的調(diào)用。
該調(diào)用自動(dòng)導(dǎo)致該子程序的返回地址,即行/*d5*/的指令的地址,入棧。
在子程序“fonction_critique”的行/*d20*/至/*d23*/期間,把指令棧的前幾個(gè)值,即該子程序的用兩個(gè)八位字節(jié)編碼的返回地址,存儲(chǔ)到R6和R7中。
然后,在行/*d24*/和/*d25*/處把預(yù)定值05F1H入棧。
我們將注意到在該實(shí)施方式下,該入棧步驟在執(zhí)行子程序“fonction_critique”期間實(shí)施。
最后,在執(zhí)行行/*d27*/和/*d29*/的指令期間,將寄存器R6和R7,即包含著行/*d5*/的指令的地址的寄存器,的內(nèi)容入棧,如上文所講解的那樣。
因而,附錄D的程序在子程序“fonction_critique”結(jié)束時(shí)轉(zhuǎn)移到行/*d5*/。
在執(zhí)行行/*d5*/的指令之前,指令棧的前兩個(gè)數(shù)值在正常情況下是在行/*d24*/和/*d25*/處入棧的預(yù)定值05H和F1H。
與前文中參照附錄A描述的行/*a1*/相似的行/*d5*/表示與本發(fā)明無關(guān)的一組指令。我們假定這些指令使指令棧處于它在指令/*d5*/之前所處的狀態(tài)。
行/*d7*/至/*d12*/與前文中參照附錄C描述的行/*c20*/至/*c25*/相似— 在行/*d7*/和/*d10*/處出棧入寄存器A;— 在行/*d8*/和/*d11*/處比較寄存器A與預(yù)定值F1H和05H;— 如果在執(zhí)行行/*d9*/(分別地/*d12*/)的指令的時(shí)刻寄存器A不包含數(shù)值F1H(分別地05H),就在指令/*d9*/(分別地/*d12*/)期間轉(zhuǎn)移到“OS_killcard”地址。
因此,例如如果在/*d7*/出棧步驟中,彈出一個(gè)與預(yù)定值F1H不同的值,那么異常處理子程序OS_killcard就被應(yīng)用。
我們將注意到在該實(shí)施方式下,從執(zhí)行棧中刪除預(yù)定值05F1H是在執(zhí)行子程序“fonction_critique”之后被實(shí)施的,而不是在執(zhí)行另一個(gè)子程序期間發(fā)生的一次攻擊之后而被實(shí)施的,該攻擊具有執(zhí)行行/*d6*/至/*d13*/的后果。
因而,這種應(yīng)用容許確信執(zhí)行行/*d6*/至/*d13*/的指令是在執(zhí)行子程序“fonction_critique”之后被實(shí)施的。
行/*d14*/和/*d15*/結(jié)束附錄D的程序。
附錄E包含一個(gè)計(jì)算機(jī)程序的、被編為/*e1*/至/*e28*/的28行指令,該計(jì)算機(jī)程序的執(zhí)行被一個(gè)根據(jù)在最佳實(shí)施方式下的本發(fā)明的安全保護(hù)方法保護(hù)。
行/*e1*/至/*e5*/和行/*e12*/至/*e28*/分別與參照附錄D描述的行/*d1*/至/*d5*/和/*d16*/至/*d32*/相似,唯一的不同之處在于將異常處理函數(shù)OS_killcard的地址,而不是預(yù)定值05F1H,入地址指令棧(行/*e20*/和/*e21*/)。
該入棧步驟還在執(zhí)行子程序“fonction_critique”期間被實(shí)施。
因而,在子程序“fonction_critique”結(jié)束時(shí),附錄E的程序轉(zhuǎn)移到行/*e5*/。
正常情況下,在執(zhí)行行/*e5*/的指令之前,指令棧的前兩個(gè)數(shù)值是函數(shù)OS_killcard的高位地址和低位地址,這些預(yù)定值已經(jīng)在行/*e21*/和/*e21*/處入棧。
在執(zhí)行行/*e7*/和/*e8*/的指令期間,這些值出棧。
該特殊實(shí)施方式容許確信函數(shù)“fonction_critique”確實(shí)是在被調(diào)用之后執(zhí)行的,而不是由于一個(gè)通過制造錯(cuò)誤的攻擊而執(zhí)行。
事實(shí)上,在相反的情況下,在一個(gè)子程序的執(zhí)行返回的必然時(shí)刻,函數(shù)OS_killcard的地址的出棧容許檢測(cè)一個(gè)執(zhí)行異常,尤其是通過應(yīng)用該函數(shù)。
行/*e10*/和/*e11*/結(jié)束附錄E的程序。
圖1表示根據(jù)一種最佳實(shí)施方式下的本發(fā)明的微電路卡100。
為簡(jiǎn)化起見,只有微電路的內(nèi)容被表示出來,并且是以示意的方式表示的。
已經(jīng)知道,根據(jù)本發(fā)明的微電路卡100還包括微電路卡的一些常用的硬件和軟件部件,即尤其是一個(gè)半剛性材料的載體和供電裝置。這里將不對(duì)這些部件作描述。
根據(jù)本發(fā)明的微電路卡100包括一些實(shí)施如前文中參照附錄A至E所描述的安全保護(hù)方法的裝置。
在此處所描述的最佳實(shí)施方式下,這些裝置包括一個(gè)處理器110,尤其,該處理器與一個(gè)EEPROM類型的非易失性存儲(chǔ)器、一個(gè)包含一個(gè)指令棧STACK的隨機(jī)存取存儲(chǔ)器RAM、以及一個(gè)包含一個(gè)操作系統(tǒng)OS的只讀存儲(chǔ)器ROM相連接。
尤其,半易失性存儲(chǔ)器EEPROM包含附錄A至E的各程序,這些程序被處理器100讀,以便執(zhí)行它們。
存儲(chǔ)器EEPROM還包含兩個(gè)子程序“異?!焙汀癘S_killcard”。
在執(zhí)行附錄A至E的程序時(shí),寄存器R6、R7和test被存儲(chǔ)在讀寫存儲(chǔ)器RAM中。
在此處描述的實(shí)施方式中,寄存器A是處理器110的累加器。
權(quán)利要求
1.一種保護(hù)計(jì)算機(jī)程序的執(zhí)行安全的方法,其特征在于它包括-一個(gè)向該程序的一個(gè)指令棧中推入一個(gè)預(yù)定值的步驟;和-一個(gè)從所述棧出棧的步驟,在必要的情況下,該出棧步驟適于容許檢測(cè)所述執(zhí)行的一個(gè)執(zhí)行異常。
2.根據(jù)權(quán)利要求1的安全保護(hù)方法,其特征在于所述入棧步驟和出棧步驟分別與所述程序的至少一個(gè)指令子集的元素相關(guān)聯(lián)。
3.根據(jù)權(quán)利要求2的安全保護(hù)方法,其特征在于所述元素分別是一個(gè)括號(hào)系統(tǒng)中的一個(gè)開括號(hào)和一個(gè)關(guān)括號(hào)。
4.根據(jù)權(quán)利要求2的安全保護(hù)方法,其特征在于所述出棧步驟與所述程序或所述程序的一個(gè)子程序的一條執(zhí)行返回指令相關(guān)聯(lián)。
5.根據(jù)權(quán)利要求1至4中任意一項(xiàng)的安全保護(hù)方法,其特征在于所述程序由一種編程語言編寫,該語言包含一個(gè)第一指令,該第一指令的執(zhí)行實(shí)施所述入棧步驟;和/或一個(gè)第二指令,該第二指令的執(zhí)行實(shí)施所述出棧步驟。
6.根據(jù)權(quán)利要求5的安全保護(hù)方法,其特征在于第二指令結(jié)束所述程序或所述程序的一個(gè)子程序。
7.根據(jù)權(quán)利要求1至6中任意一項(xiàng)的安全保護(hù)方法,其特征在于所述預(yù)定值代表所述程序的一個(gè)關(guān)鍵指令子集。
8.根據(jù)權(quán)利要求1至7中任意一項(xiàng)的安全保護(hù)方法,其特征在于它包括一個(gè)如果在所述出棧步驟中出棧的值不同于所述預(yù)定值就執(zhí)行的異常處理步驟。
9.根據(jù)權(quán)利要求1至8中任意一項(xiàng)的安全保護(hù)方法,其中所述程序包含至少一個(gè)對(duì)一個(gè)子程序的調(diào)用,其特征在于所述入棧步驟在所述調(diào)用之前實(shí)施;和在于在所述子程序執(zhí)行期間,從所述棧中刪除所述預(yù)定值。
10.根據(jù)權(quán)利要求9的安全保護(hù)方法,其特征在于所述預(yù)定值是一個(gè)異常處理函數(shù)的地址。
11.根據(jù)權(quán)利要求1至8中任意一項(xiàng)的安全保護(hù)方法,其中所述程序包含至少一個(gè)對(duì)一個(gè)子程序的調(diào)用,其特征在于所述入棧步驟在執(zhí)行所述子程序期間實(shí)施;和在于在執(zhí)行所述子程序之后,從所述棧中刪除所述預(yù)定值。
12.根據(jù)權(quán)利要求11的安全保護(hù)方法,其特征在于所述預(yù)定值是一個(gè)異常處理函數(shù)的地址。
13.一種計(jì)算機(jī)系統(tǒng)可讀的、可能完全或部分可拆卸的信息載體,尤其是CD-ROM或磁載體,例如硬盤或軟盤,或者例如電信號(hào)或光信號(hào)的可以傳輸?shù)妮d體,其特征在于它包括一個(gè)計(jì)算機(jī)程序的一些指令,容許在計(jì)算機(jī)系統(tǒng)加載和執(zhí)行該程序時(shí)實(shí)施根據(jù)權(quán)利要求1至12中任意一項(xiàng)所述的安全保護(hù)方法。
14.一種存儲(chǔ)在一個(gè)信息載體上的計(jì)算機(jī)程序,所述程序包括一些指令,容許在計(jì)算機(jī)系統(tǒng)加載和執(zhí)行該程序時(shí)實(shí)施根據(jù)權(quán)利要求1至12中任意一項(xiàng)所述的安全保護(hù)方法。
15.一種被安全保護(hù)了的電子實(shí)體,其特征在于它包括一些實(shí)施根據(jù)權(quán)利要求1至12中任意一項(xiàng)所述的安全保護(hù)方法的裝置。
16.根據(jù)權(quán)利要求15的電子實(shí)體,其特征在于它是一個(gè)微電路卡。
全文摘要
本發(fā)明涉及保護(hù)計(jì)算機(jī)程序執(zhí)行安全的方法,包括一個(gè)向該程序的一個(gè)指令棧中推入一個(gè)預(yù)定值的步驟;和一個(gè)從該棧出棧的步驟,在必要的情況下,該出棧步驟適于容許檢測(cè)一個(gè)執(zhí)行異常。
文檔編號(hào)G06F21/54GK1823317SQ200480019877
公開日2006年8月23日 申請(qǐng)日期2004年7月6日 優(yōu)先權(quán)日2003年7月11日
發(fā)明者簡(jiǎn)-博納德·費(fèi)希爾, 休格斯·T.·D.·拉克勞伊 申請(qǐng)人:奧貝蒂爾卡系統(tǒng)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1