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

用于監(jiān)控程序流程的方法

文檔序號(hào):6493931閱讀:224來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):用于監(jiān)控程序流程的方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)程序安全領(lǐng)域,尤其是用于在一段計(jì)算機(jī)程序的執(zhí)行中檢測(cè)不可接受步驟的一種方法和設(shè)備,其中該程序能夠用一種低級(jí)或者高級(jí)語(yǔ)言編寫(xiě)。
在一段用低級(jí)語(yǔ)言編寫(xiě)的程序中,依據(jù)一種結(jié)構(gòu)非常接近于那些實(shí)際由計(jì)算機(jī)處理器部分執(zhí)行的指令的結(jié)構(gòu)來(lái)編制命令。該程序在能夠被執(zhí)行之前僅僅需要進(jìn)行編譯。低級(jí)語(yǔ)言,通稱(chēng)為機(jī)器代碼,特別用于編程微處理器或者微控制器。微控制器是僅僅能夠執(zhí)行少量特定指令的處理器。特別地,它們用于裝備智能卡(銀行信用卡、電話(huà)卡、提供服務(wù)接入的卡,等等)以及用于控制工業(yè)或者家庭裝置。
在一段用高級(jí)語(yǔ)言編寫(xiě)的程序中,命令具有一個(gè)接近于自然語(yǔ)言的結(jié)構(gòu),但另一方面更遠(yuǎn)離了處理器所使用的結(jié)構(gòu)。以這樣的語(yǔ)言寫(xiě)成的命令在它們能夠以指令形式被處理器執(zhí)行之前,必須首先進(jìn)行解釋?zhuān)簿褪钦f(shuō)要被轉(zhuǎn)換為機(jī)器代碼命令。
這樣任何計(jì)算機(jī)程序都會(huì)產(chǎn)生一系列適于它用于的處理器、微處理器或者微控制器的指令。
通常,一段程序的指令由一個(gè)處理器以一個(gè)指令計(jì)數(shù)器所控制的次序執(zhí)行,如將結(jié)合附

圖1簡(jiǎn)要描述的那樣。
一段程序的編譯指令以連續(xù)的指令塊Inst.1、Inst.2、Inst.3、……、Inst.n(其中n是一個(gè)整數(shù))為單位、以代碼或者微碼的形式裝載到一個(gè)指令寄存器2中。在這個(gè)寄存器2中,每條指令都由一個(gè)特定地址進(jìn)行標(biāo)識(shí)。在該例子中,這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n的地址分別被指定為Ad.1、Ad.2、Ad.3、……、Ad.n。這些指令從指令寄存器2中讀取出來(lái)并且被連續(xù)地裝載到處理器4里以便在一個(gè)指令計(jì)數(shù)器6的控制下在那兒執(zhí)行,其中該指令計(jì)數(shù)器本身由處理器4控制。為了這個(gè)目的,該指令計(jì)數(shù)器6具有一個(gè)地址指針8,用來(lái)指示寄存器2的地址Ad.1、……、Ad.n,而在一個(gè)指令序列的執(zhí)行期間必須從該寄存器2中讀取要載入到處理器4中的指令。指針8的位置相對(duì)于指令寄存器2中的地址,因此會(huì)隨著這些指令的執(zhí)行而改變。
在圖1描繪的例子中,在寄存器2中的這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n必須從第一條指令I(lǐng)nst.1到第n條指令I(lǐng)nst.n連續(xù)地執(zhí)行,即以一種線(xiàn)性方式執(zhí)行。這樣指令計(jì)數(shù)器6的指針8最初指定寄存器2的地址為Ad.1,而且相應(yīng)指令I(lǐng)nst.1的數(shù)據(jù)10-1被載入到處理器4中。當(dāng)處理器4命令指令計(jì)數(shù)器6提供下一條指令(在這種情況下是Inst.2)時(shí),所述計(jì)數(shù)器將指針8的位置增加一個(gè)地址更換單元以便指定地址Ad.2。重復(fù)這個(gè)過(guò)程,并且當(dāng)指針8指定地址Ad.n以便載入最后一條指令I(lǐng)nst.n的數(shù)據(jù)10-n(虛線(xiàn))時(shí),結(jié)束這個(gè)過(guò)程。
以一種線(xiàn)性方式執(zhí)行的一系列指令不包含任何“跳轉(zhuǎn)”,“跳轉(zhuǎn)”脫離了指針8關(guān)于連續(xù)地址的順序增長(zhǎng)。這就是這種情況,例如,以微碼形式的指令序列如下所示lda ttxamulbset 3,tsta n換句話(huà)說(shuō),這個(gè)序列將以一種線(xiàn)性方式執(zhí)行,當(dāng)從一條指令轉(zhuǎn)移到另一條指令時(shí),指令計(jì)數(shù)器6增加一個(gè)地址更換單元。
然而,一段程序的執(zhí)行需要跳轉(zhuǎn)到位于寄存器2中存在的指令線(xiàn)性序列之外的指令,這是正常的。這樣的跳轉(zhuǎn)能夠由一條用于載入位于該序列之外一個(gè)地址上的數(shù)據(jù)的指令產(chǎn)生,或者是由一條稱(chēng)為開(kāi)關(guān)指令、用于條件執(zhí)行隨后命令的指令產(chǎn)生。
一條導(dǎo)致跳轉(zhuǎn)的指令使得下面這個(gè)過(guò)程變得必要即在指令計(jì)數(shù)器6處,確定在這個(gè)跳轉(zhuǎn)之后的下一條指令在寄存器2中的地址,并且將指針8定位到這個(gè)地址以便使位于那兒的指令或者數(shù)據(jù)被載入到處理器2中。
舉例來(lái)說(shuō),序列l(wèi)datxabra label;jumpmul
bset 3,tsta nlabel rts將導(dǎo)致一個(gè)在對(duì)應(yīng)于命令“jump”的代碼位置的新值載入到指令計(jì)數(shù)器6中。
這種在命令下能夠跳轉(zhuǎn)到一個(gè)順序系列地址之外的地址的事實(shí)會(huì)不幸地引起程序中不可接受的步驟。在程序中這樣不可接受的步驟可以由該程序設(shè)備一個(gè)意外的誤操作產(chǎn)生。然而,它也可以由一個(gè)旨在使程序設(shè)備功能偏離它要求功能的惡意操作產(chǎn)生。例如,在智能卡的情況下,通過(guò)創(chuàng)建或者修改跳轉(zhuǎn)和/或開(kāi)關(guān)指令來(lái)修改微處理器的程序編制,可以使載入錯(cuò)誤數(shù)據(jù)(增加用一個(gè)銀行或者電話(huà)卡授權(quán)的信貸,對(duì)訪問(wèn)某些服務(wù)的錯(cuò)誤授權(quán),等等)、或者恢復(fù)保存在存儲(chǔ)器中的機(jī)密數(shù)據(jù)(存取碼,關(guān)于該卡持有人的個(gè)人信息,等等)成為可能。
這是因?yàn)?,即使?dāng)程序以一種固定的方式記錄在一個(gè)半導(dǎo)體芯片上時(shí),仍然有可能利用用于探測(cè)和測(cè)試組件的當(dāng)前技術(shù)、使用具有焦點(diǎn)離子束或者FIB的工作站在該芯片的表面上(或者甚至在其中的低層上)創(chuàng)建探測(cè)觸點(diǎn)。
這些探測(cè)點(diǎn)一旦被創(chuàng)建了,就使得使用專(zhuān)用的工作臺(tái)、英語(yǔ)術(shù)語(yǔ)也稱(chēng)為“Probe station”放置探測(cè)針成為可能,這允許連續(xù)地讀取一位(以及監(jiān)控它隨時(shí)間的變化)或者對(duì)其值進(jìn)行一個(gè)外部修改。
特別地,在指令計(jì)數(shù)器6寄存器上放置觸點(diǎn),使得從外部載入當(dāng)前正被執(zhí)行的寄存器中值以及導(dǎo)致一個(gè)不是由程序設(shè)計(jì)員提供的轉(zhuǎn)換成為可能。如上所述,這樣的一個(gè)跳轉(zhuǎn)自然會(huì)對(duì)應(yīng)用程序安全產(chǎn)生有害的后果,例如當(dāng)產(chǎn)生不完全計(jì)算時(shí)會(huì)導(dǎo)致保密數(shù)據(jù)的泄露。
還存在更基本、但是確信度較小的方法導(dǎo)致程序運(yùn)行過(guò)程中的這種誤操作。R.Anderson在一篇名為“Tamper resistance,a cautionarynote”的文章中給出一個(gè)例子。另一種技術(shù)包括利用故意導(dǎo)致的計(jì)算誤差,以便從一個(gè)智能卡中提取諸如密匙之類(lèi)的數(shù)據(jù)。這種技術(shù)在Boneh、DeMillo和Lipton等人于1996年10月31日在Bellcore Report上發(fā)表的、名為“On the Importance of Checking Computations”的文章中描述過(guò)。
當(dāng)然,當(dāng)要攻擊的程序被解釋而不是被編譯時(shí)也會(huì)發(fā)生相同的現(xiàn)象。例如,如果攻擊者設(shè)法造成在向解釋器指示當(dāng)前指令的解釋器程序指針上的一個(gè)改變,這樣則以Java或者BASIC語(yǔ)言編寫(xiě)的應(yīng)用程序就能夠偏移它的合法使用。
然而,當(dāng)前的計(jì)算機(jī)系統(tǒng)沒(méi)有進(jìn)行特定設(shè)計(jì)以阻止在一個(gè)代碼內(nèi)不受控制的轉(zhuǎn)換。恰恰相反,匯編語(yǔ)言已經(jīng)被特定設(shè)計(jì)以允許程序員的最大自由。舉例來(lái)說(shuō),在C語(yǔ)言中,使用由指針?biāo)饕膱?zhí)行,就有可能在一個(gè)函數(shù)的代碼內(nèi)進(jìn)行跳轉(zhuǎn)。
根據(jù)以一種不可接受的方式運(yùn)行一段程序的這些問(wèn)題,而不論它們是否由不想要的誤操作或者由一個(gè)將該程序偏移其預(yù)期使用的意圖所造成,本發(fā)明提出了一種方法用于在一段計(jì)算機(jī)程序的一系列指令執(zhí)行中監(jiān)控進(jìn)程,該方法包括分析被傳輸?shù)接糜趫?zhí)行正被監(jiān)控的程序的處理器的指令序列,而且利用和所述程序一起記錄的參考數(shù)據(jù)驗(yàn)證這個(gè)分析的結(jié)果。
這樣本發(fā)明使得如下過(guò)程成為可能即檢驗(yàn)在考慮中的指令集里所包含的所有指令是否為了它們的執(zhí)行的確已經(jīng)傳輸?shù)教幚砥髦?。如果情況是這樣的話(huà),就假定如此讀取的指令將也已經(jīng)被執(zhí)行了。
該參考數(shù)據(jù),例如能夠是預(yù)先確定的一個(gè)值,以便只有當(dāng)該指令序列中的所有指令事實(shí)上已經(jīng)在該程序執(zhí)行期間被分析過(guò)了時(shí),才對(duì)應(yīng)于在該監(jiān)控方法期間產(chǎn)生的分析結(jié)果。
更可取地,該分析步驟包含如下子步驟從每條傳輸?shù)教幚砥鞯闹噶钪刑崛∫粋€(gè)數(shù)據(jù)項(xiàng),以及在每個(gè)這樣提取的數(shù)據(jù)項(xiàng)上進(jìn)行預(yù)定計(jì)算;而驗(yàn)證步驟包括將分析的結(jié)果和參考數(shù)據(jù)進(jìn)行比較。
有利地是,驗(yàn)證步驟受到與監(jiān)控裝置有關(guān)的一個(gè)寄存器中包含的值和該參考值的一個(gè)硬接線(xiàn)比較的影響,其中后者能夠以一種硬接線(xiàn)方式輸入到該程序中,并在構(gòu)成正被監(jiān)控程序的代碼掩蔽期間被一次固定(例如在一個(gè)ROM類(lèi)型的固定存儲(chǔ)器中)。
更可取地是,該驗(yàn)證由一條位于該程序中一個(gè)預(yù)定位置上的指令引起,這條指令包含上述的參考數(shù)據(jù)。
有利地是,當(dāng)要被監(jiān)控的指令集中的指令處于一個(gè)值、十六進(jìn)制或者十進(jìn)制時(shí),在上述分析期間這些指令被當(dāng)作簡(jiǎn)單的數(shù)字值對(duì)待。
這樣用于監(jiān)控一段計(jì)算機(jī)程序的一個(gè)指令序列執(zhí)行的全程方法能夠包含以下步驟
-在該程序的準(zhǔn)備期間-在該程序一個(gè)指令序列中在至少一個(gè)預(yù)定位置上包含一個(gè)參考值,該值是依據(jù)適用于每條要被監(jiān)控指令中的可識(shí)別數(shù)據(jù)的一個(gè)給定規(guī)則確定的;以及-在要被監(jiān)控的部分程序的執(zhí)行期間-獲得在每條執(zhí)行指令中的上述可識(shí)別數(shù)據(jù);-對(duì)這樣獲得的上述可識(shí)別數(shù)據(jù)應(yīng)用上述給定規(guī)則,以便建立一個(gè)驗(yàn)證值;以及-驗(yàn)證這個(gè)驗(yàn)證值其事實(shí)上相當(dāng)于和程序一起記錄的參考值。
在本發(fā)明的一個(gè)最佳實(shí)施例中,當(dāng)檢測(cè)到該驗(yàn)證值不等于參考值時(shí),為中斷該程序的運(yùn)行預(yù)先采取了措施。如果檢測(cè)到在驗(yàn)證值和參考值之間的這種不一致性達(dá)到了一個(gè)預(yù)定次數(shù),則這個(gè)中斷能夠伴隨著對(duì)將來(lái)包含被監(jiān)控計(jì)算機(jī)程序的設(shè)備使用的無(wú)效作用。
有利地是,要被監(jiān)控的指令集在為其而設(shè)的運(yùn)行中不包括跳轉(zhuǎn),以便期望它包含的所有指令在所有設(shè)想的情況下執(zhí)行。
當(dāng)要被監(jiān)控的程序或者程序的一部分包含了至少一個(gè)跳轉(zhuǎn)時(shí),就有可能為不包含跳轉(zhuǎn)的指令集分別應(yīng)用這個(gè)監(jiān)控方法。
在一條指令取決于正被操作的數(shù)據(jù)產(chǎn)生至少一次跳轉(zhuǎn)的情況下,也就是說(shuō)在條件轉(zhuǎn)換中,有可能分別為在該跳轉(zhuǎn)之前沒(méi)有跳轉(zhuǎn)的一個(gè)指令集和在這個(gè)跳轉(zhuǎn)之后沒(méi)有跳轉(zhuǎn)的至少一個(gè)指令集使用該監(jiān)測(cè)方法。
在這種情況下,能夠想象到,對(duì)于在一個(gè)跳轉(zhuǎn)之前的指令集,為了進(jìn)行旨在獲得這個(gè)指令集驗(yàn)證值的分析,要求該跳轉(zhuǎn)的指令(這條指令一般是一個(gè)切換之前的最后一條指令)要包含在這個(gè)指令集中,這樣在執(zhí)行該轉(zhuǎn)移指令之前,這個(gè)指令集的正確運(yùn)行就能夠得到驗(yàn)證。
有利地是,在該方法前一次實(shí)施期間所獲得的驗(yàn)證值在該方法的每次新實(shí)施中都被刪去了。這個(gè)規(guī)定使得有可能容易地控制對(duì)一段程序中不同指令集、諸如那些由跳轉(zhuǎn)分開(kāi)的指令集的監(jiān)控。特別地,這使得為由跳轉(zhuǎn)分開(kāi)的不同指令集實(shí)施使用相同初始條件驗(yàn)證值計(jì)算的方法成為可能。
在該方法的每次新實(shí)施中,能夠通過(guò)一次簡(jiǎn)單的復(fù)位刪去驗(yàn)證值。這個(gè)值還可以被另一個(gè)預(yù)定的初始值所替代。通過(guò)該被保護(hù)軟件本身就能夠激活這些復(fù)位或初始化操作。
有利地是,作為一系列值中的最后一個(gè)值獲得該驗(yàn)證值,其中該系列值隨著對(duì)該指令集中每一條相應(yīng)指令的分析而連續(xù)改變。這種方法使得包含該監(jiān)控方法運(yùn)行的一個(gè)內(nèi)部狀態(tài)以及跟蹤它的改變成為可能。
更可取地是,允許驗(yàn)證值這種改變的分析方式包括為每條跟隨前一條指令的相應(yīng)指令,對(duì)從正討論指令中提取的值以及在前一條指令上執(zhí)行相同操作獲得的結(jié)果,計(jì)算一個(gè)操作結(jié)果。對(duì)于與第一條要被驗(yàn)證指令相關(guān)的計(jì)算,有可能把操作應(yīng)用到從該第一條指令提取的數(shù)據(jù)以及一個(gè)預(yù)定值(其可能相當(dāng)于重新初始化值或者上述的復(fù)位值)上,在缺少前一個(gè)操作結(jié)果的情況下,這能夠用作一個(gè)“種子”值。
這樣,通過(guò)使用一個(gè)適用于以同樣方式用于從每一條正被討論的指令中提取的數(shù)據(jù)上的遞歸算法,就有可能獲得正確的驗(yàn)證值。此外,能夠容易地選擇該計(jì)算操作,以便只有當(dāng)在計(jì)算期間所有指令的一些數(shù)據(jù)已經(jīng)被考慮過(guò),而且它們已經(jīng)以一個(gè)規(guī)定的次序考慮過(guò)時(shí),才能獲得一個(gè)正確的驗(yàn)證值。
依據(jù)在數(shù)據(jù)加密領(lǐng)域本來(lái)已知的技術(shù),這種計(jì)算操作能夠是運(yùn)用一個(gè)散列函數(shù),諸如由聯(lián)邦散列標(biāo)準(zhǔn)確定的SHA-1散列函數(shù)。在這種情況下,通過(guò)加密散列在最后執(zhí)行的初始化之后執(zhí)行的所有操作代碼(被認(rèn)為是數(shù)字值)以及地址,有可能在該監(jiān)測(cè)方法的運(yùn)行中實(shí)現(xiàn)上述的內(nèi)部變化。
在一個(gè)變體中,有可能通過(guò)對(duì)在最后進(jìn)行的初始化之后執(zhí)行的所有操作代碼和地址進(jìn)行一個(gè)冗余度計(jì)算,而不一定是加密計(jì)算,來(lái)改變?cè)擈?yàn)證值。舉例來(lái)說(shuō),有可能使用CRC(英語(yǔ)稱(chēng)為cyclic redundancycheck)類(lèi)型的算法。
當(dāng)包含在相應(yīng)指令中的數(shù)據(jù)是在其執(zhí)行期間獲得時(shí),利用本發(fā)明就有可能通過(guò)中間值的計(jì)算獲得比較值。利用這個(gè)方法,就沒(méi)有必要保存每個(gè)從正被討論指令集的指令中提取的值。這是因?yàn)?,在一次中間值計(jì)算的最后,僅僅這個(gè)中間值用于計(jì)算下一個(gè)中間值(或者最后的值,其相當(dāng)于驗(yàn)證值),而且不再考慮有可能產(chǎn)生它的數(shù)據(jù)項(xiàng)。這個(gè)方案使得實(shí)現(xiàn)本發(fā)明的裝置節(jié)省存儲(chǔ)空間成為可能。
作為一個(gè)變體,有可能保存該指令集的指令中包含的每個(gè)數(shù)據(jù)項(xiàng),這些指令被認(rèn)為是僅僅在必要時(shí)、例如在驗(yàn)證步驟中被執(zhí)行并且實(shí)現(xiàn)該驗(yàn)證值的計(jì)算。
本發(fā)明還涉及一種用于監(jiān)控一段計(jì)算機(jī)程序的一系列指令執(zhí)行步驟的設(shè)備,其特征在于它具有用于分析指令序列的裝置,其中該指令序列被傳輸?shù)接糜趫?zhí)行該被監(jiān)控程序的處理器中,以及它還具有用于利用與所述程序一起記錄的參考數(shù)據(jù)驗(yàn)證這個(gè)分析結(jié)果的裝置。
有利地是,根據(jù)本發(fā)明的監(jiān)控裝置包含一個(gè)寄存器用于記錄該驗(yàn)證值計(jì)算中的中間結(jié)果。這個(gè)寄存器能夠適合于僅僅保持最后的當(dāng)前中間結(jié)果。
能夠預(yù)先采取措施,以允許在當(dāng)前正被執(zhí)行程序的命令下記錄一個(gè)預(yù)定值或者一個(gè)復(fù)位。這樣,該程序能夠在該監(jiān)控方法的每次新實(shí)施時(shí)要求關(guān)于該寄存器內(nèi)容的一個(gè)初始條件,例如發(fā)生在該程序中的一次跳轉(zhuǎn)之后。
該監(jiān)控設(shè)備能夠集成到一個(gè)用于執(zhí)行被監(jiān)控程序的設(shè)備中,或者被集成到包含被監(jiān)控程序的被編程設(shè)備中。
本發(fā)明還涉及一種程序執(zhí)行設(shè)備,例如一臺(tái)計(jì)算機(jī),一個(gè)具有微處理器或者微控制器的裝置諸如一個(gè)智能卡閱讀器或者一個(gè)用于讀取以PCMCIA格式記錄在一張卡上的程序的閱讀器,該設(shè)備用于執(zhí)行一段計(jì)算機(jī)程序的一系列指令,其特征在于它具有用于分析傳輸用以執(zhí)行的指令序列的裝置,以及用于驗(yàn)證這個(gè)分析的結(jié)果是否與該程序一起記錄的參考數(shù)據(jù)符合的裝置。
本發(fā)明還涉及一個(gè)程序設(shè)備,用于與上述的程序執(zhí)行設(shè)備一起作用,并且包含一系列指令,其特征在于它還包括依據(jù)所述指令中包含的數(shù)據(jù)預(yù)先確定的參考數(shù)據(jù),以及用于允許對(duì)由上述程序執(zhí)行設(shè)備分析的指令序列進(jìn)行一次驗(yàn)證。
該被編程設(shè)備,例如一個(gè)智能卡或者諸如一個(gè)ABS制動(dòng)系統(tǒng)的機(jī)械控制設(shè)備,能夠在一個(gè)ROM類(lèi)型的固定存儲(chǔ)器中包含被監(jiān)控的程序。
有利地是,參考數(shù)據(jù)在程序代碼屏蔽期間,只此一次以預(yù)先布線(xiàn)值的形式被記錄在該存儲(chǔ)器中。
本發(fā)明還涉及一種對(duì)用于執(zhí)行一段程序、和上述被編程設(shè)備協(xié)同作用的設(shè)備進(jìn)行編程的設(shè)備,其特征在于它包含裝置用于,在該程序的一系列指令的至少一個(gè)預(yù)定位置上,輸入一個(gè)參考值,該參考值依據(jù)一種預(yù)定模式、由在一個(gè)希望其執(zhí)行被監(jiān)控的指令集中的每條指令所包括的數(shù)據(jù)計(jì)算得到。
最后,本發(fā)明還涉及一個(gè)虛擬機(jī)或者解釋器用于解釋關(guān)鍵代碼,其特征在于它實(shí)現(xiàn)了上述用于執(zhí)行這個(gè)關(guān)鍵代碼的監(jiān)控方法。
上述用于監(jiān)控、執(zhí)行一段程序、或者編程的設(shè)備,或者裝備有這樣程序的設(shè)備能夠裝備實(shí)現(xiàn)上述監(jiān)控方法不同的可能可選方面所必需的所有裝置。
舉例來(lái)說(shuō),有可能設(shè)想,在一個(gè)與一個(gè)智能卡相關(guān)的應(yīng)用中,除了增加一個(gè)執(zhí)行一段程序的微處理器之外,還附加一個(gè)硬件部件作為一個(gè)監(jiān)控單元。這個(gè)單元的作用是監(jiān)控任何不是由軟件設(shè)計(jì)師提供的跳轉(zhuǎn)不能夠在執(zhí)行期間發(fā)生。在這個(gè)例子中,該監(jiān)控單元可以由寄存器組成,其中該寄存器的內(nèi)容在任何時(shí)候都構(gòu)成了該監(jiān)控單元的內(nèi)部狀態(tài)。該監(jiān)控單元的一個(gè)特定輸入允許它被重置,這一般是通過(guò)清除該監(jiān)控單元的內(nèi)容來(lái)完成。這個(gè)操作可以在任何時(shí)候由正執(zhí)行的軟件激活,并且能夠,例如,受到在匯編程序中增加一個(gè)新的操作碼(例如“clr us”)的影響或者受到對(duì)保護(hù)組件的存儲(chǔ)器中的一個(gè)數(shù)據(jù)位進(jìn)行操作(例如setb 3,service)的影響。
在這個(gè)示例應(yīng)用中,監(jiān)控單元將它的內(nèi)部狀態(tài)與由保護(hù)軟件提供的一個(gè)數(shù)據(jù)串進(jìn)行比較。例如,這能夠受到在該監(jiān)控單元內(nèi)復(fù)制該值(利用一個(gè)“Ida-sta”循環(huán))的影響,其中所需軟件利用該值來(lái)比較內(nèi)部狀態(tài)。一旦該值的復(fù)制已經(jīng)結(jié)束,該監(jiān)控單元把它與其內(nèi)部狀態(tài)相比較,并且采取以下的動(dòng)作如果該監(jiān)控單元的狀態(tài)等于由該受保護(hù)軟件呈現(xiàn)的值,則正常地繼續(xù)執(zhí)行,否則就停止該程序的執(zhí)行(強(qiáng)迫用戶(hù)重置該卡),有可能通過(guò)預(yù)先批準(zhǔn)一個(gè)在EEPROM類(lèi)型非易失性存儲(chǔ)器中的錯(cuò)誤執(zhí)行計(jì)數(shù)器,在該計(jì)數(shù)器的值超過(guò)一個(gè)合理的極限(例如4)時(shí),影響該卡的確定塊。
該監(jiān)控單元能夠永久地保持從它最后一次復(fù)位之后執(zhí)行的指令代碼和地址的一個(gè)加密散列。
該監(jiān)控機(jī)構(gòu)能夠應(yīng)用于在一個(gè)虛擬機(jī)中的代碼解釋(例如Java“Byte code”類(lèi)型)。編譯程序能夠計(jì)算一部分字節(jié)代碼散列的值,其中該代碼被集成到一個(gè)英語(yǔ)術(shù)語(yǔ)稱(chēng)為產(chǎn)品“class file”(類(lèi)文件)的結(jié)構(gòu)的屬性中,并且添加到英語(yǔ)術(shù)語(yǔ)稱(chēng)為附加“opcodes”(操作碼)的字節(jié)代碼形成碼中,其中該“opcodes”對(duì)應(yīng)于監(jiān)控單元的復(fù)位以及對(duì)應(yīng)于驗(yàn)證操作的調(diào)用。該虛擬機(jī)將替代一個(gè)監(jiān)控單元,并且當(dāng)它遇到驗(yàn)證操作碼時(shí),相對(duì)類(lèi)文件中包含的理論散列值,驗(yàn)證當(dāng)前的散列值。
通過(guò)閱讀以下僅作為舉例而給出的最佳實(shí)施例的描述并結(jié)合附圖,本發(fā)明將更清楚地得到理解,而且其優(yōu)點(diǎn)和特征將更清楚地顯露出來(lái),其中——圖1,已經(jīng)介紹過(guò)了,是一個(gè)為了說(shuō)明一個(gè)指令計(jì)數(shù)器在一段程序執(zhí)行中作用的簡(jiǎn)化框圖;——圖2是一個(gè)程序執(zhí)行設(shè)備的簡(jiǎn)化框圖,旨在說(shuō)明根據(jù)本發(fā)明第一實(shí)施例的一個(gè)監(jiān)控單元的操作原理;——圖3是依據(jù)本發(fā)明的監(jiān)控方法的流程圖;——圖4是依據(jù)本發(fā)明的監(jiān)控方法的一個(gè)變體的流程圖;——圖5是一個(gè)程序執(zhí)行設(shè)備的簡(jiǎn)化框圖,旨在說(shuō)明依據(jù)本發(fā)明第二實(shí)施例的一個(gè)監(jiān)控單元的操作原理;——圖6是依據(jù)本發(fā)明、適于第二實(shí)施例的監(jiān)控方法的流程圖;——圖7示意性地描述了具有轉(zhuǎn)換的一段程序的指令集,該指令集還包含專(zhuān)用于該監(jiān)控方法的指令。
本發(fā)明的原理將結(jié)合圖2的框圖加以說(shuō)明,其中那些作用類(lèi)似于圖1中的那些方框的方框具有相同的標(biāo)記,而且為簡(jiǎn)明起見(jiàn)將不再進(jìn)行描述。
圖2描述了一個(gè)程序執(zhí)行設(shè)備20在廣義上的基本元件。它能夠是一臺(tái)用于執(zhí)行一段用高級(jí)語(yǔ)言編制的程序的計(jì)算機(jī)、一個(gè)微處理器或一個(gè)微控制器,后者在用低級(jí)語(yǔ)言編制的程序下運(yùn)行。舉例來(lái)說(shuō),執(zhí)行設(shè)備20能夠是一個(gè)用于管理銀行業(yè)務(wù)或電話(huà)交易或者其它服務(wù)的智能卡閱讀器。然后要被驗(yàn)證的程序被包含在該智能卡中。
為了使以下的描述更為具體,假定程序執(zhí)行設(shè)備20基于一個(gè)微控制器型的處理器4。
該處理器4執(zhí)行以微碼形式保存在一個(gè)指令寄存器2中的一部分程序。這個(gè)程序部分的操作部分包含一個(gè)n條指令序列(其中n是一個(gè)大于1的整數(shù)),分別用Inst.1、Inst.2、Inst.3、……、Inst.n表示。構(gòu)成這些指令的這些微碼處于數(shù)字值形式,它們能夠是十進(jìn)制或者十六進(jìn)制。
因此,能夠以?xún)煞N不同的方式考慮這樣的一個(gè)值,分別帶有一個(gè)數(shù)據(jù)項(xiàng)首先,作為一條指令,它表示該處理器(在這種情況下它將是指定的“代碼值”);其次,作為一個(gè)簡(jiǎn)單的數(shù)字值能夠進(jìn)行算術(shù)運(yùn)算處理(在這種情況下它將是指定的“數(shù)字值”Vinst.)。例如,第一條指令I(lǐng)nst.1等于40.這個(gè)數(shù)字是一個(gè)相當(dāng)于一條由該處理器識(shí)別的指令的代碼,但是它與該數(shù)字值40有相同的二進(jìn)制結(jié)構(gòu)。
在這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n中沒(méi)有指令命令跳轉(zhuǎn)到在這些指令執(zhí)行的線(xiàn)性序列之外的其它指令。因此這個(gè)程序部分的正常和預(yù)期運(yùn)行必然需要每一條指令連續(xù)地執(zhí)行,從指令I(lǐng)nst.1開(kāi)始并以指令I(lǐng)nst.n結(jié)束。這樣,當(dāng)指令寄存器2中的指令I(lǐng)nst.1到Inst.n被載入到處理器4中時(shí),指令計(jì)數(shù)器6(已經(jīng)描述過(guò)了)將它的指針8連續(xù)地定位在每一條指令的地址上。
根據(jù)本發(fā)明,程序執(zhí)行設(shè)備20有一個(gè)監(jiān)控單元22,它使得驗(yàn)證每一條指令I(lǐng)nst.1到Inst.n為了它們的執(zhí)行的確已經(jīng)被載入到處理器4中成為可能。它被功能連接在指令寄存器2和處理器4之間。因此,所有這些從指令寄存器2讀取的指令在到達(dá)處理器4之前都要經(jīng)過(guò)監(jiān)控單元2。
在這個(gè)實(shí)例中,將監(jiān)控單元22描述成被集成到程序執(zhí)行設(shè)備20中。然而,當(dāng)例如監(jiān)控單元22被集成到一個(gè)在存儲(chǔ)器中包含要監(jiān)控的程序的智能卡中時(shí),不用改變下面將要描述的這些原則,它同樣能夠和包含要監(jiān)控程序的設(shè)備結(jié)合起來(lái)。
如以下更為詳細(xì)的解釋那樣,監(jiān)控單元22有一個(gè)寄存器24用于暫時(shí)地存儲(chǔ)一個(gè)在指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n中包含的數(shù)據(jù)項(xiàng),以及一個(gè)計(jì)算器26用于在這個(gè)數(shù)據(jù)項(xiàng)上執(zhí)行運(yùn)算。
監(jiān)控單元的使用要求增加二條新指令到該程序的n條指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n中。第一條監(jiān)控指令I(lǐng)nst.0放置在該程序的第一條指令I(lǐng)nst.1之前,第二條監(jiān)控指令I(lǐng)nst.n+1放置在該程序的最后一條指令I(lǐng)nst.n之后。
在該程序n條指令的執(zhí)行期間,對(duì)指令計(jì)數(shù)器6進(jìn)行初始控制從而將它的指針8定位在第一條監(jiān)控指令I(lǐng)nst.0的地址上。這條指令指示監(jiān)控單元初始化一個(gè)包含在其寄存器24中的散列值VH。在該實(shí)例中,指令I(lǐng)nst.0簡(jiǎn)單地指示寄存器2使得值VH=0。它沒(méi)有被傳送到處理器4。
接下來(lái),程序執(zhí)行設(shè)備20進(jìn)入該程序這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n的正常執(zhí)行階段。從指令寄存器2讀取的每條指令首先被傳送到監(jiān)控單元22,在那兒它被認(rèn)為是一個(gè)數(shù)字值。
每條指令的數(shù)字值由計(jì)算器26進(jìn)行一個(gè)散列算法,諸如用聯(lián)邦散列標(biāo)準(zhǔn)說(shuō)明的SHA-1散列法。與一條指令I(lǐng)nst.i(其中i是一個(gè)從1到n的整數(shù))相關(guān)的散列操作結(jié)果VHi被輸入到寄存器24中。
這個(gè)VHi值用作下一條指令I(lǐng)nst.i+1散列操作的基礎(chǔ)。然后,輸入這樣得到的關(guān)于指令I(lǐng)nst.i+1的散列結(jié)果VHi+1,來(lái)替代先前得到的散列結(jié)果VHi。
為經(jīng)過(guò)監(jiān)控單元22的每一條指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n都繼續(xù)這個(gè)過(guò)程。
當(dāng)執(zhí)行最后一條指令I(lǐng)nst.n時(shí),第二條監(jiān)控指令I(lǐng)nst.n+1被載入到監(jiān)控單元22中。這條指令有兩個(gè)組分一個(gè)參考值Vref和用于計(jì)算器26的一個(gè)命令,用于將這個(gè)參考值Vref與輸入到寄存器24中的最后一個(gè)散列結(jié)果進(jìn)行比較。因此,這個(gè)最后值對(duì)應(yīng)于從指令I(lǐng)nst.n(在該圖中等于36)的數(shù)字值和為前一條指令I(lǐng)nst.n-1得到的散列結(jié)果VHn-1中獲得的散列結(jié)果VHn。
因此,響應(yīng)于第二條監(jiān)控指令I(lǐng)nst.n+1,計(jì)算器26將寄存器22中的值VHn與在這條監(jiān)控指令中指定的參考值Vref進(jìn)行比較。
為了對(duì)應(yīng)于指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n值的連續(xù)散列結(jié)果的預(yù)期值VHn,在該記錄的程序的準(zhǔn)備期間確定該參考值Vref。這個(gè)值Vref能夠預(yù)先通過(guò)一個(gè)與監(jiān)控單元22使用同樣的過(guò)程,使用指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n的連續(xù)散列過(guò)程計(jì)算出來(lái)。
最好是,值Vref被存入到一個(gè)固定存儲(chǔ)器以便使其不致于被一個(gè)惡意行為所修改。
如果當(dāng)執(zhí)行監(jiān)控指令I(lǐng)nst.n+1時(shí),監(jiān)控單元22發(fā)現(xiàn)上述值Vref和VHn相同,則斷定所有這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n為了它們的執(zhí)行的確已經(jīng)傳送給處理器4。
相反,如果監(jiān)控單元22發(fā)現(xiàn)值Vref和VHn不相同,則斷定要么就是不是所有的這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n已經(jīng)由該監(jiān)控單元接收和傳送,要么就是它們沒(méi)有以預(yù)期的順序接收和傳送。在這種情況下,能夠提供一個(gè)動(dòng)作用于警告該程序的用戶(hù)或所有者、或是阻止該程序繼續(xù)運(yùn)行。在該實(shí)例中,這樣一個(gè)動(dòng)作以一條用于中斷該程序Int的指令形式從監(jiān)控單元22傳送給處理器4。
現(xiàn)在將結(jié)合圖3中描繪的流程圖對(duì)這種通過(guò)圖2裝置實(shí)現(xiàn)的監(jiān)控方法進(jìn)行描述。假定被監(jiān)控的程序或程序部分通過(guò)分別在開(kāi)始和末端包含第一和第二條監(jiān)控指令為這種監(jiān)控方法正確地做好了準(zhǔn)備。
在初始階段,監(jiān)控單元22位于監(jiān)控例程的開(kāi)始處30,其中的第一個(gè)步驟32是等待第一條監(jiān)控指令(Inst.0)。
當(dāng)接收到第一條監(jiān)控指令I(lǐng)nst.0時(shí),監(jiān)控單元22實(shí)施一個(gè)指令計(jì)數(shù)器和寄存器24初始化(通過(guò)復(fù)位)的步驟34。寄存器24的復(fù)位是一種在這個(gè)寄存器中放置一個(gè)“種子”值的方法以便開(kāi)始一個(gè)散列操作序列,這將在隨后加以說(shuō)明。這些操作能夠由第一條監(jiān)控指令直接控制或是簡(jiǎn)單地由與監(jiān)控單元22有關(guān)的例程起動(dòng)。
在這個(gè)第一種情況中,復(fù)位能夠受到在匯編指令中添加一條新操作碼(例如“clr us”)、或是在程序執(zhí)行設(shè)備20的存儲(chǔ)器中操作一個(gè)給定位的影響。這樣的一個(gè)命令能夠是“Setb 3,service”。
在初始化步驟之后,監(jiān)控單元22以一個(gè)單元為單位遞增指令計(jì)數(shù)器(然后將這個(gè)計(jì)數(shù)器設(shè)置為n=1)(步驟36)。
接下來(lái),在監(jiān)控下的該程序或程序部分的第一條指令I(lǐng)nst.1從指令寄存器2中讀取出來(lái)(步驟38)。如上所述,這條指令被監(jiān)控單元22認(rèn)為是一個(gè)允許算術(shù)運(yùn)算的數(shù)字值。在圖2的實(shí)施例中,這個(gè)值是40。
然后該第一條指令I(lǐng)nst.1的數(shù)字值用寄存器24中包含的值進(jìn)行散列操作。就第一條指令來(lái)說(shuō),這個(gè)最后值是初始化值,即0。
眾所周知,在此散列操作本質(zhì)上是使一個(gè)數(shù)學(xué)運(yùn)算符f(VHn-1,Vinst.n)作用于所討論指令n的值上,其中VHn-1是記錄在寄存器24中前一次散列操作的結(jié)果(或者就第一條指令來(lái)說(shuō)是初始化值),而Vinst.n是所討論指令n的數(shù)字值。
然后這個(gè)散列操作的結(jié)果VHn替代前一次的結(jié)果VHn-1記錄在寄存器24中(步驟42)。應(yīng)當(dāng)注意到在每次散列操作中更新寄存器內(nèi)容的過(guò)程使得永久保持自上次初始化以來(lái)執(zhí)行的指令代碼和地址的加密散列成為可能。
在這個(gè)散列操作的結(jié)尾,為了它的執(zhí)行該指令傳送給處理器4(步驟44)。
接下來(lái)監(jiān)控單元22確定被監(jiān)控的程序或程序部分是否包含另一條要執(zhí)行的指令(步驟46)。
因此,該過(guò)程從n到n+1增量執(zhí)行一個(gè)循環(huán)返回B1回到步驟36。然后下一條指令(Inst.2)的值將從指令寄存器2中讀取出來(lái),并以與用于指令I(lǐng)nst.1同樣的方式進(jìn)行散列操作。然而,一方面這次用指令I(lǐng)nst.2的數(shù)字值和在前一個(gè)散列操作期間獲得的結(jié)果進(jìn)行散列,即值VH1(n在這兒等于2),然后它進(jìn)入寄存器24中。
以與用于第一條指令相同的方式進(jìn)行該方法的步驟42到46。這樣,分別為從指令寄存器2中讀取的每一條指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n繼續(xù)步驟組36到46的循環(huán),對(duì)一條指令I(lǐng)nst.i(其中i是一個(gè)從1到n的整數(shù))來(lái)說(shuō),利用寄存器24中的值VHni-1和值Vinst.i進(jìn)行散列。
一旦所有的指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n已經(jīng)由監(jiān)控單元22這樣處理過(guò)了,監(jiān)控單元22就接收在正被監(jiān)控的程序或程序部分的最后一條指令I(lǐng)nst.n之后的第二條監(jiān)控指令I(lǐng)nst.n+1。
這第二條監(jiān)控指令指示監(jiān)控單元22從程序中提取參考值Vref(步驟48),并將寄存器24的內(nèi)容與這個(gè)Vref值進(jìn)行比較(步驟50)。借助于一個(gè)循環(huán)“l(fā)da-sta”能夠影響這個(gè)命令。
應(yīng)當(dāng)說(shuō)明的是通過(guò)執(zhí)行步驟36到46的連續(xù)循環(huán),目前包含在寄存器中的值是用前一次散列的結(jié)果VHn-1和指令n的數(shù)字值(在圖2的實(shí)例中等于36)實(shí)現(xiàn)的散列結(jié)果VHn。
參考值Vref是在該程序的準(zhǔn)備期間利用散列操作的知識(shí)預(yù)先確定的,以便使其等于監(jiān)控單元22應(yīng)該返回的值VHn,如果所有這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n的確被傳送到處理器4的話(huà)。
因此,比較的結(jié)果使得核對(duì)這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n是否已經(jīng)正確打開(kāi)成為可能如果VHn=Vref(步驟52),假定所有這些指令實(shí)際上已經(jīng)被傳送到處理器4了。然后,就包含這些指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n的程序或程序部分來(lái)說(shuō),這個(gè)監(jiān)控操作就終止了。
然后該監(jiān)控過(guò)程返回到起始階段30等待新的第一條監(jiān)控指令。
另一方面,如果比較步驟50顯示出這些比較值間不相同,則假定要么不是所有的指令I(lǐng)nst.1、Inst.2、Inst.3、……、Inst.n都已經(jīng)被傳送到處理器4,要么是沒(méi)有以正確的次序進(jìn)行傳送(步驟54)。這是因?yàn)橐粋€(gè)連續(xù)散列操作的結(jié)果取決于它們的執(zhí)行次序。
在這種情況下,監(jiān)控單元22要求一個(gè)動(dòng)作(步驟56),諸如中斷該程序和/或記錄該程序未正確運(yùn)行的事實(shí)。
現(xiàn)在將結(jié)合圖4的流程圖對(duì)上述監(jiān)控方法的變體進(jìn)行描述。依據(jù)這個(gè)變體,不是在監(jiān)控單元22接收每條新指令期間執(zhí)行一個(gè)散列操作,而是僅僅在第二條監(jiān)控指令接收以后才執(zhí)行所有的散列操作。在圖4的流程圖中,與先前結(jié)合圖3描述的那些步驟相同的步驟帶有相同的標(biāo)記,而且為了簡(jiǎn)明起見(jiàn),將不會(huì)對(duì)它們進(jìn)行描述。
該監(jiān)控方法就步驟30到38來(lái)說(shuō)呈現(xiàn)先前的情況(圖3和4)。在步驟38讀取指令寄存器2中的指令Vinst.n的值之后,監(jiān)控單元22繼續(xù)進(jìn)行這個(gè)值的記錄(步驟39)。這個(gè)記錄能夠發(fā)生在計(jì)算器26的一個(gè)內(nèi)部寄存器中、寄存器24的一個(gè)專(zhuān)用部分中、監(jiān)控單元22的一個(gè)特定存儲(chǔ)器(未顯示)中、或者在監(jiān)控單元22之外的一個(gè)存儲(chǔ)器中,假如它能夠被監(jiān)控單元22訪問(wèn)的話(huà)。
接下來(lái)監(jiān)控單元22繼續(xù)進(jìn)行先前描述的步驟44和46。將要注意到記錄值Vinst.n的步驟39,處于逐個(gè)單元遞增n、連接步驟46到步驟36的循環(huán)B1中,從而使每一個(gè)Vinst.n值都這樣被記錄,直到在步驟46中檢測(cè)到第二條監(jiān)控指令為止。
當(dāng)這個(gè)第二條指令來(lái)到時(shí),監(jiān)控單元22讀取參考值Vref(步驟48),并在步驟49依據(jù)與先前描述的圖3步驟40和42相同的算法、基于先前記錄的Vinst值集合,執(zhí)行散列。那么最后的散列值VHn與在圖3方法中的情況相同。應(yīng)當(dāng)注意到有可能顛倒步驟48和49的次序。
比較步驟50以及隨后的那些步驟與圖3中的那些步驟是相同的。
圖5是依據(jù)本發(fā)明第二個(gè)實(shí)施例的監(jiān)控單元22的簡(jiǎn)化框圖。與參考圖2和3描述的第一實(shí)施例相同的方式集成到程序執(zhí)行設(shè)備20中,而且為了簡(jiǎn)明起見(jiàn),關(guān)于其指令計(jì)數(shù)器6、指令寄存器2和處理器4的功能將不再重復(fù)。
依據(jù)第二實(shí)施例的監(jiān)控單元22本質(zhì)上不同于第一實(shí)施例中的監(jiān)控單元,體現(xiàn)在它還具有一個(gè)存儲(chǔ)器60,用來(lái)記錄沒(méi)有根據(jù)參考圖3或4說(shuō)明的標(biāo)準(zhǔn)正確執(zhí)行的一系列指令I(lǐng)nst.1-Inst.n的發(fā)生次數(shù)。
在該實(shí)例中,存儲(chǔ)器60是以一個(gè)帶有電可擦內(nèi)容的固定(非易失性)存儲(chǔ)器(通常用英語(yǔ)術(shù)語(yǔ)EEPROM表示)的形式制造而成的。
存儲(chǔ)器60功能上和計(jì)算器26相連接以便使它記錄一個(gè)計(jì)數(shù)值VC,它在每次注意到一系列正被監(jiān)控的指令一次不正確的執(zhí)行時(shí),逐個(gè)單元遞增該計(jì)數(shù)值。這個(gè)計(jì)數(shù)值VC因此使得檢測(cè)一系列指令不正確執(zhí)行的數(shù)目以及據(jù)此進(jìn)行動(dòng)作成為可能,例如,如果這個(gè)數(shù)目超過(guò)一個(gè)閾值,則使包含該程序的設(shè)備(例如一個(gè)智能卡)的任何未來(lái)使用無(wú)效。
圖6中的流程圖給出了一個(gè)使用該計(jì)數(shù)值VC來(lái)監(jiān)控執(zhí)行該程序的設(shè)備的實(shí)例。這個(gè)實(shí)例包含圖3中流程圖的這組步驟30到54或是圖4中的相似步驟。
繼比較步驟52之后當(dāng)監(jiān)控單元22在步驟54檢測(cè)到這些指令I(lǐng)nst.1-Inst.n的一個(gè)意外執(zhí)行時(shí),計(jì)算單元26增加存儲(chǔ)器60中的計(jì)數(shù)值VC,最初為0,然后逐個(gè)單元遞增(步驟62)。接下來(lái)它檢查這樣增加的計(jì)數(shù)值VC是否已經(jīng)達(dá)到一個(gè)預(yù)定閾值VCthreshold(步驟64)。這個(gè)閾值VCthreshold對(duì)應(yīng)于指令I(lǐng)nst.1-Inst.n被認(rèn)為在為處理這樣一個(gè)故障采取明確措施之前能夠在編程設(shè)備中發(fā)生意外執(zhí)行的次數(shù)。舉例來(lái)說(shuō),在智能卡的情況中,適當(dāng)數(shù)目的這種故障是能夠接受(例如3或4)的,這有利于懷疑它是否是一種與閱讀器(程序執(zhí)行設(shè)備20)相關(guān)的瞬間損害情況,但是超過(guò)了這個(gè)數(shù)目就必須認(rèn)為該卡已經(jīng)被無(wú)意或者惡意損壞。在這種實(shí)現(xiàn)情況下,還可以為在編程設(shè)備(卡)中輸入值VC做好準(zhǔn)備,以便完全地將這些有故障執(zhí)行的歷史記錄保留到程序設(shè)備中。
如果計(jì)數(shù)值VC低于閾值VCthreshold,則監(jiān)控單元22如先前描述的那樣用一個(gè)用于用戶(hù)和/或操作系統(tǒng)的簡(jiǎn)單警告信息建立中斷指令I(lǐng)nt(步驟66),并將它傳送到處理器4(步驟68)。
另一方面,如果計(jì)數(shù)值VC達(dá)到了閾值VCthreshold,則監(jiān)控單元22如先前描述的那樣用一條用于禁止包含以意外方式執(zhí)行的這些指令的編程設(shè)備的任何未來(lái)使用的指令建立該中斷指令I(lǐng)nt(步驟70),并將它傳送到處理器(步驟68)。在這種情況下,將使得僅僅在已經(jīng)對(duì)存儲(chǔ)器60重新編程之后就重新使用這個(gè)設(shè)備變得可能。其中這個(gè)存儲(chǔ)器60是一個(gè)EEPROM或其它非易失性存儲(chǔ)器的形式,這種重新編程很難以一種轉(zhuǎn)移方式執(zhí)行。
將會(huì)注意到程序中斷指令I(lǐng)nt伴隨一個(gè)警告信息或未來(lái)使用無(wú)效指令進(jìn)行傳輸,并且能夠在處理器或者是在監(jiān)控單元22中執(zhí)行。
下面將結(jié)合圖7描述依據(jù)本發(fā)明,監(jiān)控單元22能夠怎樣用于監(jiān)控一段提供跳躍或切換的程序。
在圖7的實(shí)例中,程序執(zhí)行設(shè)備20在指令寄存器2中包含一段用于處理器4的程序或程序部分,它包含三組指令-第一組指令I(lǐng)nst.EI1-1到Inst.EI1-j(其中j是一個(gè)大于1的整數(shù)),最后一條指令EI1-j是一個(gè)要求有條件地切換到隨后兩組中的一組或另外一組的代碼;-第二組指令I(lǐng)nst.EI2-1到Inst.EI2k(其中k是一個(gè)大于1的整數(shù));如果這兩個(gè)條件中的第一個(gè)條件滿(mǎn)足的話(huà),就繼有條件的切換指令EI1-j執(zhí)行之后執(zhí)行這組中的第一條指令I(lǐng)nst.EI2-1;以及-第三組指令I(lǐng)nst.EI3-1到Inst.EI31(其中k是一個(gè)大于1的整數(shù));如果這兩個(gè)條件中的第二個(gè)條件滿(mǎn)足的話(huà),就繼有條件的切換指令EI1-j執(zhí)行之后執(zhí)行這組中的第一條指令I(lǐng)nst.EI3-1。
這三組指令EI1、EI2和EI3在它們的指令序列內(nèi)部沒(méi)有包含任何跳躍。(就第一組指令來(lái)說(shuō),在序列末端條件轉(zhuǎn)移到指令EI1-j.)因此,分別對(duì)這三組指令來(lái)說(shuō),所有這些指令被設(shè)計(jì)為自第一條指令起連續(xù)地執(zhí)行。
在程序準(zhǔn)備期間,在每組指令EI1、EI2和EI3的頭尾處分別增加以上結(jié)合圖2所述的第一條監(jiān)控指令和第二條監(jiān)控指令。
然后對(duì)由組EI1、EI2和EI3組成的程序或程序部分的監(jiān)控繼續(xù)進(jìn)行如下。
監(jiān)控單元22首先定位于監(jiān)控階段的開(kāi)始處(步驟30,圖3)。
從執(zhí)行第一組指令EI1開(kāi)始這個(gè)過(guò)程。位于這組頭部的第一條監(jiān)控指令將首先被載入到監(jiān)控單元22中。響應(yīng)于這條指令,監(jiān)控單元初始化它的指令計(jì)數(shù)器和它的散列值VH寄存器24(步驟34,圖3),并依據(jù)圖3中的步驟36到46分別為第一組指令的指令I(lǐng)nst.EI1-1到Inst.EI1-j繼續(xù)進(jìn)行散列過(guò)程。
因此控制轉(zhuǎn)換的這組中的最后一條指令EI1-j也要進(jìn)行由監(jiān)控單元22進(jìn)行散列以便被送到處理器4。
隨后的指令是位于第一組指令EI1尾部的第二條監(jiān)控指令(步驟46,圖3),它帶來(lái)了記錄在寄存器24里的上一個(gè)散列值和與這第二條指令有關(guān)的參考值Vref之間的比較階段。
如果在比較步驟50(圖3)檢測(cè)到這樣記錄的上一個(gè)散列值與參考值Vref不相符,則監(jiān)控單元22繼續(xù)進(jìn)行程序中斷步驟54和56(圖3和4)或是步驟54到70(圖6)。最好是,甚至在程序已經(jīng)執(zhí)行有條件的轉(zhuǎn)換之前為這個(gè)中斷發(fā)生采取措施。這能夠例如通過(guò)采用已知的編程技術(shù)將轉(zhuǎn)移指令和一條來(lái)自監(jiān)控單元的等候驗(yàn)證指令相關(guān)聯(lián)而實(shí)現(xiàn)。
如果在比較步驟50(圖2)檢測(cè)到這樣記錄的最后一個(gè)散列值實(shí)際上相當(dāng)于參考值Vref,則監(jiān)控單元批準(zhǔn)由這組中最后一條指令EI1-j所確定的有條件轉(zhuǎn)換的執(zhí)行。然后該程序根據(jù)由這個(gè)最后一條指令定位的轉(zhuǎn)換條件繼續(xù)第二或第三組指令中的一個(gè)或另一個(gè)。
假定在該實(shí)例中這個(gè)條件轉(zhuǎn)移促使轉(zhuǎn)換到第二組指令執(zhí)行。在這種情況下,指令計(jì)數(shù)器6使指令指針8直接從位于第一組指令EI1尾部的第二條監(jiān)控指令傳遞到在第三組指令EI3頭部的第一條監(jiān)控指令。
監(jiān)控單元將通過(guò)重新初始化指令計(jì)數(shù)器和寄存器24來(lái)執(zhí)行這個(gè)新的第一條指令。因此,對(duì)這第三組指令的監(jiān)控過(guò)程會(huì)以與第一組指令完全相同的方式繼續(xù)進(jìn)行。因此監(jiān)控單元22將進(jìn)行在這組中讀取的每一條指令的連續(xù)散列,使用和第一組一樣的一個(gè)“種子”值(這里相當(dāng)于0)開(kāi)始散列。這次第二條監(jiān)控指令使得在執(zhí)行中檢測(cè)位于這個(gè)第一組指令的一個(gè)意外行為情況、以及在步驟56繼續(xù)進(jìn)行同一類(lèi)型的動(dòng)作成為可能。
應(yīng)明白繼轉(zhuǎn)換指令和第一組指令執(zhí)行之后,就轉(zhuǎn)換到第三組的情況所給出的說(shuō)明以絕對(duì)類(lèi)似的方式適用于轉(zhuǎn)換到第二組指令的情況。
有可能使監(jiān)控單元22不僅能統(tǒng)計(jì)在包含轉(zhuǎn)移的一段程序中異常步驟的數(shù)目,而且能統(tǒng)計(jì)產(chǎn)生它們的獨(dú)立監(jiān)控的指令組。
因此,依據(jù)第二個(gè)實(shí)施例的監(jiān)控單元22(圖5)能夠在它的存儲(chǔ)器60里記錄下每個(gè)記錄的中斷所涉及的指令組。還有可能依據(jù)中斷位于其中的指令組為程序的將來(lái)使用無(wú)效制定標(biāo)準(zhǔn)。
當(dāng)然,應(yīng)明白監(jiān)控單元22能夠與處理器4分離或是在功能上被集成到處理器4中。
最后,顯然用方法描述的本發(fā)明的所有這些方面能夠很容易地用實(shí)際裝置來(lái)實(shí)現(xiàn),反之亦然。同樣地,應(yīng)明白所描述的本發(fā)明還覆蓋了一個(gè)實(shí)施例或另一實(shí)施例的變體的所有明顯置換。
權(quán)利要求
1.一種用一段計(jì)算機(jī)程序中一系列指令(Inst.1-Inst.n)監(jiān)控執(zhí)行進(jìn)程的方法,在于分析被送到用于執(zhí)行該正被監(jiān)控程序的處理器(4)的指令序列,并參考同上述程序一起記錄的參考數(shù)據(jù)(Vref)來(lái)驗(yàn)證這個(gè)分析的結(jié)果。
2.如權(quán)利要求1所述的方法,其特征在于只有當(dāng)該指令序列中的所有指令(Inst.1-Inst.n)實(shí)際上已經(jīng)在程序運(yùn)行期間被分析過(guò)了時(shí),參考數(shù)據(jù)包括一個(gè)預(yù)先確立的值(Vref)以便對(duì)應(yīng)于監(jiān)控方法期間產(chǎn)生的這個(gè)分析的結(jié)果。
3.如權(quán)利要求1或2所述的方法,其特征在于指令序列(Inst.1-Inst.n)的上述分析包含從每條被傳送到處理器(4)的指令中提取一個(gè)數(shù)據(jù)項(xiàng),以及在這樣提取的每個(gè)數(shù)據(jù)項(xiàng)上的預(yù)定計(jì)算(40,42);以及驗(yàn)證包含對(duì)該分析的結(jié)果與參考數(shù)據(jù)(Vref)的比較(50)。
4.如權(quán)利要求1到3中任一項(xiàng)所述的方法,其特征在于上述分析結(jié)果的驗(yàn)證是由被監(jiān)控程序中的一條位于一預(yù)定存儲(chǔ)單元的指令(Inst.n+1)所引起,這條指令包含與其正確執(zhí)行受到監(jiān)控的指令集(Inst.1-Inst.n)有關(guān)的參考數(shù)據(jù)(Vref)。
5.如權(quán)利要求1到4中任一項(xiàng)所述的方法,其特征在于當(dāng)被監(jiān)控的該指令集中的指令(Inst.1-Inst.n)是以一個(gè)值的形式例如以十六進(jìn)制或十進(jìn)制形式記錄代碼時(shí),將這些指令考慮為一個(gè)數(shù)字值來(lái)實(shí)現(xiàn)這些指令的上述分析。
6.如權(quán)利要求1所述的方法,包含以下步驟-在被監(jiān)控程序的準(zhǔn)備期間-在該程序的一指令序列(Inst.1-Inst.n)中,在至少一個(gè)預(yù)定存儲(chǔ)單元上包括一個(gè)依據(jù)一個(gè)預(yù)定規(guī)則確定的參考值(Vref),其中該規(guī)則適用于每條被監(jiān)控指令中的可識(shí)別數(shù)據(jù);以及-在被監(jiān)控程序的執(zhí)行期間-為了它的執(zhí)行獲得(38)在收到的每條指令中的上述可識(shí)別數(shù)據(jù);-將上述預(yù)定規(guī)則應(yīng)用(40,42)到這樣獲得的上述可識(shí)別數(shù)據(jù)上以便確定一個(gè)驗(yàn)證值(VHn);以及-驗(yàn)證(50)這個(gè)驗(yàn)證值實(shí)際上符合于和該程序一起記錄的參考值。
7.如權(quán)利要求1到6中任一項(xiàng)所述的方法,其特征在于它還包含一個(gè)步驟(56),即如果分析顯示正被監(jiān)控的程序沒(méi)有象期望的那樣運(yùn)行,則中斷被監(jiān)控程序的流程。
8.如權(quán)利要求1到7中任一項(xiàng)所述的方法,其特征在于它還包含一個(gè)步驟(70)即如果上述分析顯示正被監(jiān)控的程序沒(méi)有以期望的方式運(yùn)行預(yù)定次數(shù),則使包含該被監(jiān)控程序的設(shè)備的未來(lái)使用無(wú)效。
9.如權(quán)利要求1到8中任一項(xiàng)所述的方法,其特征在于被監(jiān)控的指令集在它的預(yù)期流程中不包含跳轉(zhuǎn)。
10.如權(quán)利要求1到8中任一項(xiàng)所述的方法,其特征在于當(dāng)被監(jiān)控的程序(EI1、EI2、EI3)或程序部分提供了至少一個(gè)跳轉(zhuǎn)時(shí),該監(jiān)控方法被分別地應(yīng)用到這個(gè)程序中兩條連續(xù)指令之間不包含跳轉(zhuǎn)的指令集。
11.如權(quán)利要求10所述的方法,其特征在于當(dāng)被監(jiān)控的程序包含一條依賴(lài)于操作數(shù)據(jù)而引起跳轉(zhuǎn)的指令(EI1-j)時(shí),分別為在該跳轉(zhuǎn)之前的指令集(EI1),和在這個(gè)跳轉(zhuǎn)之后的至少一個(gè)指令集(EI2,EI3)執(zhí)行該監(jiān)控方法。
12.如權(quán)利要求11所述的方法,其特征在于就提供一個(gè)跳轉(zhuǎn)的一個(gè)指令集(EI1)來(lái)說(shuō),為了進(jìn)行旨在獲得用于這個(gè)指令集的驗(yàn)證值(VH)的分析,在這個(gè)指令集中包含指令(EI1-j)來(lái)控制這個(gè)跳轉(zhuǎn),這樣就能在執(zhí)行該跳轉(zhuǎn)指令之前驗(yàn)證這個(gè)指令集的正確運(yùn)行。
13.如權(quán)利要求1到12中任一項(xiàng)所述的方法,其特征在于該分析在對(duì)被監(jiān)控的一個(gè)指令序列或一個(gè)指令集(EI1、EI2、EI3)的每個(gè)新監(jiān)控之前重新初始化。
14.如權(quán)利要求13所述的方法,其特征在于對(duì)每個(gè)新監(jiān)控的分析的重新初始化是清除或替換在前一個(gè)分析期間獲得的驗(yàn)證值(VH)。
15.如權(quán)利要求13或14所述的方法,其特征在于監(jiān)控分析的重新初始化是由保護(hù)軟件本身控制的。
16.如權(quán)利要求1到15中任一項(xiàng)所述的方法,其特征在于該分析產(chǎn)生一個(gè)驗(yàn)證值(VH),其作為一系列值中的最后一個(gè)值而獲得,它隨著對(duì)該指令集中每一條分析指令(Inst.1-Inst.n)的分析的連續(xù)地改變,從而使包含該監(jiān)控方法運(yùn)行的內(nèi)部狀態(tài)以及跟蹤它的變化成為可能。
17.如權(quán)利要求1到16中任一項(xiàng)所述的方法,其特征在于該分析是自前一條指令(Inst.n-1)之后分別為考慮中的每一條指令(Inst.n)計(jì)算(40,42)在值(VHn)和結(jié)果(VHn-1)上進(jìn)行一個(gè)操作的結(jié)果,其中(VHn)由所述的指令獲得,而(VHn-1)是對(duì)前一條指令執(zhí)行同一個(gè)操作所獲得的結(jié)果。
18.如權(quán)利要求1到17中任一項(xiàng)所述的方法,其特征在于該分析是從執(zhí)行的最后一次初始化開(kāi)始對(duì)由每條被監(jiān)控指令獲得的值循環(huán)應(yīng)用一個(gè)散列函數(shù)f(VHn-1,Vinst.n)。
19.如權(quán)利要求1到17中任一項(xiàng)所述的方法,其特征在于該分析是通過(guò)對(duì)自實(shí)現(xiàn)的最后一次初始化以來(lái)執(zhí)行的所有操作碼和地址執(zhí)行一個(gè)冗余度計(jì)算,不一定加密,而使驗(yàn)證值發(fā)生改變。
20.如權(quán)利要求1到19中任一項(xiàng)所述的方法,其特征在于該分析是當(dāng)用作這個(gè)計(jì)算的相應(yīng)指令的數(shù)據(jù)在這些指令執(zhí)行期間獲得時(shí),通過(guò)計(jì)算連續(xù)的中間值來(lái)獲得一個(gè)比較值(VCn)。
21.如權(quán)利要求1到19中任一項(xiàng)所述的方法,其特征在于該分析包含步驟當(dāng)被監(jiān)控的指令集(Inst.1-Inst.n)中的指令被執(zhí)行時(shí),保存從這些指令處獲得的、為驗(yàn)證所必需的每個(gè)數(shù)據(jù)項(xiàng);以及一旦必要的數(shù)據(jù)已經(jīng)獲得,就僅僅在必要的時(shí)間執(zhí)行對(duì)來(lái)自于這些數(shù)據(jù)的驗(yàn)證值(VHn)的計(jì)算。
22.一種用于監(jiān)控一段計(jì)算機(jī)程序中一系列指令(Inst.1-Inst.n)執(zhí)行進(jìn)程的設(shè)備,包含裝置(22-26)用于分析被送到處理器(4)的指令序列,其中該處理器(4)用于執(zhí)行該正被監(jiān)控的程序;以及裝置(26)用于通過(guò)參照和上述程序一起記錄的參考數(shù)據(jù)(Vref)來(lái)驗(yàn)證這個(gè)分析的結(jié)果(VCn)。
23.如權(quán)利要求22所述的設(shè)備,適于執(zhí)行如權(quán)利要求1到21中任何一個(gè)所述的監(jiān)控方法,其特征在于它具有一個(gè)寄存器(24),用于記錄由分析裝置(26)實(shí)現(xiàn)的一個(gè)按鏈?zhǔn)接?jì)算的中間結(jié)果(VH)以便獲得一個(gè)驗(yàn)證值(VHn)。
24.如權(quán)利要求23所述的設(shè)備,其特征在于它包含裝置用于在被監(jiān)控的一段程序的執(zhí)行期間、例如在該程序中的一個(gè)跳轉(zhuǎn)發(fā)生時(shí),允許在傳送的一條指令(Inst.n+1)的控制下記錄一個(gè)預(yù)定值或是寄存器(24)的復(fù)位。
25.如權(quán)利要求22到24中任何一個(gè)所述的設(shè)備,其特征在于它包含裝置(60)用于計(jì)算在正被監(jiān)控的程序中由分析裝置(26)確定的異常事件的數(shù)目;以及裝置用于如果這個(gè)數(shù)字達(dá)到一個(gè)預(yù)定閾值(VCthreshold)則使要被監(jiān)控的該程序的將來(lái)使用無(wú)效。
26.如權(quán)利要求22到25中任何一個(gè)所述的設(shè)備,其特征在于它被集成到包含要被監(jiān)控的上述程序的一個(gè)被編程設(shè)備中,例如一個(gè)智能卡中。
27.如權(quán)利要求22到25中任何一個(gè)所述的設(shè)備,其特征在于它被集成到一個(gè)程序執(zhí)行設(shè)備(20)中。
28.一種程序執(zhí)行設(shè)備(20),用于執(zhí)行一段計(jì)算機(jī)程序中的一系列指令(Inst.1-Inst.n),其特征在于它包含裝置(22-26),用于分析被傳送用于執(zhí)行的指令序列;以及裝置,用于通過(guò)參考和被監(jiān)控的程序一起記錄的參考數(shù)據(jù)(Vref)來(lái)驗(yàn)證這個(gè)分析的結(jié)果。
29.如權(quán)利要求28所述的程序執(zhí)行設(shè)備(20),適于執(zhí)行如權(quán)利要求1到21中任何一個(gè)所述的方法。
30.一種包含了一系列記錄指令(Inst.1-Inst.n)的被編程設(shè)備,其特征在于它還包含預(yù)先確定的參考數(shù)據(jù)(Vref),作為一個(gè)被包含在上述指令中的數(shù)據(jù)函數(shù),并用于允許對(duì)依據(jù)如權(quán)利要求1到21中任何一個(gè)分析的指令序列進(jìn)行驗(yàn)證。
31.如權(quán)利要求30所述的設(shè)備,其特征在于它是一個(gè)智能卡的形式。
32.如權(quán)利要求30或31所述的設(shè)備,其特征在于參考數(shù)據(jù)(Vref)以一個(gè)預(yù)先布線(xiàn)的值或是固定在存儲(chǔ)器中的值的形式被記錄下來(lái)。
33.一種用于對(duì)一個(gè)依據(jù)權(quán)利要求30到32中任何一項(xiàng)被編程的設(shè)備進(jìn)行編程的設(shè)備,其特征在于它包含裝置,用于在該程序的一指令序列(Inst.1-Inst.n)中,在至少一個(gè)預(yù)定存儲(chǔ)單元處輸入一個(gè)參考值(Vref),該參考值(Vref)是依據(jù)一種預(yù)先確定的方式從包含在一指令集每條指令內(nèi)的數(shù)據(jù)計(jì)算出來(lái)的,希望它監(jiān)控控制該指令集的執(zhí)行。
34.一種用于解釋一個(gè)關(guān)鍵代碼的虛擬機(jī)或解釋器,其特征在于它執(zhí)行如權(quán)利要求1到21中任何一個(gè)所述的方法用于這個(gè)關(guān)鍵代碼的執(zhí)行。
全文摘要
本發(fā)明涉及一種用于監(jiān)控一段計(jì)算機(jī)程序的一系列指令(Inst.1-Inst.n)的執(zhí)行流程的方法,包含:對(duì)被傳送到處理器(4)的指令序列進(jìn)行分析,其中該處理器用于執(zhí)行被監(jiān)控的程序;通過(guò)參考用上述程序記錄的參考數(shù)據(jù)(Vref)對(duì)上述分析的結(jié)果進(jìn)行驗(yàn)證。該參考數(shù)據(jù)能夠以這種方式包含一個(gè)預(yù)先確定的值(Vref),以使只有當(dāng)所有這些指令(Inst.1-Inst.n)在程序流程期間實(shí)際上已經(jīng)被分析過(guò)了時(shí)它才與在監(jiān)控過(guò)程中產(chǎn)生的分析的結(jié)果相符合。本發(fā)明還涉及一種用于監(jiān)控程序執(zhí)行的設(shè)備、依據(jù)上述監(jiān)控原理進(jìn)行操作的一種程序設(shè)備和一種編程設(shè)備。
文檔編號(hào)G06F21/52GK1350675SQ00807379
公開(kāi)日2002年5月22日 申請(qǐng)日期2000年1月24日 優(yōu)先權(quán)日1999年3月9日
發(fā)明者P·吉拉爾, D·納卡希, L·魯索 申請(qǐng)人:格姆普拉斯公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1