專利名稱:共享名的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)系統(tǒng),特別是涉及在運(yùn)行時間向由應(yīng)用程序使用的組件提供安全性的系統(tǒng)和方法。
背景技術(shù):
在過去,應(yīng)用程序是由單個單一的二進(jìn)制文件組成。編譯器一旦生成該應(yīng)用程序,該應(yīng)用程序不再改變,直到下一版本被重新編譯并銷售。操作系統(tǒng)、硬件和市場需求的變化均取決于下一版本的實(shí)現(xiàn)和重新編譯。如今,應(yīng)用程序由若干組件構(gòu)成——另外,許多這些組件是在運(yùn)行時間被鏈接的。這些組件包括可由不同應(yīng)用程序共享的動態(tài)鏈接庫(DLL)和其它文件。這些DLL在運(yùn)行時間鏈接的應(yīng)用組件列表中列出。操作系統(tǒng)將在加載程序搜索路徑、應(yīng)用程序目錄、操作系統(tǒng)目錄或用戶指定的路徑中搜索動態(tài)鏈接庫名,以使DLL代碼可被加載入內(nèi)存用于執(zhí)行。由于這些DLL可由不同的應(yīng)用程序共享,為了一個應(yīng)用程序而對DLL的改變可以造成另一個應(yīng)用程序停止工作。
更何況,在諸如MicrosoftWindows操作系統(tǒng)之類的操作系統(tǒng)上運(yùn)行的許多應(yīng)用程序使用共享操作系統(tǒng)組件。管理人員和開發(fā)人員關(guān)于當(dāng)前MicrosoftWindows操作系統(tǒng)平臺所面臨的一個議題是精確控制作為使用的應(yīng)用程序一部分的一組動態(tài)鏈接庫和其它文件的不可能性。一個應(yīng)用程序的安裝改寫了其它應(yīng)用程序所依賴的文件而影響了這些應(yīng)用程序是極平常的。不幸的是在MicrosoftWindows操作系統(tǒng)中沒有內(nèi)建的支持來檢測何時應(yīng)用程序所依賴的一個文件已改變。
在某些情況下,組件可以更改,如果該更改的完整性可依賴的話則應(yīng)用程序仍可選擇運(yùn)行。例如,如果組件的出版商糾正了組件中的一個次要的差錯,應(yīng)用程序仍可工作而無問題。還有,如果由委托的出版商發(fā)生了版本的升級,應(yīng)用程序會期望接受版本升級并執(zhí)行該組件。然而,如果組件已被未委托的第三方更改過,執(zhí)行代碼可以造成對應(yīng)用程序正在操作的環(huán)境的軟件和硬件的損壞。某些代碼在組件名中包含了版本信息(例,fool.dll,kernel2.dll)。由于應(yīng)用程序用名字引用這些程序,名字的改變將使應(yīng)用程序終止其操作或使用駐留在系統(tǒng)中的組件的舊版本。
組件標(biāo)識的一部分是簡單、友好的文本名(例,My401KApp)。這些名字是開發(fā)商在編制組件時給予組件的。這些名字稱為簡單名。簡單名不能保證唯一且在運(yùn)行時間中沒有任何工具或任何東西可阻止復(fù)制名字以避免沖突。組件的簡單名簡單易用且在許多情況下是足夠了。特別是,個體開發(fā)商或小開發(fā)商店不必需要較復(fù)雜的名命方案。然而,許多情況下開發(fā)商必須能夠保證他們?yōu)樗麄兊慕M件選用的名字在全局上是唯一的。在COM中,通過給每個組件指定唯一的GUID而確保唯一性。但是,GUID有不少缺陷。特別是雖然GUID生成時是唯一的,但是沒有東西能防止其它開發(fā)商重新使用該GUID并用他們的代碼“替代”其他人的代碼。
因此,本領(lǐng)域中迫切需要有一種系統(tǒng)和方法可用于確保和驗(yàn)證應(yīng)用程序在運(yùn)行時間期間所使用組件的完整性。還需要一種工具用于在運(yùn)行時間驗(yàn)證組件的完整性。也需要保證這些組件名的唯一性并防止名字欺詐。
本發(fā)明的揭示本發(fā)明涉及對由應(yīng)用程序在運(yùn)行時間期間使用的組件或組裝件(例,包括元數(shù)據(jù)的組件)提供安全性及有利于完整性的系統(tǒng)和方法。本發(fā)明使用密碼學(xué)技術(shù)來方便組件間的關(guān)系。本發(fā)明使用數(shù)字簽名密鑰來確保發(fā)行的組裝件名是唯一的,因?yàn)榘l(fā)行的組裝件帶有出版商的公開密鑰。這就防止了其它出版商發(fā)行組裝件的升級版并聲稱該升級版是由同一出版商發(fā)行的。本發(fā)明保證了名字的唯一性并防止了名字的欺詐,因?yàn)樵汲霭嫔淌蔷哂信c發(fā)行的組裝件有關(guān)的公開密鑰匹配的私人密鑰的唯一出版商。由于公開密鑰存儲在每個引用中這一事實(shí),調(diào)用程序可以確保在運(yùn)行時間該調(diào)用程序在綁定的組裝是來自擁有私人密鑰的同一出版商。
在許多情況下,應(yīng)用程序可以選擇用已被改變的組裝件文件進(jìn)行操作。例如,構(gòu)建修正的改正可包括用于糾正文件中出錯或缺陷的組裝件修改文件。如果發(fā)生了對次要缺陷的修復(fù),則要求組裝件具有與原始性態(tài)一樣的應(yīng)用程序可能不工作了。而且,如果發(fā)生了主要或次要修正,則應(yīng)用程序可選擇工作,倘若這些應(yīng)用程序確實(shí)正從它們所期望的出版商處獲得了組裝件。
在本發(fā)明的一個方面,公開密鑰成為組裝件文件的表征或名字空間的一部分。對組裝件的整個內(nèi)容計算一散列值。然后用與公開密鑰匹配的私人密鑰加密該散列值。將該加密或編碼后的代碼存儲在組裝件文件的末尾。另一種方式是可將指向該經(jīng)加密或編碼的代碼的指針在加密前存儲在組裝件中的任何地方。然后將該加密或編碼代碼存儲在該指針?biāo)玫膬?nèi)存位置。另外,引用該組裝件文件的組裝件將該組裝件文件的公開密鑰標(biāo)記存儲在它自己的表征或名字空間中。該標(biāo)記是公開密鑰散列值的一個縮減數(shù)據(jù)集。在運(yùn)行時間,將該標(biāo)記與目標(biāo)組裝件中的密鑰比較以確定目標(biāo)組裝件是否來自同一出版商。使用已署名組裝件的表征中存儲的密鑰在安裝時完成簽名的驗(yàn)證。這保證了目標(biāo)組裝件來自所期望的出版商。
每個組裝件的表征都帶有標(biāo)識信息,包含了構(gòu)成組裝件的文件列表。關(guān)于每個文件的記錄信息的一部分是表征建立時文件內(nèi)容的散列值。散列值是對整個文件內(nèi)容計算的。發(fā)出該表征的程序代碼通常可以是一個負(fù)責(zé)計算散列值的編譯器或后鏈接工具。本發(fā)明可以使用安全散列算法(sha-1)計算散列值。然而,本發(fā)明可使用各種散列算法計算散列值。當(dāng)組裝件被安裝到總體組件高速緩存中時以及每次從盤片加載文件時就會驗(yàn)證文件的散列值。
按照本發(fā)明的一個方面,提供了一種簡化可由應(yīng)用程序在運(yùn)行時間使用的組裝件的安全名空間的方法。該方法包括提供一對具有公開密鑰和私人密鑰的密鑰對以及提供具有包含公開密鑰的表征的組裝件。接著對組裝件求散列值并用私人密鑰加密散列值。然后將加密的散列值附加到組裝件上。
在本發(fā)明的另一個方面,提供了一種計算機(jī)可讀媒體,具有在運(yùn)行時間應(yīng)用程序可使用的至少一個計算機(jī)可執(zhí)行組件。計算機(jī)可讀媒體包括了包括表征的組裝件,該表征含有公開密鑰和用與公開密鑰匹配的私人密鑰加密的組裝件內(nèi)容散列值。加密的散列值被附加到組裝件上。媒體還可進(jìn)一步由一網(wǎng)絡(luò)組成。
按照本發(fā)明的另一個方面,提供了一種系統(tǒng),用于簡化在運(yùn)行時間可由應(yīng)用程序使用的組裝件的安全名空間。該系統(tǒng)由第一組件和第二組件構(gòu)成,第一組件適合于在組裝件內(nèi)提供—帶有公開密鑰的表征,而第二組件適合于對組裝件的內(nèi)容計算散列值并用與公開密鑰匹配的私人密鑰加密散列值。
本發(fā)明的另一個方面涉及一種系統(tǒng),用于簡化在運(yùn)行時間期間可由應(yīng)用程序使用的組裝件的安全名空間。該系統(tǒng)包括用于提供一對具有公開密鑰和私人密鑰的密鑰對的裝置、用于在組裝件的表征中插入公開密鑰的裝置、用于計算組裝件散列值的裝置、用于用私人密鑰加密組裝件散列值的裝置以及用于將加密的散列值與組裝件關(guān)聯(lián)的裝置。
為了達(dá)到上述目的和相關(guān)目的,本發(fā)明然后包括了下文中充分描述的且特別是在權(quán)利要求中指出的特點(diǎn)。下面的描述和附圖詳細(xì)提出了本發(fā)明的某些說明性實(shí)施例。然而這些實(shí)施例僅只表明了可以使用本發(fā)明原理的一些不同方式,而本發(fā)明的意向是要包括所有這些實(shí)施例及其等效實(shí)例。從結(jié)合附圖考慮本發(fā)明的詳細(xì)描述中本發(fā)明的其它目的,優(yōu)點(diǎn)和新穎特點(diǎn)將變得更明顯。
附圖簡述
圖1示出了根據(jù)本發(fā)明的一個方面引用具有多重模塊的組裝件的一個組裝件的框圖。
圖2示出了根據(jù)本發(fā)明的一個方面具有多重模塊的一個組裝件的詳細(xì)框圖。
圖3示出了根據(jù)本發(fā)明的一個方面引用多重組裝件的一個組裝件的詳細(xì)框圖。
圖4示出了根據(jù)本發(fā)明的環(huán)境的計算機(jī)系統(tǒng)的框圖。
圖5示出了根據(jù)本發(fā)明的環(huán)境的詳細(xì)框圖。
圖6示出了根據(jù)本發(fā)明的一個方面有利于組裝件完整性的一種特定方法的流程圖。
圖7示出了根據(jù)本發(fā)明的一個方面有利于組裝件完整性的另一種方法的流程圖。
圖8a示出了根據(jù)本發(fā)明的一個方面用于生成共享名使用的密鑰對的API。
圖8b示出了根據(jù)本發(fā)明的一個方面用于把密鑰二進(jìn)制大型對象(blob)安裝入共享名CSP內(nèi)的API。
圖8c示出了根據(jù)本發(fā)明的一個方面用于從CSP中刪除密鑰對的API。
圖8d示出了根據(jù)本發(fā)明的一個方面用于釋放由共享名函數(shù)分配的內(nèi)存的API。
圖9a示出了根據(jù)本發(fā)明的一個方面用于檢索公共密鑰二進(jìn)制大型對象的API。
圖9b示出了根據(jù)本發(fā)明的一個方面用于從圖9a所示的API返回的公共密鑰二進(jìn)制大型對象。
圖9c示出了根據(jù)本發(fā)明的一個方面用于生成數(shù)字簽名的API。
圖10a示出了根據(jù)本發(fā)明的一個方面用于從組裝件中提取的公開密鑰生成標(biāo)記的API。
圖10b示出了根據(jù)本發(fā)明的一個方面用于從公開密鑰結(jié)構(gòu)生成標(biāo)記的API。
圖10c示出了根據(jù)本發(fā)明的一個方面用于驗(yàn)證共享名簽名的API。
實(shí)現(xiàn)本發(fā)明的模式現(xiàn)在參考附圖描述本發(fā)明,其中相同標(biāo)號在全文中用于指示相同的元件。本發(fā)明的描述涉及在運(yùn)行時間期間有利于由應(yīng)用程序使用的組件完整性的系統(tǒng)和方法。這些組件典型的是動態(tài)鏈接庫(DLL),但也可包括在運(yùn)行時間鏈接到應(yīng)用程序的定義文件、宣稱文件和可執(zhí)行文件。按照主題發(fā)明的至少一個方面的組裝件這里定義為包括了描述該組裝件的元數(shù)據(jù)的組件或包括了描述一個組裝件所依賴的該組裝件的元數(shù)據(jù)的組件。本發(fā)明使用密碼術(shù)技術(shù),例如散列和數(shù)字簽名來創(chuàng)建隨應(yīng)用程序使用的安全組裝件。本發(fā)明使用數(shù)字加密和簽名技術(shù)。本發(fā)明使用公開密鑰密碼術(shù)技術(shù),如Schneier,Bruce著,“Applied Cryptography Second EditionProtocols,Algorithms,and SourceCode in C;New YorkJohn Wiley & Sons,1996,通過引用結(jié)合于此。本發(fā)明使用RSA(Rivest,Shamir and Adlemen)公開密鑰算法用于數(shù)字簽名,并結(jié)合了稱之為SHA(安全散列算法)的散列算法,然而也可使用其它公開密鑰簽名方案。公開密鑰密碼術(shù)的基本概述是這樣的,給予每個開發(fā)商一對包括私人密鑰和公開密鑰的密鑰對。密鑰可以是一種接收文件的各比特并從文件中的各比特產(chǎn)生數(shù)值序列的算法。私人密鑰是分配給開發(fā)商的唯一密鑰并希望由開發(fā)商加以保密。公開密鑰通??晒╅_發(fā)商和用戶使用。公開密鑰可用于驗(yàn)證接收數(shù)據(jù)文件上的數(shù)字簽名是真實(shí)的(例如,數(shù)字簽名是用私人密鑰建立的)。文件可用私人密鑰加密而公開密鑰用于對密文解碼。本發(fā)明提供關(guān)于組裝件的頂層組裝件文件的RSA加密的SHA散列值以及存儲在頂層組裝件的元數(shù)據(jù)中的用于驗(yàn)證組裝件完整性的公開密鑰。
本發(fā)明還使用標(biāo)準(zhǔn)公開密鑰加密術(shù)解決在運(yùn)行時間名字的唯一性和名字安全性問題。用密鑰對加密的名字稱之為共享名。特別是,籍助于唯一的密鑰對并防止他人“接管名字空間”,共享名保證了名字的唯一性,因?yàn)橹挥薪M裝件的開發(fā)商具有該組裝件的私人密鑰,使得無人對其它組裝件生成相同的名字。
圖1示出了組裝件和按照本發(fā)明使用帶有數(shù)字簽名加密法的關(guān)系。第一組裝件10包括一頂層組裝件12和一模塊14。元數(shù)據(jù)部分16提供在頂層組裝件12內(nèi),包括了與第一組裝件10有關(guān)的信息。元數(shù)據(jù)部分16包括標(biāo)識信息組件17和文件驗(yàn)證摘要組件18。標(biāo)識信息17包括有關(guān)第一組裝件10的信息,同時文件驗(yàn)證摘要組件18包括有關(guān)模塊14的信息。標(biāo)識信息組件17可包括發(fā)行信息、公開密鑰、版本信息、操作系統(tǒng)信息以及關(guān)于第一組件10的許多其它類型信息。公開密鑰形成了可以在運(yùn)行時間驗(yàn)證的組裝件名字的一部分。文件驗(yàn)證摘要組件18可包括模塊14的散列值。標(biāo)識信息組件17和文件驗(yàn)證摘要組件18中的信息可用于在運(yùn)行時間前或運(yùn)行時間時驗(yàn)證該組裝件未被修改。組裝件摘要19提供在頂層組裝件12的末尾。頂層組裝件摘要19可包含該頂層組裝件12內(nèi)容的散列值。隨后用與位于標(biāo)識信息組件17中的公開密鑰匹配的私人密鑰對頂層組裝件加密。加密的散列值可用于驗(yàn)證頂層組裝件12的內(nèi)容尚未被修改,同時文件驗(yàn)證摘要組件18中的散列值可用于驗(yàn)證模塊14尚未被修改。
可以理解大部分應(yīng)用程度是由若干組裝件構(gòu)成。其中一些在運(yùn)行時引用其它組裝件。因而,圖1還示出了提供的第二組裝件20要依賴于或引用第一組裝件10。元數(shù)據(jù)部分22提供在第二組裝件20中,它包含了關(guān)于第二組件20的信息,以及還有在運(yùn)行時間第二組裝件要引用的有關(guān)第一組裝件10的信息。元數(shù)據(jù)部分22包括標(biāo)識信息組件24和公開密鑰標(biāo)記摘要組件26。標(biāo)識信息組件24包括有關(guān)第二組裝件20的信息,同時引用驗(yàn)證摘要組件26包括有關(guān)第一組裝件10的信息。標(biāo)識信息組件24可包括發(fā)行信息、公開密鑰、版本信息、操作系統(tǒng)信息以及有關(guān)第二組裝件20的許多其它類型信息。
公開密鑰標(biāo)記摘要組件26包括第一組裝件10的公開密鑰的縮減散列值。典型地,使用安全散列算法(sha-1)的散列值是160比特的字。本發(fā)明使用該散列值的前64比特或8字節(jié)來驗(yàn)證第一組裝件10的公開密鑰與存儲在第二組裝件20中的公開密鑰相匹配。公開密鑰標(biāo)記摘要組件26中的信息在運(yùn)行時間前或在運(yùn)行時間時用于驗(yàn)證第二組裝件20是來自所期望的(例該私人密鑰擁有者)的出版商。因而,如果信息組件17中的公開密鑰的前64比特與公開密鑰標(biāo)記摘要26中的公開密鑰標(biāo)記匹配,就有某種程度的確定性認(rèn)為第一組裝件10的確來自匹配該公開密鑰的私人密鑰的擁有者。
圖2更詳細(xì)示出了按照本發(fā)明的一個組裝件的組件。組裝件30由頂層組裝件40、第一模塊45和第二模塊50組成。頂層組裝件40包括被稱為組裝件表征的元數(shù)據(jù)部分42。組裝件表征42包括標(biāo)識信息,諸如下列項(xiàng)公開密鑰、主版本、次版本、修訂版、構(gòu)成和模塊信息。其它信息也可放在標(biāo)識信息中(例如,操作系統(tǒng),地點(diǎn))。模塊信息是構(gòu)成該組裝件30的模塊以及每個模塊文件內(nèi)容散列值的列表。在運(yùn)行時間前或運(yùn)行時間時,可使用相同的散列算法把文件散列值和模塊散列值與第一模塊45和第二模塊50的實(shí)際散列值相校驗(yàn),以確定組裝件30的完整性。頂層組裝件40包括位于文件末尾的頂層組裝件散列值43。頂層組裝件散列值用與標(biāo)識信息中公開密鑰相匹配的開發(fā)商私人密鑰加密。標(biāo)識信息中的公開密鑰可用于將頂層組裝件散列值43解碼成可與文件其余內(nèi)容的實(shí)際散列值相比較的散列值。然后可以確定頂層組裝件40是否出現(xiàn)由未授權(quán)來源所作的任何改變。如果組裝件30已改變,調(diào)用組裝件30的應(yīng)用程序可選擇自動中止。
圖3更詳細(xì)示出了按照本發(fā)明的引用另一組裝件的一個組裝件的構(gòu)成。引用組裝件70(標(biāo)為組裝件B)引用第一被引用組裝件80(標(biāo)為組裝件C)及第二被引用組裝件90(標(biāo)為組裝件D)。引用組裝件70包括組裝件表征72,具有的標(biāo)識信息類似于圖2所述的頂層組裝件標(biāo)識信息。組裝件表征72還包括了從屬信息,該信息包括了引用組裝件70在執(zhí)行期間所依賴的各組裝件的列表。該組件列表還包括了用于每一組裝件的公開密鑰標(biāo)記,它是在被引用組裝件表征中公開密鑰的縮減散列值。第一被引用組裝件80具有組裝件表征82,包括標(biāo)識和從屬信息以及組裝件摘要83。從屬信息的存在通知應(yīng)用程序第一被引用組裝件80還依賴于至少一個其它組裝件(未示出)。第一被引用組裝件80不具有任何模塊并且因而標(biāo)識信息不包括用于任何模塊的散列值。
第二被引用組裝件90具有組裝件表征94,它包括了標(biāo)識信息,但不具有任何從屬信息。因而,第二被引用組裝件90不依賴于任何其它組裝件而執(zhí)行。第二被引用組裝件90由頂層組裝件92、第一模塊90及第二模塊98組成。標(biāo)識信息包括組裝件90的模塊以及每一模塊整個內(nèi)容的散列值的列表。組裝件摘要95提供在頂層組裝件92的末尾。組裝件摘要包括頂層組裝件92的其余文件內(nèi)容的散列值。該散列值用組裝件作者的私人密鑰加密。組裝件表征94中的私人密鑰和公開密鑰形成了一對具有唯一數(shù)學(xué)關(guān)系的密鑰對。組裝件70、80和90的整個內(nèi)容可在運(yùn)行時間被加載到計算機(jī)系統(tǒng)的一個高速緩存中,而引用組裝件中的公開密鑰標(biāo)記可用于驗(yàn)證被引用組裝件中的公開密鑰。組裝件摘要中的加密標(biāo)記可使用組裝件表征中的公開密鑰來解碼并隨后與頂層組裝件中運(yùn)作的散列值比較以驗(yàn)證該組裝件尚未被竄改過。
圖4和以下的討論旨在提供對可實(shí)現(xiàn)本發(fā)明的適當(dāng)?shù)挠嬎銠C(jī)環(huán)境的簡要的一般描述。雖然將在可在個人計算機(jī)或服務(wù)器計算機(jī)上運(yùn)行的計算機(jī)程序的計算機(jī)可執(zhí)行指令的一般內(nèi)容中描述本發(fā)明,但本領(lǐng)域的技術(shù)人員將認(rèn)識到本發(fā)明也可與其它程序模塊組合而實(shí)現(xiàn)。通常,程序模塊包括例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)等等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。而且,本領(lǐng)域的技術(shù)人員還將認(rèn)識到本發(fā)明也可用其它的計算機(jī)系統(tǒng)配置來實(shí)現(xiàn),包括單處理器或多處理器計算機(jī)系統(tǒng)、微型計算機(jī)、大型計算機(jī)、手持計算裝置、基于微處理器或可編程消費(fèi)電子設(shè)備及類似產(chǎn)品。本發(fā)明所展示的實(shí)施例還可在分布式計算環(huán)境中實(shí)現(xiàn),其中任務(wù)是由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備來實(shí)現(xiàn)的??墒?,本發(fā)明的某些實(shí)施例可由獨(dú)立的計算來實(shí)現(xiàn)。在分布式計算環(huán)境中,程序模塊可位于本地和遠(yuǎn)程存儲器兩者的存儲裝置中。
參考圖4,用于實(shí)現(xiàn)本發(fā)明的一個示例系統(tǒng)包括一臺常規(guī)的個人計算機(jī)或服務(wù)器計算機(jī)120,它包括處理單元121、系統(tǒng)存儲器122和系統(tǒng)總線123,系統(tǒng)總線123把包括系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件耦合到處理單元121。處理單元可以是任何各種商用處理器,包括來自Intel和其它公司(包括Cyrix、AMD和Nexgen)的Intel X86、奔騰和兼容微處理器;來自Digital的Alpha;來自MIPS Technology、NEC、IDT、Siemens及其它公司的MIPS;以及來自IBM和Motorola的PowerPC。雙微處理器和其它多處理器結(jié)構(gòu)也可用作處理單元121。
系統(tǒng)總線可以是若干種總線結(jié)構(gòu)中的任何一種,包括存儲器總線或存儲器控制器、外設(shè)總線以及使用各種常規(guī)總線結(jié)構(gòu),諸如PCI、VESA、Microchannel、ISA和EISA(只列出幾個)中任何一種的局部總線。系統(tǒng)存儲器包括只讀存儲器(ROM)124以及隨機(jī)存取存儲器(RAM)125。ROM 124中存儲了基本輸入/輸出系統(tǒng)(BIOS),它包含了例如在啟動期間幫助在計算機(jī)120內(nèi)各元件間轉(zhuǎn)移信息的基本例行程序。
計算機(jī)120進(jìn)一步還包括了硬盤驅(qū)動器127、例如對可移動盤129讀寫的磁盤驅(qū)動器128、以及例如用于從CD-ROM盤131讀取或?qū)ζ渌饷襟w讀寫的光盤驅(qū)動器130。硬盤驅(qū)動器127、磁盤驅(qū)動器128以及光盤驅(qū)動器130分別通過硬盤驅(qū)動器接口132、磁盤驅(qū)動器接口133和光盤驅(qū)動器接口134與系統(tǒng)總線123相連。驅(qū)動器和它們相關(guān)的計算機(jī)可讀媒體為服務(wù)器計算機(jī)120提供了對數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、計算機(jī)可執(zhí)行指令等的非易失性存儲。雖然上述計算機(jī)可讀媒體指的是硬盤、可移動磁盤及CD,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解計算機(jī)可讀的其它種類媒體,諸如磁帶盒、快閃存儲卡、數(shù)字視頻盤、Bernoulli盒式存儲器及類似存儲器也可用于示例的操作環(huán)境中。
一些程序模塊也可存儲在驅(qū)動器和RAM 125中,包括操作系統(tǒng)135、一個或多個應(yīng)用程序136、其它程序模塊137及程序數(shù)據(jù)138。所示計算機(jī)中的操作系統(tǒng)可以是Microsoft Windows NT服務(wù)器操作系統(tǒng),加上前面提到的Microsoft事務(wù)服務(wù)器、Microsoft Windows 95,Microsoft Windows 98或Microsoft Windows 2000。
用戶可以通過鍵盤140或指點(diǎn)設(shè)備如鼠標(biāo)142將命令和信息輸入計算機(jī)120。其它輸入設(shè)備(未示出)還可包括話筒、操縱桿、游戲板、衛(wèi)星轉(zhuǎn)盤、掃描器及類似裝置。這些或其它輸入設(shè)備常通過耦合到系統(tǒng)總線的串行端口接口146連接到處理單元121,但也可以通過其它接口,例如平行端口、游戲端口或通用串行總線(USB)來連接。監(jiān)視器147或其它類型顯示設(shè)備也通過接口,例如視頻適配器148連接到系統(tǒng)總線123。除了監(jiān)視器外,計算機(jī)通常還包括其它外輸出裝置(未示出),例如揚(yáng)聲器和打印機(jī)。
計算機(jī)120也可工作在聯(lián)網(wǎng)環(huán)境中,使用邏輯連接與一個或多個遠(yuǎn)程計算機(jī),例如遠(yuǎn)程服務(wù)器或客戶機(jī)計算機(jī)149相連。遠(yuǎn)程計算機(jī)149可以是工作站、服務(wù)器計算機(jī)、路由器、對等裝置或其它公共網(wǎng)絡(luò)節(jié)點(diǎn),并且典型地包括了許多或所有的上述與計算機(jī)120相關(guān)的元件,雖然圖4中僅展示了存儲器存儲裝置150。圖4所示的邏輯連接包括局域網(wǎng)(LAN)151及廣域網(wǎng)(WAN)152。這樣的組網(wǎng)環(huán)境在辦公室、企業(yè)內(nèi)計算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)及因特網(wǎng)中是常見的。
當(dāng)用于LAN網(wǎng)絡(luò)環(huán)境中時,計算機(jī)120通過網(wǎng)絡(luò)接口或適配器153連接到局域網(wǎng)151。當(dāng)用于WAN網(wǎng)絡(luò)環(huán)境中時,服務(wù)器計算機(jī)120典型地包括了調(diào)制解調(diào)器154、或連接到LAN上的通信服務(wù)器,或具有用于在廣域網(wǎng)152,例因特網(wǎng)上建立通信的其它裝置。調(diào)制解調(diào)器154可以是內(nèi)置式或外置式的,通過串行端口接口146連接到系統(tǒng)總線123。在聯(lián)網(wǎng)環(huán)境中,所述的與計算機(jī)320或它的幾個部分有關(guān)的程序模塊可以存儲在遠(yuǎn)程存儲器存儲裝置中。將會理解所示的網(wǎng)絡(luò)連接是示例性的,且還可以使用在計算機(jī)之間建立通信鏈路的其它裝置。
根據(jù)本領(lǐng)域熟練的計算機(jī)編程人員的實(shí)踐,本發(fā)明下面的描述將參照由計算機(jī)120執(zhí)行的動作和操作的符號表示而進(jìn)行,除非另外指出。這類動作和操作有時被稱為是被計算機(jī)執(zhí)行的。將理解這些動作和符號表示的操作包括由處理單元121對代表數(shù)據(jù)比特的電信號的操作,產(chǎn)生電信號表示的最終變換或壓縮,以及對計算機(jī)存儲系統(tǒng)(包括系統(tǒng)存儲器122、硬驅(qū)動器127、軟盤129及CD-ROM 131)中存儲器位置處的數(shù)據(jù)比特的維護(hù)并由此重新配置或以不同的方式改變計算機(jī)系統(tǒng)的操作,以及其它的信號處理。數(shù)據(jù)比特被維護(hù)的存儲器位置是具有與數(shù)據(jù)比特對應(yīng)的特定電、磁或光特性的物理位置。
圖5更詳細(xì)說明了關(guān)于本發(fā)明的環(huán)境。處理器200通過總線225耦合到存儲媒體220。處理器還通過網(wǎng)線215耦合到網(wǎng)路210。網(wǎng)絡(luò)210能使處理器用其它遠(yuǎn)程計算機(jī)檢索和發(fā)送組裝件及其它組件。存儲器媒體220包括獨(dú)立于存儲器其余部分的高速緩沖存儲器230。高速緩沖存儲器230是應(yīng)用程序232執(zhí)行的地方。應(yīng)理解到其余的存儲器可以是二級高速緩存、ROM、RAM或一些固定或軟盤媒體。散列組件260駐留在存儲器媒體220上用于在組裝件開發(fā)階段插入組裝件的散列值。然而散列組件260可以在應(yīng)用程序和組裝件初始使用和測試期間或由管理員在隨后時間插入散列值。
數(shù)字簽名組件265提供用于建立組裝件的密鑰對。數(shù)字簽名組件265還將公開密鑰插入被開發(fā)的組裝件的表征中。數(shù)字簽名組件265使用散列組件260求出組裝件內(nèi)容的散列值并隨后用私人密鑰對該散列值加密,私人密鑰與存儲在組裝件表征中的公開密鑰一起組成密鑰對。散列組件260和數(shù)字簽名組件265可以是作為操作系統(tǒng)275一部分駐留的應(yīng)用程序接口(API)。然而,散列組件260和數(shù)字簽名組件265可以是應(yīng)用程序232的一部分。更進(jìn)一步,散列組件260和數(shù)字簽名組件265可以由一些不同的組件組成,例如獨(dú)立的用于散列、版本、密鑰對創(chuàng)建和插入功能的組件。
應(yīng)用程序232被部署并加載到高速緩存230中。應(yīng)用程序232與加載器250通信,加載器250定位由應(yīng)用程序232指定的并由應(yīng)用程序232在運(yùn)行時間使用的組裝件,同時將這些組裝件加載到高速緩存230中。在本例中,第一組裝件234(標(biāo)為組裝件A)及第二組裝件236(標(biāo)為組裝件B)被加載到高速緩存230中。第二組裝件236包括第一模塊238和第二模塊240,它們也被加載到高速緩存230中。第一組裝件234和第二組裝件236可以作為操作系統(tǒng)275的一部分的共享組裝件駐留、可以作為庫文件駐留在遠(yuǎn)程計算機(jī)上、可以作為應(yīng)用程序232的一部分駐留在目錄中或駐留在其它應(yīng)用程序內(nèi)。
綁定組件280也駐留在存儲器媒體220中。綁定組件280提供綁定的策略并用于對處理共享組裝件的應(yīng)用程序進(jìn)行管理。綁定組件280可決定是否綁定到組裝件的原始版、升級版或標(biāo)準(zhǔn)版。例如,第一組裝件234和第二組裝件236可具有相同的組裝件名,其中第二組裝件236是第一組裝件234的升級版。而且兩種組裝件都可由加載器250加載到高速緩存230中。綁定組件280隨后可確定根據(jù)綁定組件280中定義的綁定策略是將應(yīng)用程序232綁定到第一組裝件234還是綁定到第二組裝件236。綁定組件280可以允許具有相同名字的組裝件并列駐留在系統(tǒng)中并且給予應(yīng)用程序232、開發(fā)商或管理員控制作出關(guān)于要遵循何種合適綁定策略的決策能力。
驗(yàn)證組件270駐留在存儲器媒體220中。調(diào)用驗(yàn)證組件以讀取組裝件中的表征、將密鑰值與密鑰標(biāo)記比較、使用公開密鑰解碼加密的散列值以及調(diào)用可用于組裝件散列值的散列算法。驗(yàn)證組件270然后將組裝件上已解碼的加密散列值與組裝件上運(yùn)行的實(shí)際散列值比較。驗(yàn)證組件270隨后通知應(yīng)用程序232組裝件的作者是否是私人密鑰擁有者或者組裝件是否發(fā)生了任何變化。驗(yàn)證組件270接著決定是否要根據(jù)由綁定組件280設(shè)定的綁定策略校驗(yàn)版本和出版商信息。在本發(fā)明的另一種方面,驗(yàn)證組件保留了一張應(yīng)用程序在初始部署和測試期間使用的組裝件的數(shù)字簽名和散列值的表。驗(yàn)證組件隨后可運(yùn)行組裝件上的散列值并將該散列值與表中找到的散列值比較。驗(yàn)證組件270可以是作為操作系統(tǒng)一部分駐留的應(yīng)用程序接口(API)或者可以是應(yīng)用程序232的一部分。
應(yīng)理解上述組件的例子描述為是獨(dú)立的僅出于說明的目的。應(yīng)懂得各種組件可以集成在其它組件中而仍保持上述的功能性。而且以上描述只是組件如何互動以實(shí)現(xiàn)本發(fā)明的一個例子,其它的例子也可以用于實(shí)現(xiàn)本發(fā)明。
圖6示出了用于確保和驗(yàn)證具有模塊的組裝件的完整性的方法。在步驟300,提供的組裝件至少具有一個模塊。在步驟310,為組裝件的頂層組裝件提供了包括公開密鑰的標(biāo)識信息并且該公開密鑰還被存儲在存儲媒體中。在步驟320中,提供頂層組裝件的整個文件內(nèi)容的散列值,然后用與公共密鑰一起構(gòu)成密鑰對的私人密鑰對該散列值加密并且將加密后的值附加到組裝件的末尾。應(yīng)用程序232和由應(yīng)用程序使用的組裝件現(xiàn)在可以加載到高速緩存230中用于執(zhí)行。在步驟330,從頂層組裝件的標(biāo)識信息中讀取公開密鑰并用于解碼加密的散列值,這樣解碼所得的散列值就可與頂層組裝件中的實(shí)際散列值比較。在步驟340,確定組裝件的內(nèi)容是否已改變。如果該組裝件已改變(YES),應(yīng)用程序在步驟345處中止。如果組裝件未改變(NO),在步驟350將表征中的公開密鑰與存儲媒體中存儲的公開密鑰比較。公開密鑰的比較也可以在解決一個組裝件對另一個組裝件的引用時進(jìn)行。在步驟360,驗(yàn)證組件275確定公開密鑰是否匹配。如果出版商不是同一出版商或原始出版商(N0),應(yīng)用程序在步驟365處中止。如果出版商是同一出版或或原始出版商(YES),在步驟370求出模塊的散列值并用存儲在標(biāo)識信息中的散列值對該值校驗(yàn),執(zhí)行該組裝件。
圖7示出了用于確保和驗(yàn)證由其它組裝件引用的組裝件的完整性的特定方法。在步驟400,提供的組裝至少引用一個其它組裝件。在步驟410,向被引用的組裝件提供包括公開密鑰的標(biāo)識信息。在步驟420,提供被引用組裝件的散列值并用與公開密鑰匹配的私人密鑰加密該散列值,并將加密后的散列值附加在被引用組裝件的末尾。在步驟430,向組裝件提供從屬信息,從屬信息包括了所有被引用組裝件及與每個被引用組裝件對應(yīng)的公開密鑰的公開密鑰標(biāo)記的列表?,F(xiàn)在可由加載器250將應(yīng)用程序232和應(yīng)用程序使用的組裝件加載到高速緩存230中用于執(zhí)行。在步驟440,讀入被引用組裝件的公開密鑰并用公開密鑰對加密的散列值解碼,并且將解碼后的加密散列值與被引用組裝件上運(yùn)行的實(shí)際散列值比較。在步驟450,確定任何被引用組裝件的內(nèi)容是否已改變。如果至少一個被引用組裝件已改變(YES),應(yīng)用程序在步驟455中止。如果沒有任何被引用的組裝件有改變(NO),在步驟460,將引用組裝件中的公開密鑰標(biāo)記與被引用組裝件中的公開密鑰比較。在步驟470,驗(yàn)證組件275確定被引用組裝件的出版商是否同一出版商或原始出版商。如果出版商不是原始出版商(NO),應(yīng)用程序在步驟475中止。如果出版商是原始出版商(YES),在步驟480驗(yàn)證每個被引用組裝件的模塊并執(zhí)行組裝件。
圖8-10描述了適用于提供必要的加密術(shù)功能以利于跨工具實(shí)現(xiàn)共享名的簡單API以及運(yùn)行時間。當(dāng)前的例子移去了許多與使用密碼術(shù)服務(wù)提供器(CSP)、密鑰管理和數(shù)字簽名/驗(yàn)證操作相關(guān)的復(fù)雜性。當(dāng)前的API例子還代表了一組可以移植到各種不同平臺的API。
共享名生成要求在開發(fā)平臺上對公開/私人密鑰對生成、散列、數(shù)字簽名及簽名驗(yàn)證的支持。運(yùn)行時間平臺僅要求散列和簽名驗(yàn)證。API分成允許適合于對開發(fā)系統(tǒng)的支持和對運(yùn)行時間系統(tǒng)的支持。當(dāng)前API的例子假設(shè)對所有加密操作(例“Microsoft Base Cryptographic Provider Vl.0”)實(shí)現(xiàn)預(yù)指定CSP、RSA簽名算法和SHA-1散列算法。CryptoAPI函數(shù)可以被提供為非管理的C代碼接口,如果成功該函數(shù)返回TRUE,如果出錯則返回FALSE。
當(dāng)前的API例子可以支持由編譯器銷售商來生成和管理密鑰。當(dāng)前API的例子被設(shè)計成為普通開發(fā)情景提供所需的靈活性然而仍是容易使用的。使用這些API,編譯器有可能生成共享名加密密鑰對,并檢索可被容易地跨開發(fā)平臺存儲和移動的一種表示(可移值密鑰二進(jìn)制大型對象)。還可能使共享名密鑰加密對與項(xiàng)目關(guān)聯(lián),并將它用于共享名生成。密鑰對不必永久地安裝在用于共享名生成的加密服務(wù)提供器(CSP)中,這樣就可容易地適應(yīng)讓每個項(xiàng)目使用不同的密鑰對。此外,例子API提供了確信共享名密鑰操作將不會因用戶機(jī)器上的其它操作而影響加密功能的使用。
圖8a示出的函數(shù)用于為共享名使用創(chuàng)建新密鑰對并將該密鑰對輸出給調(diào)用程序。容器名是用戶定義的串。該函數(shù)允許用戶定義名字使得可以管理多重共享名密鑰對(例如,project 1對project 2,test對deploy)。參數(shù)dw Flags被用于控制任選項(xiàng)動作。對這一版本僅有的定義標(biāo)志是SN_LEAVE_KEY(值為1)。如果設(shè)定,則安裝的密鑰對將留在共享名CSP中。圖8a中的函數(shù)會嘗試用所提供的前綴為“SNK”的容器名來創(chuàng)建一新的簽名密鑰對。前綴SNK對于調(diào)用應(yīng)用程序?qū)⑹遣豢梢姷牟⒈挥糜谔峁┮环N好的確信,即所提供的容器名將不會與不同應(yīng)用程序所用的容器名發(fā)生沖突??梢允褂昧硗獾那熬Y而不脫本發(fā)明的范圍。生成的密鑰將被標(biāo)記成可供輸出(如果受CSP支持),而且公開/私人密鑰在未加密的密鑰二進(jìn)制大型對象(keyblob)中被輸出。這密鑰被返回給調(diào)用程序。該keyblob可以用對調(diào)用應(yīng)用程序方便的任何方式來存儲。如果被修改,它將不再能使用。
圖8b示出的函數(shù)可用于將可移值的密鑰二進(jìn)制大型對象(keyblob)安裝在機(jī)器CSP中。其目的是要支持缺省共享名密鑰的安裝。這一函數(shù)試圖用所提供的容器名將密鑰二進(jìn)制大型對象中提供的密鑰對安裝到共享名CSP中。正如上面說明的,容器名可透明地加入前綴“SNK”以最小化與其它應(yīng)用程序密鑰發(fā)生沖突的可能性。如果容器名已存在或提供了一不合法的密鑰二進(jìn)制大型對象,返回一錯誤。
圖8c示出的函數(shù)可用于從CSP中刪除共享名密鑰對。如果在密鑰生成時SN_LEAVE_KEY選項(xiàng)被選中,或該密鑰隨后被安裝到CSP中,這函數(shù)將是僅有的需要。這函數(shù)將獲取帶有標(biāo)志CRYPT_DELETEKEYSET的給定密鑰容器名的共享名CSP環(huán)境。所供給的容器名可在這一操作前冠以前綴“SNK”以避免與其它應(yīng)用程序發(fā)生潛在的名字沖突。圖8d示出的函數(shù)用于釋放由圖8a中所示的共享名函數(shù)所分配的存儲器。
在安全地定義一共享名名字空間中,包含組裝件元數(shù)據(jù)的可移植可執(zhí)行(PE)文件用與定義名字空間的公共密鑰對應(yīng)的私人密鑰來簽名。開發(fā)環(huán)境可執(zhí)行在生成一共享名中所需的操作。首先,檢索出共享名公開密鑰二進(jìn)制大型對象。在元數(shù)據(jù)部分保留出空間以存放該密鑰二進(jìn)制大型對象并將它插入??扇芜x地,共享名公開密鑰二進(jìn)制大型對象可被項(xiàng)目系統(tǒng)存儲,使得在其它組裝件中創(chuàng)建引用時可利用該二進(jìn)制大型對象。其次,檢索出共享名簽名二進(jìn)制大型對象的大小。在PE文件中分配空間以容納該簽名。隨后可將PE文件保存到盤片上。然后生成共享名簽名二進(jìn)制大型對象。該調(diào)用程序?qū)⑻峁㏄E文件和共享名密鑰以供使用。簽名函數(shù)將計算簽名,并可任選地將它插入到PE文件中被定義的部分。圖9a-9c示出了支持上述操作的各種API。在每個函數(shù)中,共享名密鑰對可作為可移值密鑰二進(jìn)制大型對象,或作為對早已安裝在共享名CSP中的密鑰對的容器名引用而被提供。共享名CSP、散列算法和簽名算法可基于默認(rèn)的機(jī)器設(shè)置。
圖9a示出了支持對公開密鑰二進(jìn)制大型對象檢索的方法。該函數(shù)將試圖獲取帶有所提供的szContainer名的共享名CSP環(huán)境。正如對于前面所述的API那樣,容器名將被悄然冠上前綴“SNK”。如果pbKeyBlob為NULL(空),則認(rèn)為密鑰對已安裝在CSP中,所以容器必定存在且它必定包含了與簽名算法相關(guān)聯(lián)的公共密鑰對。如果pbKeyBlob為non-Null(非空),則用CRYPT_NEWKEYSET獲取CSP。在這種情況下,如果存在容器名則返回一出錯信息。如果成功地獲取了CSP,則可輸入密鑰二進(jìn)制大型對象中的密鑰對。在這種情況下,將在函數(shù)返回前刪除密鑰對。圖9b示出了經(jīng)編碼的返回的PublicKeyBlob。
圖9c示出了支持簽名操作的API。它可被用于檢索簽名二進(jìn)制大型對象的大小,這樣就可以分配PE文件中的空間。然后可把它用于生成簽名。該函數(shù)可任意地將簽名直接寫入PE文件或?qū)⒑灻M(jìn)制大型對象返回給調(diào)用程序。這一函數(shù)將試圖獲取帶有所提供的szContainer名的共享名CSP環(huán)境。正如前面所討論的,容器名可以被悄然冠上前綴“SNK”。如果pbKeyBlob為NULL,則認(rèn)為密鑰對已安裝在CSP中,故容器已存在且它包含了與簽名算法相關(guān)聯(lián)的公開密鑰對。如果pbKeyBlob為non-NULL,則用CRYPT_NEWKEYSET獲取CSP。在這種情況下,容器名應(yīng)該不存在。如果成功獲取CSP,則輸入密鑰二進(jìn)制大型對象中的密鑰對。在這種情況下,將在函數(shù)返回前刪除密鑰對。如果szFilePath為NULL,它指示出只返回簽名二進(jìn)制大型對象的大小。這大小被返回到由*pcbSignatureBlob指向的位置內(nèi)。如果szFilePath為non-NULL,則對PE文件求散列值并且用私人密鑰對該散列值簽名。如果ppbSignatureBlob為NULL,這個函數(shù)將把簽名二進(jìn)制大型對象插入PE的保留部分中并執(zhí)行任何所需的PE修整(例CRC)。如果調(diào)用程序希望處置簽名二進(jìn)制大型對象和它在PE文件中的插入,則ppbSignatureBlob應(yīng)當(dāng)是一個有效的指向一指針變量的指針。
圖10a-10c示出了創(chuàng)建-固定大小的“標(biāo)記”以引用共享名名字空間和進(jìn)行簽名驗(yàn)證。這可用來自與名字空間相關(guān)的公開密鑰的散列值來計算。這一散列操作用于縮減與密鑰大小相關(guān)的標(biāo)記的大小,提供具有高度確信的唯一標(biāo)記(統(tǒng)計上唯一)使得偽造共享名極其困難。SHA-1散列函數(shù)具有所希望的特性且可供使用,因?yàn)槲覀冊谏晒蚕砻幸巡捎昧怂挠梅?。SHA-1的一個缺點(diǎn)是它生成一個160比特的值。這遠(yuǎn)小于典型的RSA簽名密鑰(512比特或更大),但是大于某些其它算法例如ECC之類通常使用的密鑰大小。為了縮減標(biāo)記的大小,低數(shù)量級64比特的SHA-1散列值將被用作標(biāo)記值。圖10a示出了一個用于創(chuàng)建標(biāo)記的函數(shù),其中公共密鑰二進(jìn)制大型對象是從PE文件中被引用的組裝件表征(元數(shù)據(jù)中的PublicKeyBlob)中提取的。圖10b示出了希望從公開密鑰二進(jìn)制大型對象結(jié)構(gòu)生成該標(biāo)記的一個函數(shù)。
圖10c示出的一個驗(yàn)證函數(shù),它使用共享名公開密鑰來驗(yàn)證共享名簽名二進(jìn)制大型對象。這一操作要求對包含組裝件表征的PE文件的引用。如果這一函數(shù)返回TRUE,則簽名被驗(yàn)證,否則它返回FALSE且應(yīng)不予考慮該共享名。szFilePath應(yīng)當(dāng)是對PE文件的合法引用,且它應(yīng)該包含元數(shù)據(jù)中的一個PublicKeyBlob結(jié)構(gòu)和PE文件中為此目的保留的部分中的一個共享名簽名blob。該函數(shù)使用在SharedNameSignatureGeneration()中所用的相同算法來計算PE文件的散列值。
驗(yàn)證涉及對散列值、簽名和公開密鑰的操作,這些都依賴于所用的算法。工具(tools)使用加密幫助軟件API和組裝件元數(shù)據(jù)API將共享名指定給組裝件。對具有共享名的組裝件的引用(AssemblyRefs)包含了一個“標(biāo)記”,該“標(biāo)記”代表了用于生成被引用組裝件中的共享名所用的公開密鑰。這一標(biāo)記在綁定時有助于定位所需的組裝件。
當(dāng)組裝件被放置在本地組裝件高速緩存中時可由運(yùn)行時間來驗(yàn)證共享名簽名。由于驗(yàn)證是在高速緩存加載時完成,綁定到具有共享名的組裝件僅要求密鑰等效性校驗(yàn)。作為被引用的一部分所記錄的共享名標(biāo)記可以被包括在高速緩存查找表中。另一種方式,如果對于該特定密鑰已有定義在共享名上的規(guī)定代碼訪問安全政策則可在加載時驗(yàn)證簽名。
本發(fā)明已就編程方法和/或計算機(jī)結(jié)構(gòu)和以特定的例子作了說明,然而應(yīng)當(dāng)理解可以使用適合于實(shí)現(xiàn)本發(fā)明的各種編程方法和/或計算機(jī)結(jié)構(gòu)且都應(yīng)包括本所附權(quán)利要求的范圍內(nèi)。
本發(fā)明已參照了本發(fā)明的較佳方面作了描述。很明顯一旦閱讀和理解了前面的詳細(xì)描述可以作出其它的修改和變動。本發(fā)明應(yīng)當(dāng)解釋為包括所有此類修改,變動及其等價品。
工業(yè)應(yīng)用本發(fā)明在計算機(jī)和計算機(jī)軟件領(lǐng)域具有工業(yè)應(yīng)用性。
權(quán)利要求
1.一種在運(yùn)行時間期間有利于應(yīng)用程序使用的組裝件的安全名字空間的方法,其特征在于,包括下述步驟提供具有公開密鑰和私人密鑰的密鑰對;向該組裝件提供一包含有所述公開密鑰的表征;對該組裝件求散列值;用所述私人密鑰加密該組裝件的散列值;以及將該加密的散列值與該組裝件相聯(lián)系。
2.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括了提供一引用組裝件的步驟,該引用組裝件所引用的組裝件具有包含一公開密鑰標(biāo)記的表征。
3.如權(quán)利要求2所述的方法,其特征在于,進(jìn)一步包括下述步驟通過用公開密鑰對加密的散列值進(jìn)行解碼以確定該組裝件的內(nèi)容是否已被修改,確定該組裝件內(nèi)容的實(shí)際散列值,并將解碼后的加密散列值與實(shí)際散列值比較。
4.如權(quán)利要求3所述的方法,其特征在于,進(jìn)一步包括確定該組裝件的出版商是否是所述私人密鑰的擁有者的步驟。
5.如權(quán)利要求4所述的方法,其特征在于,確定組裝件的出版商是否是密鑰對的原始擁有者的步驟包括將引用組裝件中的公開密鑰標(biāo)記與存儲在組裝件的表征中的公開密鑰進(jìn)行比較的步驟。
6.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括下述步驟通過用公開密鑰對加密的散列值進(jìn)行解碼以確定該組裝件的內(nèi)容是否已被修改,確定該組裝件內(nèi)容的實(shí)際散列值,并將解碼后的加密散列值與實(shí)際散列值比較。
7.如權(quán)利要求6所述的方法,其特征在于,進(jìn)一步包括確定該組裝件的出版商是否是所述密鑰對的原始擁有者的步驟。
8.如權(quán)利要求7所述的方法,其特征在于,確定組裝件的出版商是否是密鑰對的原始擁有者的步驟包括將公開密鑰存儲在存儲媒體中,并將存儲媒體中的公開密鑰與所述表征中的公開密鑰進(jìn)行比較的步驟。
9.一種計算機(jī)可讀媒體,具有至少一個在運(yùn)行時間可由應(yīng)用程序使用的計算機(jī)可執(zhí)行組件,其特征在于,它包括一個包括表征的組裝件,該表征包含一公開密鑰和由私人密鑰加密的所述組裝件內(nèi)容的散列值,私人密鑰和公開密鑰形成一密鑰對,加密的散列值是對該組裝件的引用。
10.如權(quán)利要求9所述的計算機(jī)可讀媒體,其特征在于,進(jìn)一步包括一引用該組裝件的引用組裝件,該引用組裝包括一包含所述組裝件的公開密鑰標(biāo)記的表征。
11.如權(quán)利要求9所述的計算機(jī)可讀媒體,其特征在于,所述組裝件是一動態(tài)鏈接庫。
12.一種在運(yùn)行時間有利于應(yīng)用程序使用的組件的安全名字空間的系統(tǒng),其特征在于,該系統(tǒng)包括第一組件,適合于在組裝件中提供一帶有公開密鑰的表征;以及第二組件,適合于對所述組裝件內(nèi)容求散列值并用與公開密鑰匹配的私人密鑰加密該散列值。
13.如權(quán)利要求12所述的系統(tǒng),其特征在于,進(jìn)一步包括一第三組件,適合于向引用所述組裝件的引用組裝件的表征提供公開密鑰標(biāo)記。
14.如權(quán)利要求13所述的系統(tǒng),其特征在于,進(jìn)一步包括一驗(yàn)證組件,適合于用公開密鑰對加密散列值解碼并將解碼后的加密散列值與在該組裝件上運(yùn)行的實(shí)際散列值比較。
15.如權(quán)利要求14所述的系統(tǒng),其特征在于,該驗(yàn)證組件還適合于將組裝件表征中的公開密鑰與引用組裝件表征中的公開密鑰的標(biāo)記作比較。
16.如權(quán)利要求12所述的系統(tǒng),其特征在于,進(jìn)一步包括適合于生成密鑰對的密鑰對生成組件。
17.如權(quán)利要求12所述的系統(tǒng),其特征在于,進(jìn)一步包括一綁定組件,適合于提供綁定策略信息,用于在有相同名字的另一個組裝件駐留在系統(tǒng)上時確定應(yīng)用程序?qū)⑦\(yùn)行的組裝件的版本。
18.如權(quán)利要求12所述的系統(tǒng),其特征在于,進(jìn)一步包括一驗(yàn)證組件,適合于用公開密鑰對加密散列值解碼并將解碼后的加密散列值與組裝件上運(yùn)行的實(shí)際散列值比較。
19.一種在運(yùn)行時間有利于應(yīng)用程序使用的組裝件的安全名字空間的系統(tǒng),其特征在于,該系統(tǒng)包括用于提供具有公開密鑰和私人密鑰的密鑰對的裝置;用于將公開密鑰插入組裝件的表征中的裝置;用于求組裝件的散列值的裝置;用于用私人密鑰對組裝件的散列值進(jìn)行加密的裝置;以及用于將加密的散列值與組裝件相聯(lián)系的裝置。
20.如權(quán)利要求19所述的系統(tǒng),其特征在于,進(jìn)一步包括提供關(guān)于公開密鑰的標(biāo)記的裝置,和用于將該標(biāo)記插入引用所述組裝件的引用組裝件的表征中的裝置。
21.如權(quán)利要求20所述的系統(tǒng),其特征在于,進(jìn)一步包括用于確定該組裝件是否已被修改的裝置。
22.如權(quán)利要求21所述的系統(tǒng),其特征在于,用于確定組裝件是否已被修改的裝置包括用公開密鑰對加密散列值進(jìn)行解碼的裝置,用于生成實(shí)際散列值的裝置,以及用于將生成的散列值與解碼后的加密散列值進(jìn)行比較的裝置。
23.如權(quán)利要求22所述的系統(tǒng),其特征在于,進(jìn)一步包括將引用組裝件中的標(biāo)記與組裝件中的公開密鑰進(jìn)行比較的裝置。
24.如權(quán)利要求19所述的系統(tǒng),其特征在于,組裝件和引用組裝件中的至少一個是動態(tài)鏈接庫。
全文摘要
提供了一種系統(tǒng)和方法,用于向在運(yùn)行時間由應(yīng)用程序(136,232)使用的組件(26)或組裝件(10,20,30,70,80,90)提供安全性。本發(fā)明使用數(shù)字簽名密鑰來確保被發(fā)行的組裝件名是唯一的,因?yàn)榻M裝件(10,20,30,70,80,90)是用出版商的公開密鑰發(fā)行的。這就防止了其它人發(fā)行組裝件(10,20,30,70,80,90)的更新版本并宣稱是由同一出版商發(fā)行的。本發(fā)明保證名字的唯一性并防止了名字的竄改,因?yàn)橹挥性汲霭嫔叹哂信c發(fā)行的組裝件有關(guān)的公開密鑰匹配的私人密鑰。由于這一事實(shí)即公開密鑰被存儲在每個引用中,調(diào)用程序可以確認(rèn)調(diào)用程序在運(yùn)行時間要綁定的組裝件(10,20,30,40,70,80,90)是來自擁有私人密鑰的同一出版商。
文檔編號H04L9/08GK1449527SQ01814704
公開日2003年10月15日 申請日期2001年4月30日 優(yōu)先權(quán)日2000年6月28日
發(fā)明者S·帕塔撤拉蒂, S·J·普拉斯齊納, C·T·辛克萊 申請人:微軟公司