專利名稱::對唯一定制的、合法的和可跟蹤的軟件應用進行網上安裝的方法和系統的制作方法
技術領域:
:本發明涉及一種方法和系統,其通過網絡向用戶進行對各用戶為唯一定制的、合法的和跟蹤的軟件應用的電子銷售和安裝。隨著諸如因特網的網上計算機環境日益增長的重要性和可靠性,作為向用戶銷售軟件應用的一種手段的電子軟件銷售(ESD)呈現出日益增加的重要性。當前存在的聯機設施在不必物理地交付壓縮包裝的軟件下允許用戶定購并安裝軟件應用。典型地,軟件發行商會準備用于電子銷售的軟件應用的主版。接著用戶聯機提出購買該軟件應用的定單,出版商接收及履行定單。然后用戶下載軟件應用并安裝到其自己的計算機上。現行聯機設施中的缺點是,向用戶交付的軟件應用在形式上和從分銷商及產品目錄中得到的軟件應用完全一樣。缺乏加密保護,用戶可以自由地互相共享軟件的銷售版本。即使存在加密保護,由于所有的用戶擁有完全相同的軟件應用拷貝(必然具有相同的加密方式),非法復制的可能相當大。在所有有單個基本解密鑰的情況中,其中大多由用戶插入該解密鑰(或其等同物),從而該用戶可和其它利用該鑰得到對該程序的未經許多使用的用戶共享軟件應用。當今存在著專用于共享這些解密鑰的公告牌和因特網網點,這些地方由那些通過申請他們各自得到的應用程序的解密鑰而想得到對程序的不付費使用的人群的訪問。此外,盡管在軟件應用中設置了更加錯綜的反盜版方法,但軟件“黑客”生成“破譯的”程序屢見不鮮,利用這樣的程序處理免費分發的、功能有限的程序版本可以生成出不必購買使用權的該程序的全功能修改版本。對于簡單地應用“揭密的”通用解密密鑰的高手,即使采用最精巧的大量分發不同的單密鑰形式(對于動態地試圖導出密鑰該形式可涉及一次性響應)也是無濟于事的。盡管這種“揭密”比起上述共享密鑰涉及到更多的技術復雜性,但是在分發渠道上和對產品收入的可能影響上是非常相似的。此外,通過常規ESD技術銷售的軟件應用不提供任何保護它們各自的完整性以防止未經許可的竄改的手段。Portland軟件公司生產一種以ZipLockTM商標出售的電子軟件銷售系統,該系統封裝用于在因特網上進行電子銷售的軟件。ZipLockTM系統公開一種從安全服務器向駐留在用戶的計算機上的客戶銷售通過密碼鍵得到保護的標準可執行軟件應用的系統。用戶輸入的數據被傳送到安全服務器并被用于構建一個按獨立的計算機文件發送給用戶的定制數字許可證。ZipLockTM系統既沒有提供檢測對可執行軟件應用本身進行竄改的機制,而且也不能跟蹤該軟件應用的未經許可的再銷售中是否包括數字許可證。現有技術公開了一些用于防止向用戶電子銷售的軟件被非法使用的其它系統和方法。在Choudhury的美國5,509,074號專利中,公開一種利用密碼協議保護電子發行材料的方法。所說明的第一實施例需要專用硬件,以便對發送到用戶的文檔解密。這限制了該方法在大眾所使用的個人計算機上的廣泛應用。在第二種方法中,不需要專用硬件。在該方法中,發表者修改文檔的行間間隔或字間間隔以使每份文檔對于每個用戶是唯一的。然后加密唯一文檔并傳送到用戶的計算機上。一旦接收到加密文檔,用戶的計算機會提示用戶輸入其保密密鑰,該密鑰用于解密文檔以供觀閱。該篇文獻公開的方法不能防止盜版,它只是通過可用盜版文檔跟蹤出用戶阻礙盜版行為。此外,該文獻只適合數據文件,不能保護任何類型的可執行文件。在Cane的美國5,416,840號專利中,公開一種用于在廣播媒體,例如射頻公用廣播或計算機網絡上保護計算機程序銷售的方法和系統。在這篇文獻中,該方法涉及至少加密一部分計算機程序,對用戶提供一個用于解密該計算機程序的口令從而可安裝并使用該計算機程序。生成并且向用戶傳送一個唯一口令,以供隨后用于解密媒體上所容納的選定軟件程序。盡管其公開一種生成、發送并使用不能由軟件應用的不同用戶共享的唯一口令的方法和系統,該文獻要求用戶擁有專有硬件,這限制了利用大眾所擁有的個人計算機的廣泛應用。在Yuval的美國專利5,586,186號中,公開一種用于控制對銷售給用戶的軟件的非法訪問的方法和系統。該系統的主要構件是一個加密機、一個用戶密鑰發生器和一個解密機。加密機生成加密密鑰和解密密鑰、用加密密鑰加密軟件并且把軟件的加密形式存儲到諸如CDROM的廣播介質上。用戶密鑰發生器利用用戶提供的識別信息的數字表達以及解密密鑰生成唯一密鑰。解密機負責利用用戶提供的識別信息及唯一用戶密鑰解密軟件的加密形式。該文獻公開的解密方法允許把大量不同的但邏輯上相似的密鑰用作為解密密鑰,其中的每個解密密鑰對于某特定用戶是唯一的。然而,該篇文獻未公開用于利用用戶規定的數據定制軟件應用從而可鑒別軟件應用本身的手段。此外,該文獻不能防止通過共享密鑰的盜版行為,它只通過可跟蹤密鑰阻礙盜版。本發明與一種從分發計算機向安裝計算機電子銷售軟件應用的方法有關,該方法包括步驟在所述分發計算機接收識別信息,在所述分發計算機把所述識別信息嵌入到所述軟件應用中以形成可識別的軟件應用,為所述可識別的軟件應用生成密碼簽字,把所述密碼簽字嵌入到所述可識別軟件應用中以形成可識別的和可驗證的軟件應用,以及從所述分發計算機把所述可識別的和可驗證的軟件應用傳送到所述安裝計算機。本發明的方法和系統公開一種聯機下的軟件定制化、發送及安裝方式。不再是在安裝計算機上安裝完全同類的不可跟蹤的可執行文件下向用戶銷售軟件應用,本文所公開的方法和系統公開一種建立、分發和在安裝計算機上安裝對特定用戶可驗證的和可跟蹤的軟件應用的唯一定制件的手段。本文中公開的方法和系統為駐留在安裝計算機上的用戶安裝代理(UIA)提供通過分發通道和駐留在銷售計算機上的安全銷售代理(SDA)建立連接。UIA和/或SDA提示用戶輸入識別信息,該識別信息和諸如許可條款的有關商業信息一起用于建立由SDA嵌入到所需軟件應用中的唯一數據集。通過利用密碼散列算法以及專用/公用密鑰密碼術(其中專用密鑰只由SDA知道),計算出所需軟件應用及嵌入數據集的密碼簽字,并且把密碼簽字嵌入到軟件應用中。通過分發通道把帶有嵌入數據以及密碼簽字的軟件應用發送到并且安裝到安裝計算機上。任選地,安裝計算機可利用密碼簽字核實軟件應用以及嵌入數據都未被竄改。可和軟件應用一起或通過其它手段如電子函件、因特網公告牌等向安裝計算機發送用于解密密碼簽字的公用密鑰(組)。在安裝后,以各種方式使用嵌入數據和密碼簽字,例如,提供一種跟蹤軟件應用的用戶的手段,管理軟件應用的持續整體性,確保持續保持許可狀態,進行病毒檢查,或者自動地對軟件應用本身進行升級。圖1是系統概述的框圖,以示出本發明的系統和方法的各個輸入和構件;圖2是本發明所采用的安全分發代理的結構及運行數據流圖;圖3A是一個框圖,表示利用單步密碼處理的集合分發文件的結構細節;圖3B是一個框圖,表示利用雙步密碼處理的集合分發文件的結構細節;圖3C是一個框圖,表示利用圖3B中示出的雙步密碼處理的一種變型的密碼處理的集合分發文件的結構細節;圖4是本發明采用的用戶安裝代理的結構和運行的框圖;圖5是一個框圖,表示從已安裝的分發文件提取并驗證嵌入數據的手段;圖6是本發明的第一實施例的流程圖,該實施例通過公用加密密鑰驗證嵌入數據;圖7是本發明的第二實施例的流程圖,該實施例通過每一用戶的唯一密碼密鑰驗證嵌入數據;以及,圖8是一個框圖,表示通過本發明發送給用戶的安裝后的軟件應用的各種使用。圖1表示本發明的系統和方法的各種輸入和構件。頂層代表電子軟件銷售(ESD)后端構件10,其包括軟件交換站、軟件制造商、發行商、信用卡服務商等,它們都和駐留在分發計算機上的安全分發代理(SDA)100交換,分發計算機構成本發明的基本部分。通過因特網或專用計算機網絡,SDA100和各ESD后端構件10接口以提供支付方法支持、從發行商裝入軟件應用等等。在不影響本發明的方法和系統下,可以改變ESD后端構件10的確切特征。SDA100是由安全環境下運行的協同軟件程序系統構成的。只要其確保用戶數據的秘密、確保對用戶和其它可能的第三方的驗證并在運行上恰當限制外部訪問,安全環境的特性對于本發明是不重要的。在物理上該環境可以和或不和安裝計算機分離。在圖2中更詳細地說明SDA100的結構和運行。SDA100的輸入之一是所支持的軟件應用、許可條款、許可用戶等的數據庫組20。在運行本發明之前以及之中,SDA100對/從數據庫組20發送和接收有關數據。數據庫組20的確切特征和內容不是本發明的本質特性。圖1中示出的分發通道300可由諸如因特網或專用網絡的計算機網絡構成,或者若SDA100非常靠近用戶安裝代理(UIA)200時由為保持安全所需的一個安全層構成。備擇地,它可包括這些組件的某種組合。分發通道300用于連接UIA200和SDA100(從而連接分發計算機和安裝計算機),以便在這二個代理之間交換信息,并且以便把集合分發文件170(圖2中示出)從SDA100分發到UIA200上。盡管在SDA100和UIA200之間示出分發通道300,本發明的系統并不要求SDA100物理上遠離UIA200。用戶端處是UIA200,UIA200是駐留在安裝計算機上的一個安裝/自動升級軟件程序。該程序用于通過分發通道300和SDA100通信,并用于在安裝計算機上執行后面更詳細說明的所需操作。盡管通常每個所支持的軟件應用需要一個UIA200,業內人士熟知開發一個可支持多個軟件應用的UIA200。圖1中還示出UIA200的分發形式30,其包括著各個支持文件。對于本發明的運行,UIA200的分發形式30的特征是不重要的。可采用CDROM、萬維網(WWW)下載、軟盤等中的任一種。UIA200接收用戶輸入的數據32,諸如名字、地址、支付選擇等以及和接收最終用戶許可證有關的數據。也可向UIA200輸入供處理的環境敏感數據34,諸如CPU的速度、硬盤的尺寸、調制解調器的速度等等。UIA200處理的識別信息可包括任何有關買主、銷售商、安裝代理、日期、序列號、許可證說明等信息。這些數據可用于自動地登記所需的軟件應用及買主或其商業代理。如上面所述,識別數據32、34構成和用戶、其計算機等有關的識別信息。UIA200處理識別數據32、34并通過分發通道傳送到SDA100。當然應理解,不必一定要通過分發通道300把識別信息發送到SDA100。例如,可在本地通過口頭、書面或其它非電子方式把識別信息輸入到SDA100中。SDA100把識別信息32、34和數據庫組20中存儲的數據組合起來以產生對于用戶是唯一定制的、可驗證的和可跟蹤的集合分發文件170。通過分發通道300把集合分發文件170發送到UIA200。從UIA200的輸出是唯一定制軟件應用15(以下稱為“被安裝的集合分發文件”),其安裝在安裝計算機上并帶有嵌入在其中的識別信息。雖然本發明的說明暗指“用戶”是安裝在個人計算機上的軟件應用15的個體用戶,業內人士可理解本發明也可運行在聯網最終用戶環境下,其中“用戶”是負責把軟件安裝在中央服務器上以供若干最終用戶使用的網絡管理員。圖2是本發明所采用的SDA100的結構和運行的數據流圖。原始分發文件130示成是轉換程序110的一個輸入。在想象的實施中,通過圖1中示出的數據庫組20把原始分發文件130輸入到SDA100。應理解,不必必須通過數據庫組20把原始分發文件130輸入到SDA100,因為原始分發文件130可能已經駐留在包含著SDA100的分發計算機上。轉換程序110具有作為另一輸入的要嵌入到分發文件130中的數據140,并具有所需的公用/專用密碼密鑰對150。嵌入數據140是由用戶交互程序120生成的,用戶交互程序120通過UIA200和用戶交互以便接收識別數據32、34(圖1中示出)以及來自數據庫組20支持軟件應用、許可條款、許可用戶的數據。盡管嵌入數據140可以為任何形式和任何內容,預計嵌入數據140將包括可把軟件應用15跟蹤到單個用戶以及許可證執行的信息。例如,嵌入數據140可包括一個唯一序列號,其用于識別分發到用戶的集合分發文件170。這可消除掉軟件業中常見的序列號欺詐,其中現有的軟件應用只能進行簡單的有效性檢查,而這種檢查可由廣泛的單個有效序列號的蒙混多次使用所欺騙。嵌入數據140可采取為每個用戶定制的完整許可證協議的形式,其中包括用戶姓名、地址、軟件序列號、許可條款等等。可以由數據庫組20保存用戶交互程序120收集的用戶信息記錄。轉換程序110的輸出是集合分發文件170,后者既包含原始分發文件130、嵌入數據140的內容,還包含嵌入數據140和原始分發文件130的密碼簽字。然后,通過分發通道300把集合分發文件170發送到UIA200。UIA200接著把集合分發文件170安裝到安裝計算機上。一旦安裝了集合分發文件170,它采取已安裝集合分發文件15的形式。通過其和UIA200的連接,SDA100可和用戶協商任意的許可證條款、顯示最終用戶許可證協議(EULA)、確認對該協議的接受、并且根據已經建立的用戶身份以及具體的許可證條款自動地執行軟件的聯機登記。對于商業和法律上的考慮,例如,SDA100可對不同國家的用戶提出不同的報價條款及許可證條款,以及可能提供不同的可執行版本。此外,可根據安裝計算機的屬性如CPU能力提供不同的報價。在確定用戶提出的地址和信用卡號是有效的、相容的以及位于給定幾何區域內的功能上不要求SDA100是智能的。這些功能可由圖1中示出的高層ESD構件10實現。圖3A更詳細地示出構建集合分發文件170的過程。出于說明的目的,假定原始分發文件130的結構包括標題信息以及用于代碼、靜態數據等的不同類型的內部區段,諸如WindowsTM的‘PortableExecutable’(PE)程序文件。一般的業內人士可理解,本發明的方法和系統可應用若干不同的文件格式。類似地,對轉換程序110的輸入140、151以及轉換程序110的輸出170示成是計算機文件,但它們可以是存儲器內圖象、來自其它處理機的流等等。下面說明由SDA100進行的構建集合分發文件170的典型步驟順序。1.作為用戶交互程序120判定需要轉換的結果(即,批準發送依據本發明的方法的某特定集合分發文件170,并且已經構建了所需的嵌入數據塊140),運行轉換程序110。除非作出其它指示轉換程序110執行所有的后續步驟。其目的是得到通常所稱的“數字簽字”或“密碼簽字”,其本質上具有二個方面(i)通過利用密碼散列算法,生成和數據″ed″130、140唯一對應的密碼指紋;以及(ii)通過用一個專用密鑰加密保護密碼指紋,從而通過利用公用密鑰和密碼算法對密碼指紋的接收人可確認數據″ed″130、140未受到損害,并且其中不需要具有生成新的密鑰指紋的能力,而且也不會似是而非地改變數據。對于達到本發明的優點這二個步驟是必不可少的,因為沒有這二個步驟第三方可以在接收人不能察覺的情況下干預或改變數據。該過程不同于簡單地加密數據130、140,這樣的方法對于本發明的運行是不夠的,因為其不存在似是而非地改變數據130、140是可被察覺的方法。2.轉換程序的輸入/輸出邏輯電路111讀入所需的原始分發文件130、其對應的密碼專用密鑰151以及要嵌入的數據140。盡管轉換程序110不要求,可傳入一個公用密鑰152以便把它添加到集合分發文件130中。利用密碼散列算法112和公用-專用密鑰(PPK)加密算法113,生成密碼簽字174。該處理的基本步驟是2.1向數據″ed″130、140施以單向散列函數″hf″以生成密碼簽字″edh″,即edh=hf(ed)。對該密碼指紋的要求如下(i)其產生一個合理的壓縮結果,即長度(edh)<<長度(ed),并且最好為定長結果,(ii)指紋本身不能回過來用于確定原始數據塊,即,不存在反散列函數″bhf″從而bhf(edh)=ed;(iii)其對″ed″中的改變特別敏感;即,″ed″中的單個位的改變會改變″edh″中約50%的位,以及(iv)構造出一個假的嵌入數據塊″fed″其會生成和″ed″一樣的指紋,即hf(ed)=hf(fed),極為困難。存在著若干滿足這些要求的算法,例如MD5(報文摘要5)和SHA(安全散列算法)。本發明也可采用其它也能滿足上述準則的算法。2.2利用專用密鑰151″prk″和公用/專用加密函數″ppef″加密密碼指紋″edh″以生成密碼簽字″edf″174,即edf=ppef(prk,edh)。對加密函數″ppef″的要求如下(i)其產生的結果不明顯大于其輸入;(ii)其有效地保護相對短的數據組,因為″edh″為若干字節長而不是數千字節長;(iii)計算上不可能利用公用密鑰151(″puk″)和密碼簽字″edf″174或利用″edf″174的多個實例(可在安裝計算機上看到它們)推導出專用密鑰″prk″,即,不存在使puk=cf(edf,puk)的破譯函數″cf″;(iv)在實際上不擁有″ppef″和″prk″二者下不存在可想出的利用″prk″復制″ppef″的行為的手段。原則上,可從其對應的解密函數推導出″ppef″,從而在實際范圍內″prk″是重要的秘密;(v)其對應的公用密鑰解密函數″ppdf″在典型安裝計算機上對于有關的文件長度具有可接受的性能。請注意,若出于安全原因選擇不能產生可接受性能的特定ppef/ppdf,可以只對選定文件的一部分進行加密并且仍可提供相同的好處;(vi)其對該領域,即數字簽字,是適用的(最好,通過常規密碼分析)。存在若干滿足這些要求的算法,例如RSA和Rabin與ElGamal的算法。仔細地選擇實施參數可幫助得到所需的安全性和性能。3.把來自步驟2.1的密碼簽字174以及要嵌入的數據140插入到原始分發文件130中以生成集合分發文件170。這種插入不是簡單地把各個位拷貝到文件的中間,因為它必須順從特定文件類型的格式要求。例如,必須更新標題以識別新數據等等。本發明的系統和方法不要求嵌入數據171或密碼簽字174以任何特定方式定位在集合分發文件170中。所需要的是(i)安裝計算機上的軟件,尤其中UIA200,能定位嵌入數據171和密碼簽字174,以及(ii)在安裝到安裝計算機上之后,集合分發文件170能夠執行其預定的功能;例如,若它是一個可執行文件,它仍舊符合結構要求以及其它平臺要求,從而它可象轉換處理之前那樣裝入到安裝計算機上并在其上運行。例如,若文件是以含有英特微處理器的現行計算機的通用格式并且是在微軟的視窗操作系統下運行,轉換程序110應檢查原始分發文件130的″標題″區段以判定是否存在包含靜態數據的區段以便避免含有可執行代碼的區段。應選出靜態數據區段,并且應找出或建立用戶嵌入數據塊171和密碼簽字174的適當位置。例如,這可如此進行(i)確定現有靜態數據塊具有未使用的足以增添這些數據的容量,(ii)分配新的靜態數據塊,或者(iii)擴展現有靜態數據塊。圖3A中示出的方法公開一種單步處理,其中為原始分發文件130和嵌入數據140確定密碼簽字174。如圖3B中示出的一種供選用方法采用二步處理,其中利用上面步驟2中說明的同樣算法首先生成嵌入數據171的密碼簽字172。接著再把該嵌入數據密碼簽字172嵌入到原始分發文件130中。然后把原始分發文件130、嵌入數據171以及嵌入數據密碼簽字172輸入到第二密碼步驟,在該步驟中采用上面步驟2中說明的同樣算法確定總體密碼簽字176。雙步處理的好處是它增加了本發明的系統和方法驗證和檢測對安裝計算機上安裝的軟件應用的竄改的能力。例如,可為二個密碼簽字172、176提供獨立的密碼公用/專用密鑰對。此外,即使原始文件內容173a、173b被破壞,雙步處理仍能提取和驗證嵌入數據171。利用雙步密碼處理的一種變型的另一種構建集合分發文件170的替代辦法是,首先只用原始文件內容173a、173b得到第一密碼簽字175,并且用嵌入數據171得到第二密碼簽字172。這在圖3C中示出。該方法具有圖3B中示出的雙步處理的所有優點,并且還允許獨立驗證嵌入數據171以及原始文件內容173a、173b。這允許用戶確認發行商提供的原始分發文件130未被本發明所公開的聯機安裝處理所改變。一般的業內人士會理解,不必利用相同的密碼公用/專用密鑰對或者甚至不必利用相同的密鑰算法產生圖3A、3B和3C中示出的任何密碼簽字172、174、175、176。此外,不必在每次向用戶分發集合分發文件170時計算密碼簽字172、174、175、176。SDA100可保持一個部分預計算簽字數據庫以加快有關計算。可以使用能在安裝計算機處得到的密碼硬件支持如RSA協處理器以得到最大安全性下的良好響應性。此外,不必由SDA100整體地構建集合分發文件170。必須的只是可由UIA200整體地發送集合分發文件170。圖4示出UIA200的結構和運行,UIA200包括過渡安裝索引204、過渡安裝輸入文件集205以及UIA固有可執行軟件程序203。業內人士可理解,存在許多實施UIA程序203的方法。由于UIA200的功能性的重要部分涉及用戶交互以及和SDA100的對話,實施UIA200的選擇余地包括使它成為萬維網(WWW)瀏覽器的附屬物,或者把它實現成一個獨立程序,該獨立程序嵌入或調用安裝計算機上已有的瀏覽器能力。下面說明UIA200的典型執行順序1.在把UIA程序203以及其支持數據204、205復制到安裝計算機上后,用戶運行UIA程序203。請注意也可遠程地安裝UIA程序203,例如由WWW服務器發送成瀏覽器框架內的現用程序。除非另外提出,所有后續步驟由UIA程序203執行。2.安裝計算機讀出安裝索引204和安裝輸入文件集205以確定和安裝所需軟件應用(稱為″被安裝的集合分發文件″)15相對應的特定缺省SDA100。3.檢查安裝計算機以確定用于建立與SDA100通信的適當裝置,例如,TCP/IP網絡接口、調制解調器等的存在。若不能找到這樣的裝置,程序供選地幫助用戶查找適當工作的參數,然后發出警告下停下。這是由于對SDA100的訪問對于本發明的運行是必不可少的。4.用來自上述步驟(2)和(3)的缺省數據提示用戶1,即告訴UIA程序203在何處查找所需的SDA100以及在哪種類型的分發通道300上。然后給用戶1改變該信息的機會,或出于商業原因(例如,可能某SDA已改變名字或位置),或出于技術原因(例如,用戶不具有正在工作的TCP/IP連接并希望使用直接調制解調器鏈接,可能通過800免費電話號碼。)5.通過分發通道300,UIA程序203建立和SDA100的接觸。若不能實現,UIA程序在供選地幫助用戶確定適當工作的參數后發出警告并停下。盡管對于本發明的運行分發通道300的安全性是任選的,但預計分發通道300可支持適當的保護SDA100不被欺詐的協議。支持授權和隱私的常用協議,例如安全套接層(SSL)是恰當可用的。6.UIA程序203充當用戶和SDA100之間的中介,使用戶確定SDA100對于所需被安裝集合分發文件15能支持的法律協議。UIA程序還具有判定安裝計算機的可使用系統資源是否滿足所需被安裝集合分發文件15的要求的能力。對于向用戶顯示的內容,用戶可能提出的問題以及安裝計算機可能收集的數據等上的各種選擇,不存在技術上的限制。由于SDA100運行成歷經數據采集、數據嵌入、軟件分發及軟件安裝處理,本發明的系統和方法可在甚至不向用戶通知密碼密鑰或任何他們可推演的信息下采用各種級別的密碼。這和其它電子發送系統不同,它們典型地需要相繼地脫機輸入、秘密密鑰、或者衍生得到,從而明顯地泄漏給用戶。當然,密碼簽字的驗證中使用的公用密鑰是個例外,用戶可方便地確定公用密鑰,但由于不能欺詐性應用它們,它不是一個安全問題。7.假定用戶1滿足SDA100提出的所有準則,SDA100將確定必須發送給UIA200的具體文件集以完成安裝計算機上的安裝,尤其是至少包括一個集合分發文件170(圖3A-3C中示出)。對于本發明的系統和方法,用戶1和SDA100之間達成的協議的實質或者協議如何生效是不重要的。這由SDA100以及其所朝向的商業系統(若存在)負責。最重要的是,UIA200不而且本身也不能決定是否已在用戶和SDA100之間達成協議。除了通過和SDA100的交互之外,UIA200不并且應該不訪問所有完成安裝所需的信息。8.SDA100通過分發通道300向ULA200發送所需分發文件的索引。UIA200利用該索引擴大其自身的本地索引以構成用于即將到來的安裝的完整索引。9.SDA100構建一個或多個集合分發文件170以及任何其它安裝所需的文件,并且經過分發通道300把這些文件發送給UIA200。10.UIA程序203利用其本地索引和支持文件204、205以與安裝計算機的平臺相符合的方式完成被安裝分發文件15的安裝。具體地,UIA200在密碼簽字174和嵌入數據171不受到影響下安裝集合分發文件170。一旦把集合分發文件170安裝在安裝計算機上,它被稱為被安裝的集合分發文件15。UIA程序203還根據需要執行其它系統更新212,例如更新操作系統注冊(在視窗95情況下)以及安裝任何附加的應用文件。也可能涉及其它任選的操作,例如留下適當的‘不安裝’實用程序。12.若出現錯誤,UIA程序203可通知SDA100重新啟動安裝。若不出現錯誤,UIA程序203通知SDA100已接收所有所需數據。這應例如用作SDA100的觸發信號以進行財務交易。把財務事宜放在處理的后半部分可使未在成功地安裝軟件應用下就對用戶收費的可能性變為最小,這減少了用戶受挫的一種原因。13.UIA程序203刪除任何可能放在安裝計算機中的過渡文件、索引等等。14.UIA程序203斷開和SDA100、分發通道300的連接并退出。一旦完成了后面進一步詳細說明的供選用的驗證過程,用戶接著可在安裝計算機上運行被安裝的集合分發文件15。應理解,可在完成安裝之前或之后進行后面說明的驗證過程。本發明的方法和系統應減少由購買好的軟件未能成功安裝而造成的爭端。若安裝計算機不具有運行所需軟件應用的足夠資源,UIA200可檢測出并在作出任何財務交易之前警告用戶。此外,可在安裝處理之后完成用戶購買軟件應用的最終財務約定,從而財務交易是成功的但安裝本身卻是失敗的概率會很低。一般的業內人士會理解,可以以大規模生產的并包含著原始分發文件130的介質形式向用戶分發UIA200,或者從單份拷單在不會受到成功的蒙混再使用下衍生出UIA200。在這種情況下,SDA100只向UIA200發送其構建集合分發文件170并且完成安裝所需的增量信息。通過確保UIA200的分發形式包含不完整的可執行文件集,從而為能在安裝計算機上執行需要來自SDA100的基本數據,可以擊敗任何非法翻印軟件應用的企圖。圖5表示從被安裝的集合分發文件15驗證和提取用戶數據以便證實原始文件內容173a、173b以及嵌入數據171都未被竄改。對于本發明的操作該步驟是任選的,因為用戶可在不驗證下運行被安裝的集合分發文件15。應理解,下面說明的驗證過程可在完成安裝之前或之后進行。若在安裝計算機上安裝之前進行驗證,則UIA203對集合分發文件170,而不是對已安裝的集合分發文件,進行下述過程。圖5中示出的處理是和利用圖3B中示出的雙步處理的已安裝集合分發文件15相關的。對從利用圖3A中示出的單步密碼處理構造的或者利用圖3C中示出的雙步處理的變型構建的已安裝集合分發文件15驗證和提取用戶數據的原理與下面所說明的相同,但要根據要比較的密碼密鑰的特性作出適當的修改。盡管示出一個獨立的驗證及讀出程序400執行驗證和讀出嵌入數據171的功能,業內人士會理解,這些功能不一定要在這種獨立的程序中實現,而是可以和其它程序,例如UIA200、許可證檢查程序、病毒檢查程序、程序裝入軟件、復制程序等,的功能相結合。下面說明驗證及讀出程序400的典型執行順序1.或者由用戶或者由諸如UIA200的其它程序的自動調用,運行驗證及讀出程序400。除非另外指出,下面的步驟都由驗證及讀出程序400執行。2.或者通過提示用戶或者由UIA200作為參數傳送,判定要處理哪一個已安裝集合分發文件15。還判定(若可從特定實施中衍生,這于文件本身包含著不同)對該已安裝集合分發文件15可應用哪個特定公用密鑰152。3.打開所研究的已安裝集合分發文件15并檢查它滿足應用格式要求。例如,某給定的實現可能支持IntelTM處理器的‘PE’格式下的可執行(EXE)和動態鏈接庫(DLL)文件。若該已安裝集合分發文件15失敗于這些基本檢查或不能找到,驗證及讀出程序400發出適當警告并停止。4.檢查文件以確定總密碼簽字176、嵌入數據密碼簽字172及嵌入數據171的位置。可以各種方式格式化已安裝集合分發文件15以支持該確定,例如在文件標題內包括指向這些區段的指針。若在該特定實現中是適用的(即,公用密鑰152包含在文件中,而和要由驗證和讀出程序400確定不同),查找并提取所需的公用密鑰152。若上述任一步驟失敗,驗證及讀出程序400在適當告警下失敗。5.利用公用密鑰152把總密碼簽字176解密成不加密形式176a(解密后的遠程總指紋)。6.利用和SDA100采用的相同已知密碼簽字算法,計算總密碼簽字的本地版本176b(本地算出的總指紋)。該計算必須排除掉總密碼簽字176自身,即復蓋除176之外的已安裝集合分發文件15的所有部分,以使本地計算的總指紋176b和其自身無關。7.把本地計算的總指紋176b和解密后的遠程總指紋176a進行比較。若它們不同,驗證及讀出程序在警告已安裝的集合分發文件15被破壞下失敗。此刻,UIA200可被調用以和SDA100接觸以再次獲得已安裝的集合分發文件15。8.提取嵌入數據171,若程序是由用戶調用的圖形地把嵌入數據171呈現給用戶,若是由軟件調用的則以報文形式傳送給調用者例行程序。9.利用公用密鑰152把嵌入數據密碼簽字172解密成其不加密形式172a(解密后的遠程嵌入數據指紋)。10.利用和SDA100所采用的相同已知密碼簽字算法計算嵌入數據密碼簽字172的本地版本172b(本地算出的嵌入數據指紋)。11.對本地算出的嵌入數據指紋172b和解密的遠程嵌入數據指紋172a進行比較。若它們不同,驗證及讀出程序在警告嵌入數據171被破壞下失敗。若后面跟著的是圖3A中示出的單步處理,接著對密碼簽字174進行類似的比較過程。同樣,若進行的是圖3C中示出的雙步密碼處理的變型,接著對原始文件內容密碼簽字175作類似的比較過程。圖6是一個流程圖,其綜合相對于圖2、3A、3B、3C、4和5說明的過程。請注意,可由任何裝置向UIA200發送用來驗證已安裝集合分發文件15的完整性的公用密鑰152,因為它不是秘密并且可用于不止一個的用途。公用密鑰可嵌入到集合分發文件170中,它可以按獨立文件或報文顯式地發送給用戶,或者,可由安裝計算機自動地從網絡托管機構(例如VerisignTM公司)獲得。圖7是可依據本發明采用的另一組過程的流程圖,其中利用SDA100為該特定交易計算的唯一專用密碼加密原始文件內容173a、173b。SDA100保持該唯一專用密鑰的記錄,并且通過分發通道300向UIA200發送相應的唯一公用密鑰和集合分發文件170。UIA200利用該公用密鑰解密集合分發文件170。出于安全原因,最好不要永久性地在安裝計算機上存儲該公用密鑰。替代地,只在安裝期間讓該唯一公用密鑰存在于計算機的隨機存取存儲器(RAM)中。這使得實際上不可能再分發集合分發文件170。盡管參照各種優選實施例對本發明進行了說明,一般的業內人士可認識到一些改變、替代和修改是可能的。在圖8示出已安裝集合分發文件15的各種使用。在安裝后并由UIA驗證之后,可以常規地在以不以任何方式使用嵌入數據171下運行已安裝的集合分發文件15。為了確保許可證一致,可以和許可證強制程序一起運行已安裝的集合分發文件以證實組成嵌入數據171的一部分的任何許可證條款得到遵守。也可把嵌入數據171以及密碼簽字172、174、175、176(取決于構建集合分發文件170的方式)用作為某病毒檢查程序的輸入,從而可通過利用公用密鑰152和與SDA100采用的相同的已知密碼簽字算法進行已安裝集合分發文件15的完整性檢查。每次運行已安裝集合分發文件15時,還可以通過它自己或者和驗證裝入程序一起運行圖5中示出的驗證及讀出程序400,以拒絕竄改文件并不允許被竄改的已安裝集合分發文件15運行。還可只使用嵌入數據171以向用戶顯示。本文所公開的方法和系統還可用于對現存于安裝計算機上的已安裝集合分發文件進行升級。在這種情況下,UIA200和SDA100將確認安裝計算機上現有的已安裝集合分發文件15的許可證狀態,接著調用本文公開的方法和系統,以對該安裝計算機構建、發送和安裝已安裝集合分發文件15的升級版本。可以在用戶請求下調用,或者可以在UIA200檢測出可使用原始分發文件130的新版本時自動調用,本發明的升級能力。已安裝的集合分發文件15的唯一性可用于把其運行限制在安裝計算機中的專用中央處理機(CPU)上。對這種目的的CPU的識別可由UIA200在收集傳輸到SDA100的數據32、34階段進行。本文公開的SDA100和UIA200不限于只在安裝或升級已安裝分發文件170時調用。例如,在計算機游戲環境下,可在用戶到達游戲的某處時調用SDA100和UIA200,以對用戶給出購買游戲的附加功能或級別的選擇機會。本公開并不預先假定UIA200不擁有提高本發明的功能度的附加智能。例如,UIA200可具有找到和識別安裝計算機上各自的個人數字執照的智能,該執照建立其身份,這對于授權有關交易的全部或一部分是充分的。這種個人數字執照以及它們的應用方法應符合已建立的標準,例如商用熱照提供商VerisignTM公司采用的標準。此外,UIA200可具有查找和識別數字“優惠券”執照的智能,這種優惠性確定用戶具有某種特定特權,例如對某個軟件的特殊價格的權利,或者一種確定其在特定團體如某公司中的會員權利。此外,UIA200應定位依據本發明的方法安裝的先有文件,并且確定嵌入數據171。若UIA200確定存在著可影響交易條款的信息或者存在表示用戶的可能興趣例如升級的信息,UIA200可把該信息發送到SDA100,從而SDA100可適當地中介交易、通告升級等等。這樣的一個典型例子是檢查依據本發明安裝的字處理應用軟件以確定該用戶有資格自由升級,從而本發明可接著進入安裝。在本發明的另一組變型中,已安裝的集合分發文件15是一種采用Nortel算法授權(NAN)的原理的文件,該原理在美國08/674,037號專利申請中公開以用于為其自身的完整性增添堅固的自管理。在第一變型中,運行期NAA算法(其已具有把已安裝集合分發文件15的自身代碼用作為適當運行所需的輸入的能力,并且從而具有在竄改情況下強制毀滅性失效的能力)把該輸入的范圍擴展到包括由SDA100添加的一個或多個數據項所構成的存儲器內拷貝,例如總密碼簽字176。在第二變型中,“啟動存根(launchstub)”構件可前進得更遠,即提取和譯碼已安裝集合分發文件15中的嵌入數據171,并且把其上(例如比如由網絡卡上某物理介質訪問控制地址識別的專用CPU)的許可證條款和檢查當前環境所找到的條款進行比較。根據Nortel算法授權的原則,“啟動存根”不必“決定”是否要繼續,因為這種決策點明顯地是希望擊敗安全機制的‘黑客’的攻擊點。相反,它會根據正常的程序運行修改數據,以使得僅當所述數據和每個許可證的適當環境對應時程序才繼續運行。對于第一變型,應為特定情況預構建應用程序,因為根據該待決的技術,其適當的控制流只是把原始‘不正確的’輸入數據使用成應用正確的許可證數據或者其簡單的衍生而得到的‘改正的’數據。本文所公開的本發明不必必須改變已安裝集合分發文件15的安裝形式的功能性,而只對它增加信息和驗證性。然后,存在著一些可把已安裝集合分發文件15的功效以本發明允許的新方式予以改變的手段。在一種變型中,SIA100會訪問某給定程序的各種可執行形式或者訪問會動態地構建不同形式的軟件例行程序,以生成滿足特定用戶功能/價格要求的程序,和/或該程序主動地把自己捆綁到非常特別的許可證條款。例如,在微軟視窗環境下,可通過選擇性地包括的不同動態鏈接庫(DLLS)嵌入不同的功效。在另一種變型中,程序文件的初始可執行形式具有內置的特殊功能的和與許可證捆綁的選擇,并且SDA100會拒絕(可能是可驗證的)讓可執行文件顯示其所需功效的數據進入可執行文件。在再一種變型中,SDA100可以利用對特定程序結構具有詳細支持的例行程序,以便向先有的未明確設計成擁有這種變型的可執行程序增添可變的代碼。本發明所說明的各種實施例把某特定文件類型的單個“核心”文件集中為軟件應用的安裝及安全性的基石。然而,本發明的方法當然可應用于特定情況下多于一個文件或多于一種文件類型。例如,和已安裝軟件應用相關的所有靜文件可接收嵌入信息,以使它們都是可驗證的并和特定的應用及安裝事例相關。權利要求1.一種用于從分發計算機向安裝計算機電子分發軟件應用的方法,包括步驟a.在所述分發計算機接收識別信息;b.在所述分發計算機把所述識別信息嵌入到所述軟件應用中以形成可識別的軟件應用;c.為所述可識別的軟件應用生成密碼簽字;d.把所述密碼簽字嵌入到所述可識別的軟件應用中以形成可識別的和可驗證的軟件應用;以及e.從所述分發計算機把所述可識別的和可驗證的軟件應用傳送到所述安裝計算機。2.權利要求1的方法,其中為所述可識別的軟件應用生成密碼簽字的步驟包括步驟a.對可識別的軟件應用″ed″施加單向散列函數″hf″以生成散列結果“edh”,其中edh=hf(ed);以及b.利用一個密碼密鑰加密散列結果″edh″以得到密碼簽字。3.權利要求2的方法,其中單向散列函數是利用消息摘要5(MD5)算法或安全散列算法(SHA)之一產生的。4.權利要求2或3的方法,其中加密散列結果″edh″的步驟包括利用一個公用/專用加密函數″ppef″和一個專用密碼密鑰″prk″加密散列結果″edh″以生成密碼簽字″edf″的步驟,其中edf=ppef(prk,edh)。5.權利要求4的方法,其中利用RSA算法、Robin算法、ElGamal算法之一產生公用/專用加密函數″ppef″。6.權利要求1、2、3、4或5的方法,其中通過因特網連接分發計算機和安裝計算機。7.權利要求1、2、3、4、5或6的方法,其中所述分發計算機處接收的識別信息是從所述安裝計算機發送的。8.一種在安裝計算機處電子地接收從分發計算機分發的軟件應用的方法,包括步驟a.從分發計算機接收可識別的和可驗證的軟件應用,該可識別的和可驗證的軟件應用帶有在其中嵌入的識別信息和該可識別的和可驗證的軟件應用的密碼簽字;以及b.在安裝計算機處安裝該可識別的和可驗證的軟件應用。9.權利要求8的方法,其中在從分發計算機接收可識別的和可驗證的軟件應用的步驟之前,安裝計算機向分發計算機發送識別信息。10.權利要求8或9的方法,其中在安裝可識別的和可驗證的軟件應用的步驟之前,安裝計算機驗證該軟件應用的完整性。11.權利要求10的方法,其中安裝計算機利用密碼簽字驗證軟件應用的完整性。12.一種從分發計算機向安裝計算機電子地分發軟件應用的方法,包括步驟a.在所述分發計算機接收識別信息;b.在所述分發計算機把所述識別信息嵌入到所述軟件應用之中以形成可識別的軟件應用;c.為所述可識別的軟件應用生成密碼簽字;d.把所述密碼簽字嵌入到所述可識別軟件應用中以形成可識別的和可驗證的軟件應用;e.從所述分發計算機把所述可識別的和可驗證的軟件應用傳輸到所述安裝計算機;以及f.在所述安裝計算機安裝所述可識別的和驗證的軟件應用。13.權利要求12的方法,其中通過因特網連接分發計算機和安裝計算機。14.權利要求12或13的方法,其中在所述分發計算機處接收的識別信息是從所述安裝計算機發送的。15.一種軟件分發計算機用于向用戶分發可識別的和可驗證的軟件應用,其包括a.所述軟件分發計算機和所述用戶之間的通信鏈接;b.用于存儲供分發的軟件應用的存儲部件;c.和所述鏈接通信的通信接口,用于接收所述用戶的識別數據,并用于向所述用戶傳輸所述可識別的和可驗證的軟件應用;d.用于把從所述安裝計算機接收的數據嵌入到所述軟件應用以形成可識別的軟件應用的裝置;e.用于為所述可識別的軟件應用生成密碼簽字的裝置;以及f.用于把所述密碼簽字嵌入到所述可識別的軟件應用中以形成所述可識別的和可驗證的軟件應用。16.一種用于接收由分發計算機分發的可識別的和可驗證的軟件應用的軟件安裝計算機a.所述軟件安裝計算機和所述軟件分發計算機之間的通信鏈接;b.用于存儲識別數據并用于存儲已安裝軟件應用的存儲部件;c.和所述鏈接通信的計算機通信接口,用于傳輸所述識別數據,并且用于接收所述可識別的和可驗證的軟件應用,該可識別的和可驗證的軟件應用具有嵌入在其中的識別數據和該可識別、可驗證的軟件應用的密碼簽字;d.用于在所述計算機存儲部件上安裝所述可識別的和可驗證的軟件應用的裝置。17.一種用于從分發計算機向安裝計算機分發可識別的和可驗證的軟件應用的軟件分發計算機,其包括一個分發計算機;一個安裝計算機;所述安裝計算機和分發計算機之間的通信鏈接;所述分發計算機包括a.分發計算機存儲部件,用于存儲供分發的軟件應用;b.和所述鏈接通信的分發計算機通信接口,用于向所述安裝計算機傳送可識別的和可驗證的軟件應用,并用于從所述安裝計算機接收識別數據;c.用于把從所述安裝計算機接收的識別數據嵌入到所述軟件應用中以形成可識別的軟件應用的裝置;d.用于為所述可識別的軟件應用生成密碼簽字的裝置;以及e.用于把所述密碼簽字嵌入到所述可識別的軟件應用以形成可識別的和可驗證的軟件應用;所述安裝計算機包括a.安裝計算機存儲部件,用于存儲所述識別數據,并用于存儲已安裝的軟件應用;b.和所述鏈接通信的安裝計算機通信接口,用于向所述分發計算機傳送所述識別數據,并且用于從所述分發計算機接收所述可識別的和可驗證的軟件應用;以及d.用于在所述安裝計算機存儲部件中安裝所述軟件應用的裝置。全文摘要一種用于在安裝計算機上創建、分發和銷售對某特定用戶是可驗證的和可跟蹤的唯一定制的軟件應用實例的方法。駐留在分發計算機上的安全分發代理收集識別信息,并計算軟件應用及識別信息的密碼簽字。通過安全分發代理把識別信息和密碼簽字嵌入到該軟件應用中。駐留在安裝計算機上的用戶安裝代理管理在安裝計算機上對帶有嵌入數據的軟件應用的安裝。在安裝之前,用戶安裝代理可利用密碼簽字驗證軟件應用以及識別信息是可信的和未被竄改的。文檔編號G06F21/22GK1255209SQ98804864公開日2000年5月31日申請日期1998年3月18日優先權日1997年4月10日發明者格爾頓·艾德華·拉羅斯,戴維·伊恩·阿蘭申請人:查耐威爾有限公司