專利名稱:保護(hù)性使用動(dòng)態(tài)連接的可執(zhí)行模塊的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及限制可執(zhí)行模塊使用的系統(tǒng)和方法,以使每一可執(zhí)行模塊只與其它可靠性已得到驗(yàn)證的可執(zhí)行模塊動(dòng)態(tài)連接。
在計(jì)算機(jī)程序的上下文中,“外部函數(shù)”是位于使用該外部函數(shù)的計(jì)算機(jī)程序外部的程序庫(kù)或其他函數(shù)庫(kù)中的一典型的程序或函數(shù)。外部函數(shù)經(jīng)常但并非總是被不同于使用這些外部函數(shù)的計(jì)算機(jī)程序的其他人或其它團(tuán)體編寫。
程序的執(zhí)行環(huán)境要求外部函數(shù)在運(yùn)行期間而并非在連接或編譯時(shí)被連接,以簡(jiǎn)化維護(hù)和更新計(jì)算機(jī)程序,因?yàn)閷?duì)應(yīng)用到此類執(zhí)行環(huán)境的程序來(lái)說(shuō),只有那些正在被修改或更新的程序需要重新編譯,而其它的模塊不用做任何改變,此外,由于即使程序使用的其他模塊在程序開(kāi)發(fā)系統(tǒng)中并不出現(xiàn),但被修改程序的編譯也能執(zhí)行,因此重新編譯的過(guò)程得到簡(jiǎn)化。
然而,運(yùn)用此類程序執(zhí)行環(huán)境的系統(tǒng)是有缺陷的,因?yàn)槌绦蚰K間的接口通常被較好地說(shuō)明了,或可以被第三者確定,因此對(duì)第三者來(lái)說(shuō)可能以未被相應(yīng)軟件許可協(xié)議承認(rèn)的方式來(lái)使用那些程序模塊。另外,這些第三者可以用損壞的模塊來(lái)代替真正的程序模塊,使系統(tǒng)遭到破壞。
在以從美國(guó)向其他國(guó)家的消費(fèi)者或發(fā)行商出口為目的的軟件中,當(dāng)用密碼程序進(jìn)行處理時(shí),該問(wèn)題就更嚴(yán)重了。目前,美國(guó)的商業(yè)法禁止出口提供通用密碼的軟件模塊。另一方面,這樣一類的程序出口是允許的,即這些程序在有限的上下文中可執(zhí)行密碼功能,在其外的程序中不能執(zhí)行通用的密碼功能。事實(shí)上,設(shè)計(jì)以授權(quán)方式使用密碼功能的出口軟件系統(tǒng)在商業(yè)上是很重要的?,F(xiàn)有技術(shù)中最新的約束系統(tǒng),如動(dòng)態(tài)連接庫(kù)(Windows系統(tǒng)中的DLLS)或共享目標(biāo)(如Solaris里的·SO文件),試圖通過(guò)隱藏軟件模塊間的接口或者通過(guò)單獨(dú)提供“僅供出口”的軟件版本來(lái)解決此問(wèn)題。單獨(dú)提供“僅供出口”的軟件產(chǎn)品導(dǎo)致了要用單一的代碼庫(kù)保持對(duì)國(guó)內(nèi)和出口版本進(jìn)行升級(jí)和修訂維護(hù)“同步”的問(wèn)題。
另一個(gè)有必要限制或禁止使用動(dòng)態(tài)連接模塊的情況是一個(gè)出版商寫的應(yīng)用軟件,由于商業(yè)秘密或合同的原因,他希望應(yīng)用軟件中某些函數(shù)是保密的。這樣的系統(tǒng)就要求限制訪問(wèn)這些秘密函數(shù)的方式。
總而言之,本發(fā)明為一計(jì)算機(jī)系統(tǒng),它有一個(gè)程序模塊驗(yàn)證器和至少一個(gè)第一和一個(gè)第二程序模塊。每一程序模塊包含有一個(gè)數(shù)字標(biāo)記和一個(gè)可執(zhí)行的過(guò)程。此外,第一個(gè)程序模塊還包含一個(gè)可調(diào)用第二程序模塊的過(guò)程;一個(gè)調(diào)用程序模塊驗(yàn)證器的過(guò)程,調(diào)用程序模塊驗(yàn)證器的程序邏輯上應(yīng)位于第一程序模塊中,以便在執(zhí)行調(diào)用第二程序模塊之前就被執(zhí)行;以及一些指令,當(dāng)調(diào)用程序模塊驗(yàn)證器的過(guò)程導(dǎo)致了程序模塊驗(yàn)證器的一個(gè)否定的答復(fù),那么這些指令就禁止調(diào)用第二程序模塊。
第二程序模塊中包含響應(yīng)第一程序模塊對(duì)第二程序模塊過(guò)程調(diào)用而執(zhí)行的一個(gè)可執(zhí)行過(guò)程,還包含一個(gè)邏輯上位于第二程序模塊中,以便在執(zhí)行第二程序模塊的可執(zhí)行過(guò)程完成之前就被執(zhí)行的對(duì)程序模塊驗(yàn)證器調(diào)用的過(guò)程,還包含一些當(dāng)程序模塊驗(yàn)證器返回一個(gè)關(guān)于第一程序模塊的否定驗(yàn)證時(shí)禁止執(zhí)行可執(zhí)行過(guò)程的指令。
程序模塊驗(yàn)證器通過(guò)對(duì)任何指定的程序模塊的可靠性進(jìn)行驗(yàn)證并返回一個(gè)對(duì)每一次過(guò)程調(diào)用肯定或否定的驗(yàn)證來(lái)響應(yīng)過(guò)程調(diào)用。確切地說(shuō),在一個(gè)優(yōu)選實(shí)施例中,程序模塊驗(yàn)證器包含對(duì)一個(gè)指定程序模塊進(jìn)行驗(yàn)證的要求進(jìn)行響應(yīng)的指令。響應(yīng)的方式為(A)用一個(gè)相應(yīng)的解碼鑰對(duì)指定的程序模塊中的數(shù)字標(biāo)記進(jìn)行解碼,(B)根據(jù)信息摘要函數(shù)產(chǎn)生一個(gè)至少為指定程序模塊一部分的信息摘要,(C)當(dāng)被解碼的數(shù)字標(biāo)記與信息摘要相匹配時(shí)就返回一個(gè)肯定的驗(yàn)證,以及(D)如果被解碼的數(shù)字標(biāo)記與信息摘要不相匹配時(shí)就返回一個(gè)否定的驗(yàn)證。
在該優(yōu)選實(shí)施例中,當(dāng)程序模塊驗(yàn)證器無(wú)法驗(yàn)證第二程序模塊的可靠性時(shí),第一程序模塊就產(chǎn)生異常并終止執(zhí)行。同樣地,當(dāng)程序模塊驗(yàn)證器無(wú)法驗(yàn)證第一程序模塊的可靠性時(shí),第二程序模塊就產(chǎn)生異常并終止執(zhí)行。
當(dāng)結(jié)合附圖,并根據(jù)下面詳細(xì)的描述和所附權(quán)利要求,本發(fā)明另外的目的和特點(diǎn)就更易明白了。其中
圖1是結(jié)合本發(fā)明的計(jì)算機(jī)系統(tǒng)框圖;圖2是一個(gè)代表使用本發(fā)明的優(yōu)選實(shí)施例的一個(gè)典型的過(guò)程調(diào)用的“時(shí)間序列”。
圖3是在優(yōu)選實(shí)施例中兩個(gè)連接的軟件模塊相互驗(yàn)證可靠性方法的流程圖。
參見(jiàn)圖1,圖示為一個(gè)計(jì)算機(jī)系統(tǒng)100。雖然計(jì)算機(jī)100可以是臺(tái)式計(jì)算機(jī),如Sun工作站、IBM兼容機(jī)或Macintosh計(jì)算機(jī),但實(shí)際上可使用任何型號(hào)的計(jì)算機(jī)。計(jì)算機(jī)100包括一個(gè)CPU102,一個(gè)用戶接口104及存儲(chǔ)器106。存儲(chǔ)器106包括主隨機(jī)存儲(chǔ)器(RAM)和輔助存儲(chǔ)器,一般為一個(gè)或多個(gè)磁盤或光盤。存儲(chǔ)器106存儲(chǔ)著一個(gè)操作系統(tǒng)110、一個(gè)程序模塊或目標(biāo)可靠性驗(yàn)證器112及一組應(yīng)用程序目標(biāo)實(shí)例114、116、118和120,又稱程序模塊或應(yīng)用程序模塊。
如圖1所示,在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,每個(gè)應(yīng)用程序目標(biāo)實(shí)例包括目標(biāo)標(biāo)題122、至少一個(gè)數(shù)字標(biāo)記124、至少一個(gè)嵌入式公用密鑰126和一個(gè)主應(yīng)用過(guò)程128(常稱之為方法)。每個(gè)方法(或稱過(guò)程)128包括至少一個(gè)驗(yàn)證過(guò)程調(diào)用指令130和用于答復(fù)為響應(yīng)驗(yàn)證過(guò)程調(diào)用而收到的驗(yàn)證否定信息的指令132,例如終止過(guò)程執(zhí)行的指令。在第一個(gè)程序模塊中的主應(yīng)用程序A過(guò)程(128-A)進(jìn)一步包括調(diào)用在第二程序模塊中的一個(gè)可執(zhí)行過(guò)程(如主應(yīng)用程序B過(guò)程128-B)的過(guò)程調(diào)用134,調(diào)用程序模塊驗(yàn)證器的過(guò)程調(diào)用130-A在邏輯上位于在第一程序模塊中,以便在調(diào)用第二程序模塊的過(guò)程調(diào)用134執(zhí)行之前就被執(zhí)行。
調(diào)用程序模塊驗(yàn)證器的過(guò)程調(diào)用130-B在邏輯上位于第二程序模塊中緊接著通向第二程序模塊中各可執(zhí)行過(guò)程128-B的入口點(diǎn)之后的地方,以便先于過(guò)程128-B而使其執(zhí)行。更一般地說(shuō),在本發(fā)明的其他實(shí)施例中,調(diào)用程序模塊驗(yàn)證器的過(guò)程調(diào)用130-B在邏輯上位于在第二程序模塊中先于每一可執(zhí)行過(guò)程完成點(diǎn)之前的地方(更普遍地說(shuō),位于所有會(huì)被其它程序模塊調(diào)用的程序模塊中),以便如果驗(yàn)證器否定了調(diào)用程序的驗(yàn)證時(shí),則避免每個(gè)這樣的模塊執(zhí)行完畢。
在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,在指定組中的所有過(guò)程(如某一特定頂層應(yīng)用程序所使用的所有過(guò)程或一組頂層應(yīng)用程序)具有同一嵌入式公鑰126,且都使用同一密鑰,如RSA加密術(shù),來(lái)進(jìn)行數(shù)字標(biāo)記。但在另一個(gè)實(shí)施例中,不同的過(guò)程和過(guò)程子組以不同的密鑰來(lái)進(jìn)行標(biāo)記。在這個(gè)另外的實(shí)施例中,包含有過(guò)程調(diào)用的過(guò)程模塊具有用于驗(yàn)證它們所能調(diào)用的過(guò)程的嵌入式公鑰,所有可被其它過(guò)程調(diào)用的過(guò)程模塊包含用于調(diào)用過(guò)程驗(yàn)證的公圖2是一個(gè)代表一個(gè)典型的本發(fā)明的優(yōu)選實(shí)施例中使用的過(guò)程調(diào)用是如何進(jìn)行的“時(shí)間序列”。在圖2中,先發(fā)事件在垂直方向上的位置比后發(fā)事件要高。圖3中是過(guò)程調(diào)用執(zhí)行中所包含的各步驟的流程圖。
參見(jiàn)圖2與圖3,在程序模塊A中的可執(zhí)行過(guò)程(如圖1中的主應(yīng)用程序A過(guò)程)開(kāi)始執(zhí)行(步驟200)。為便于討論,在程序模塊A中正被執(zhí)行的過(guò)程稱為“過(guò)程A”,而在程序模塊B中試圖調(diào)用的過(guò)程稱為“過(guò)程B”,在程序模塊B對(duì)一可執(zhí)行過(guò)程進(jìn)行過(guò)程調(diào)用(步驟220)之前,過(guò)程A對(duì)驗(yàn)證器進(jìn)行過(guò)程調(diào)用以要求對(duì)程序模塊B的可靠性進(jìn)行驗(yàn)證(步驟202),驗(yàn)證器然后試圖對(duì)程序模塊B的可靠性進(jìn)行驗(yàn)證并對(duì)程序A發(fā)送一個(gè)返回值以顯示對(duì)程序模塊B的驗(yàn)證是否成功(步驟204)。
更確切地說(shuō),最好是一個(gè)不同的受托目標(biāo)(或另外一個(gè)可信系統(tǒng)服務(wù)過(guò)程)的驗(yàn)證器。接收來(lái)自過(guò)程A的請(qǐng)求信息(步驟206),并使用一個(gè)由調(diào)用過(guò)程(即過(guò)程A)所提供的公鑰對(duì)嵌入程序模塊B中的數(shù)字標(biāo)記進(jìn)行解碼(步驟208),通過(guò)驗(yàn)證器調(diào)用過(guò)程A所提供的公鑰是嵌入在程序模塊A中的“組”公共鑰126-A。
在優(yōu)選實(shí)施例中,程序模塊的數(shù)字標(biāo)記是通過(guò)以下步驟產(chǎn)生的計(jì)算程序模塊的信息摘要;對(duì)信息摘要增加一個(gè)散列函數(shù)標(biāo)識(shí)符以指出用以產(chǎn)生信息摘要的散列函數(shù)(hash Function)的類型;通過(guò)一個(gè)密鑰,采用RSA加密術(shù)對(duì)所得值進(jìn)行加密;然后對(duì)加密值再增加一個(gè)該程序模塊源(即作者或發(fā)行者)的明確文本標(biāo)識(shí)符MDB=散列函數(shù)(程序模塊B)數(shù)字標(biāo)記B=加密(MDB+散列函數(shù)ID,密鑰)+程序模塊B源的明確文本ID。
因此,為了對(duì)程序模塊B的數(shù)字標(biāo)記進(jìn)行解碼,驗(yàn)證器(A)從數(shù)字標(biāo)記中刪去明確文本ID之后(B)通過(guò)公鑰對(duì)數(shù)字標(biāo)記的剩余部分進(jìn)行解碼以產(chǎn)生一個(gè)基于標(biāo)記的信息摘要DS-MDB和散列函數(shù)ID。
DS-MDB+散列函數(shù)ID=解碼(數(shù)字標(biāo)記B-明確文本ID,公共鑰)之后,驗(yàn)證器使用在解碼數(shù)字信號(hào)中標(biāo)識(shí)的散列函數(shù)來(lái)計(jì)算至少作為程序模塊B一部分的信息摘要MDB。用于產(chǎn)生信息摘要的函數(shù)是一個(gè)典型的函數(shù),如CRC解密函數(shù),它是以極高的概率對(duì)不同的程序模塊產(chǎn)生不同的值。許多適用于產(chǎn)生信息摘要的散列函數(shù)是被本領(lǐng)域中的技術(shù)人員所了解的。
驗(yàn)證器然后對(duì)已計(jì)算過(guò)的信息摘要MDB和已解碼的數(shù)字標(biāo)記中的信息摘要DS-MDB進(jìn)行比較,(步驟212),如果這兩個(gè)信息摘要匹配時(shí),則向調(diào)用過(guò)程返回一個(gè)驗(yàn)證肯定信息(214步),若不匹配則產(chǎn)生一個(gè)驗(yàn)證否定信息(步驟216)。
在一個(gè)優(yōu)選實(shí)施例中,每個(gè)程序模塊有一個(gè)唯一的數(shù)字標(biāo)記,相關(guān)的信息摘要是使用基于整個(gè)程序模塊內(nèi)容的一個(gè)散列函數(shù)計(jì)算出來(lái)的。在其他實(shí)施例中,信息摘要基于的是可以僅為程序模塊的一個(gè)部分。例如在第二個(gè)優(yōu)選實(shí)施例中,每個(gè)程序模塊有兩個(gè)數(shù)字標(biāo)記一個(gè)用于程序模塊的多個(gè)方法部分,另一個(gè)用于程序模塊的一個(gè)(若有的話)數(shù)據(jù)部分。當(dāng)程序模塊有兩個(gè)數(shù)字標(biāo)記時(shí),通過(guò)對(duì)這兩個(gè)數(shù)字標(biāo)記進(jìn)行解碼而得到的兩個(gè)信息摘要必須與由驗(yàn)證器計(jì)算出的相應(yīng)信息摘要相匹配,以使驗(yàn)證器返回一個(gè)驗(yàn)證肯定信息。如果經(jīng)解碼的數(shù)字標(biāo)記中的信息摘要有一個(gè)與由驗(yàn)證器計(jì)算產(chǎn)生的相應(yīng)信息摘要不匹配,則驗(yàn)證器返回一個(gè)驗(yàn)證否定信息。
如果驗(yàn)證器否定了對(duì)程序模塊B的驗(yàn)證(步驟216),過(guò)程A則“產(chǎn)生異?!比缓蠼K止(步驟218)。產(chǎn)生異常通常會(huì)引起相關(guān)的執(zhí)行線程(thread)終止,且進(jìn)一步引起一個(gè)由正在調(diào)用的異常處理過(guò)程執(zhí)行線程進(jìn)行執(zhí)行,以便給執(zhí)行調(diào)用線程一個(gè)機(jī)會(huì)來(lái)進(jìn)行分析,否則給被調(diào)用的過(guò)程一個(gè)否定的回答。(本例中即為過(guò)程A)一般地,僅當(dāng)程序模塊被破壞,如在安裝或從一臺(tái)計(jì)算機(jī)向另一臺(tái)計(jì)算機(jī)傳輸?shù)倪^(guò)程中被故意地?cái)_亂時(shí),驗(yàn)證器就會(huì)對(duì)程序模塊驗(yàn)證進(jìn)行否定。在正常操作時(shí),驗(yàn)證否定應(yīng)為異常事件。
如果驗(yàn)證器肯定了程序模塊B的驗(yàn)證(步驟214),過(guò)程A繼續(xù)進(jìn)行對(duì)程序模塊B中的過(guò)程B進(jìn)行過(guò)程調(diào)用(步驟220)。在優(yōu)選實(shí)施例中,當(dāng)接收到過(guò)程調(diào)用之后,程序模塊B首先要做的一件事是對(duì)驗(yàn)證器進(jìn)行過(guò)程調(diào)用(步驟222),發(fā)出一個(gè)對(duì)調(diào)用程序模塊的可靠性進(jìn)行驗(yàn)證的請(qǐng)求。(即本例中的程序模塊A)。
然后,驗(yàn)證器試圖驗(yàn)證程序模塊A的可靠性,并向過(guò)程B返回一個(gè)值以表明對(duì)程序模塊A的驗(yàn)證是否成功(步驟230)。
更確切地說(shuō),驗(yàn)證器收到來(lái)自過(guò)程B的請(qǐng)求信息(步驟232),用過(guò)程B提供的公共鑰對(duì)程序模塊A中嵌入的數(shù)字標(biāo)記解碼(步驟234)。過(guò)程B提供給驗(yàn)證器的公共鑰是嵌入程序模塊B的“組”公共鑰126-B。
正如上文所解釋的,程序模塊A的信息摘要是按下面步驟產(chǎn)生的,計(jì)算程序模塊A的信息摘要;用散列函數(shù)標(biāo)識(shí)符加在信息摘要上以表明用來(lái)產(chǎn)生信息摘要的散列函數(shù)的類形;用RSA加密技術(shù)的密鑰對(duì)所得值進(jìn)行加密;然后將程序模塊源的(即作者或分銷商)一個(gè)明確文本標(biāo)識(shí)符附加到被加密的值MDA=散列函數(shù)(程序模塊A)數(shù)字標(biāo)記A=加密(MDA+散列函數(shù)ID,密鑰)+程序模塊A源的明確文本ID因此為對(duì)程序模塊A的數(shù)字標(biāo)記進(jìn)行解碼,驗(yàn)證器(A)從數(shù)字標(biāo)記中刪去明確文本ID,然后(B)對(duì)數(shù)字標(biāo)記的剩余部分進(jìn)行解碼以產(chǎn)生一個(gè)基于標(biāo)記的信息摘要DS-MDA和一個(gè)散列函數(shù)ID。
DS-MDA+散列函數(shù)ID=解碼(數(shù)字標(biāo)記A-明確文本ID,公共鑰)下一步,驗(yàn)證器用解碼數(shù)字標(biāo)記中標(biāo)記的散列函數(shù)計(jì)算至少為程序模塊A一部分的信息摘要MDA(步驟236)。
驗(yàn)證器然后比較計(jì)算得到的信息摘要MDA與被解碼的數(shù)字標(biāo)記中的信息摘要DS-MDA(步驟238),如果兩個(gè)信息摘要匹配時(shí),對(duì)調(diào)用過(guò)程(步驟240)返回一個(gè)驗(yàn)證肯定的信息,如果兩個(gè)信息摘要不匹配時(shí),則返回一個(gè)否定的信息。
如果驗(yàn)證器否定對(duì)程序模塊A的驗(yàn)證(步驟216),過(guò)程B“產(chǎn)生異?!?,然后終止執(zhí)行(步驟244)。
如果驗(yàn)證器肯定程序模塊A的驗(yàn)證(步驟240),則過(guò)程B被執(zhí)行完畢(步驟250)并且執(zhí)行過(guò)程B所產(chǎn)生的結(jié)果被返回到過(guò)程A(步驟252)。最終,過(guò)程A用從過(guò)程B的到的值完成它的執(zhí)行(步驟254)。
在一些補(bǔ)充的實(shí)施例中,一組程序模塊中僅有一部分程序模塊包含“敏感”的算法,或者說(shuō)對(duì)它的驗(yàn)證比其它程序模塊更重要。例如,在第一個(gè)補(bǔ)充實(shí)施例中,一組程序模塊(此中叫“全套程序模塊”)的發(fā)行商可能想確保組內(nèi)少數(shù)程序模塊(此處叫“有限子套程序模塊”)僅能與組內(nèi)的其他程序模塊一起使用,但發(fā)行商可能允許其他剩余程序模塊被授權(quán)者免費(fèi)使用,甚至可與組外的程序模塊一起使用。在此實(shí)施例中,僅僅是那些被限制的程序模塊組包含調(diào)用驗(yàn)證器模塊的過(guò)程調(diào)用,它在邏輯上位于緊隨那些模塊入口點(diǎn)之后。這些調(diào)用驗(yàn)證器的入口點(diǎn)的過(guò)程用來(lái)驗(yàn)證調(diào)用的程序模塊的可靠性,一旦驗(yàn)證到此調(diào)用的程序模塊是一被確認(rèn)為可靠的組中的一部分,被調(diào)用的程序模塊就執(zhí)行調(diào)用程序模塊所要求的計(jì)算。
在第二補(bǔ)充實(shí)施例中,一組程序過(guò)程的發(fā)行商并不關(guān)心限制使用一組“被限制的程序模塊”,而是關(guān)心所有試圖使用被限制的程序模塊的服務(wù)的調(diào)用過(guò)程實(shí)際上得到被限制的程序模塊可靠版本的服務(wù)。在這一實(shí)施例中,所有對(duì)被限制的程序模塊產(chǎn)生過(guò)程調(diào)用的過(guò)程都包含對(duì)驗(yàn)證器模塊的過(guò)程調(diào)用,驗(yàn)證器模塊邏輯上緊在對(duì)被限制的程序模塊的過(guò)程調(diào)用之前。這些驗(yàn)證器過(guò)程調(diào)用用來(lái)驗(yàn)證被限制的程序模塊的可靠性。然而,在這些實(shí)施例中,被限制的程序模塊中的過(guò)程不包含對(duì)調(diào)用程序模塊的可靠性進(jìn)行驗(yàn)證的驗(yàn)證器過(guò)程調(diào)用。一旦驗(yàn)證到被調(diào)用的被限制的程序模塊是可靠的,調(diào)用程序模塊就對(duì)已被確認(rèn)為可靠的被限制的程序模塊進(jìn)行調(diào)用。
雖然,參考幾個(gè)已說(shuō)明的實(shí)施例,本發(fā)明已經(jīng)得到了描述,但該描述是對(duì)本發(fā)明解釋并非對(duì)發(fā)明的限制。對(duì)于那些本領(lǐng)域的技術(shù)人員來(lái)說(shuō),在不脫離后附的權(quán)利要求所限定的本發(fā)明的精神和范圍的情況下,可進(jìn)行各種修改。
權(quán)利要求
1.一個(gè)計(jì)算機(jī)系統(tǒng)包括(A)一個(gè)程序模塊驗(yàn)證器,用于通過(guò)驗(yàn)證對(duì)任何指定的程序模塊的可靠性,并通過(guò)根據(jù)每一個(gè)這樣的過(guò)程調(diào)用返回一個(gè)驗(yàn)證肯定或否定來(lái)響應(yīng)所述程序模塊驗(yàn)證器的過(guò)程調(diào)用;(B)第一程序模塊,和(C)第二程序模塊;所述的第一和第二程序模塊中的一個(gè)模塊包含對(duì)其中的另一個(gè)模塊的過(guò)程調(diào)用;所述的第一和第二程序模塊中至少一個(gè)模塊包含一個(gè)對(duì)所述的程序模塊驗(yàn)證器的過(guò)程調(diào)用以便驗(yàn)證所述的第一和第二程序模塊中的另一個(gè)模塊的可靠性;和多個(gè)指令,用于當(dāng)對(duì)所述的程序模塊驗(yàn)證器進(jìn)行所述的過(guò)程調(diào)用產(chǎn)生了被所述的程序模塊驗(yàn)證器返回的一個(gè)驗(yàn)證否定時(shí),終止所述的程序模塊的執(zhí)行。
2.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),所述的第一程序模塊包含一個(gè)第一數(shù)字標(biāo)記和一個(gè)第一可執(zhí)行過(guò)程;所述的第二程序模塊包含一個(gè)第二數(shù)字標(biāo)記和一個(gè)第二可執(zhí)行過(guò)程;所述的程序驗(yàn)證器模塊包含對(duì)要求驗(yàn)證一個(gè)所述的第一和第二程序模塊中所指定模塊的過(guò)程調(diào)用按如下步驟做出響應(yīng)的指令,(A1)用一個(gè)相應(yīng)的解碼鑰對(duì)所述指定的程序模塊中的所述數(shù)字標(biāo)記進(jìn)行解碼,(A2)根據(jù)一個(gè)預(yù)定的信息摘要函數(shù)產(chǎn)生至少是所述指定的程序模塊一部分的信息摘要,(A3)當(dāng)所述被解碼的數(shù)字標(biāo)記與所述的信息摘要匹配時(shí),返回一個(gè)驗(yàn)證肯定,以及(A4)當(dāng)所述被解碼的數(shù)字標(biāo)記與所述的信息摘要不匹配時(shí),返回一個(gè)驗(yàn)證否定。
3.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),所述的第一程序模塊包含一個(gè)對(duì)所述的第二程序模塊的過(guò)程調(diào)用,所述的第二程序模塊包含(C1)在響應(yīng)對(duì)所述的第二程序模塊進(jìn)行所述過(guò)程調(diào)用時(shí)進(jìn)行的一個(gè)可執(zhí)行過(guò)程;(C2)對(duì)所述的程序模塊驗(yàn)證器的過(guò)程調(diào)用,該程序模塊驗(yàn)證器在邏輯上位于所述第二程序模塊中,以便先于所述的可執(zhí)行過(guò)程的執(zhí)行之前就被執(zhí)行;以及(C3)多個(gè)指令,用于當(dāng)對(duì)所述程序模塊驗(yàn)證器的所述過(guò)程調(diào)用產(chǎn)生一個(gè)由所述的程序模塊驗(yàn)證器返回的驗(yàn)證否定時(shí),禁止所述的可執(zhí)行過(guò)程的執(zhí)行。
4.如權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),其中,禁止所述的第二可執(zhí)行過(guò)程執(zhí)行完成的所述指令包括,當(dāng)對(duì)所述的程序模塊驗(yàn)證器進(jìn)行所述的過(guò)程調(diào)用產(chǎn)生由所述程序模塊驗(yàn)證器返回的驗(yàn)證否定時(shí),終止所述的第二程序模塊執(zhí)行的指令。
5.如權(quán)利要求1、2、3或4所述的計(jì)算機(jī)系統(tǒng),所述的第一程序模塊包含對(duì)所述的第二程序模塊的過(guò)程調(diào)用;對(duì)所述的程序模塊驗(yàn)證器的過(guò)程調(diào)用,該程序模塊驗(yàn)證器在邏輯上位于所述的第一程序塊中,以便先于對(duì)所述的第二程序模塊進(jìn)行所述的過(guò)程調(diào)用之前就被執(zhí)行;以及多個(gè)指令,用于當(dāng)對(duì)所述程序模塊驗(yàn)證器的過(guò)程調(diào)用產(chǎn)生一個(gè)由所述的程序模塊驗(yàn)證器返回的驗(yàn)證否定時(shí),禁止對(duì)所述的第二程序模塊進(jìn)行所述的過(guò)程調(diào)用的執(zhí)行。
6.一個(gè)連接程序模塊的方法,包含的步驟為(A)在從一個(gè)第一程序模塊對(duì)一個(gè)第二程序模塊所做的一個(gè)過(guò)程調(diào)用之前,驗(yàn)證所述的第二程序模塊的可靠性;(B)一旦驗(yàn)證了所述的第二程序模塊的可靠性,進(jìn)行從所述的第一程序模塊對(duì)所述的第二程序模塊的過(guò)程調(diào)用;以及(C)一旦否定了所述的第一程序模塊的可靠性,禁止進(jìn)行從所述的第一程序模塊對(duì)所述的第二程序模塊的過(guò)程調(diào)用。
7.如權(quán)利要求6中所述的方法,進(jìn)一步包括(D)在進(jìn)行為響應(yīng)所述過(guò)程調(diào)用而通過(guò)所述的第一程序模塊完成執(zhí)行在所述的第二程序模塊中的一個(gè)過(guò)程之前,驗(yàn)證所述的第一程序模塊的可靠性;(E)一旦驗(yàn)證了所述第一程序模塊的可靠性,就完成執(zhí)行在所述第二程序模塊中的所述過(guò)程,以產(chǎn)生一個(gè)結(jié)果,并返回所述結(jié)果給所述的第一程序模塊;和(F)一旦否定了所述第一程序模塊的可靠性,禁止完成執(zhí)行在所述第二程序模塊中的所述過(guò)程。
8.如權(quán)利要求7所述的方法,所述步驟(D)包括用一個(gè)相應(yīng)解碼鑰來(lái)對(duì)在所述第一程序模塊中的所述第一數(shù)字標(biāo)記進(jìn)行解碼;根據(jù)所述的預(yù)定的信息摘要函數(shù)產(chǎn)生至少為所述第一程序模塊一部分的信息摘要;當(dāng)所述被解碼的數(shù)字標(biāo)記與所述的信息摘要匹配時(shí)確認(rèn)所述第一程序模塊的可靠性;以及當(dāng)所述被解碼的數(shù)字標(biāo)記與所述信息摘要不匹配時(shí)否定所述第一程序模塊的可靠性。
9.如權(quán)利要求6、7或8所述的方法,其中,步驟(C)包括終止所述第一程序模塊的執(zhí)行。
10.如權(quán)利要求6、7或8所述的方法,其中所述第一程序模塊包括一個(gè)第一數(shù)字標(biāo)記,所述的第二程序模塊包括一個(gè)第二數(shù)字標(biāo)記;所述步驟(A)包括用一個(gè)相應(yīng)的解碼鑰對(duì)在所述第二程序模塊中的所述第二數(shù)字標(biāo)記進(jìn)行解碼;根據(jù)所述預(yù)定的信息摘要函數(shù)產(chǎn)生至少為所述第二程序模塊一部分的信息摘要;當(dāng)所述被解碼的數(shù)字標(biāo)記與所述的信息摘要匹配時(shí)確認(rèn)所述第二程序模塊的可靠性;以及當(dāng)所述的被解碼的數(shù)字標(biāo)記與所述信息摘要不匹配時(shí)否定所述第二程序模塊的可靠性。
11.如權(quán)利要求6、7或8所述的方法,所述步驟(A)中包括對(duì)可信的程序模塊驗(yàn)證器做一次過(guò)程調(diào)用,所述的程序模塊驗(yàn)證器是通過(guò)驗(yàn)證所述的第二程序模塊的可靠性并通過(guò)根據(jù)所述過(guò)程調(diào)用返回一個(gè)肯定或否定的驗(yàn)證來(lái)響應(yīng)所述過(guò)程調(diào)用。
全文摘要
一個(gè)計(jì)算機(jī)系統(tǒng)有一程序模塊驗(yàn)證器和至少第一和第二程序模塊。每個(gè)程序模塊有一數(shù)字標(biāo)記和一可執(zhí)行過(guò)程。第一程序模塊還包括一對(duì)第二程序模塊的過(guò)程調(diào)用,第二程序模塊包括一響應(yīng)所述調(diào)用的可執(zhí)行過(guò)程,第一、二程序模塊都包括一對(duì)程序模塊驗(yàn)證器的過(guò)程調(diào)用和當(dāng)產(chǎn)生否定的驗(yàn)證時(shí)禁止執(zhí)行的指令。程序模塊驗(yàn)證器驗(yàn)證任一程序模塊的可靠性并返回一個(gè)肯定或否定的驗(yàn)證,當(dāng)返回否定驗(yàn)證時(shí),調(diào)用程序模塊產(chǎn)生異常并終止其執(zhí)行。
文檔編號(hào)G06F1/00GK1154515SQ9612202
公開(kāi)日1997年7月16日 申請(qǐng)日期1996年10月24日 優(yōu)先權(quán)日1995年10月26日
發(fā)明者查爾斯·E·麥克梅尼斯 申請(qǐng)人:太陽(yáng)微系統(tǒng)有限公司