專利名稱:程序創建裝置的制作方法
技術領域:
本發明涉及一種安全的程序分發系統,對其施加了程序電子水印。
背景技術:
隨著計算機技術的發展,通過網絡分發程序代碼(此后簡稱為程序)已經較常見了。與此類分發相對應,出現了以下問題所下載的程序被分析,從而泄露在該程序中所使用的算法與思路,并且程序本身被篡改用來進行詐騙。
另外,程序盜竊已經成為一種嚴重的問題,使得某人所開發的程序的全部或部分在沒有正當授權的情況下被使用,或者在沒有獲得程序開發者同意的情況下被重新分發。
考慮到將來還會擴大的通過網絡的程序分發,必須要保護程序以防止欺詐的方案。
例如,考慮用戶操作終端從分發者下載程序的情況。在這種情況下,創建者首先創建程序。接著,分發者的終端將該程序注冊。然后,當用戶終端請求分發者終端分發該程序時,分發者終端將該程序發送給用戶終端,并且用戶終端下載所分發的程序以存儲。
在這些情況下,假定有以下威脅1、用戶泄露和/或篡改該程序。
2、分發者泄露和/或篡改該程序。
3、另一創建者偷盜該程序。
作為抵御這些威脅的分發系統,有使用加密、防篡改硬件和/或電子水印的系統。
此處,防篡改硬件指配備有用來防止未授權的內部分析的機制的硬件,(例如)使得當包含在LSI中的程序開始被分析時,LSI自動檢測對于程序的分析,并且刪除該程序。
作為使用加密的系統,(例如)有在JP 2000-324096中所公開的系統。
在這種方法中,用戶終端首先使用該終端所特有的ID(終端ID)以公開密鑰加密方法生成保密密鑰,然后,當下載內容時,將該終端ID發送給分發者。分發者使用該ID生成公開密鑰、加密該內容并且將加密內容發送該用戶。用戶使用預先在用戶側生成以備使用的保密密鑰解碼該內容。
另外,在用戶終端的防篡改硬件區域中解碼并使用加密內容。
通過這種方法,就防止了所下載的內容經歷未授權泄露與篡改。
在JP 2000-330873中描述了另一種抵御上述威脅的系統。
在這種方法中,創建者在所創建的內容中插入唯一的ID來指明內容用戶,作為電子水印。另外,當向用戶分發內容時,創建者加密內容。
當內容經歷未授權使用時,監視內容未授權使用的未授權使用監視中心搜索網絡,并且比較從經歷未授權使用的內容中抽取的ID與存儲在該中心中的用戶條件(ID),以指明進行內容未授權使用的用戶。
由此防止了內容的未授權泄露與篡改。
然而,當在現有內容分發系統中分發程序時,存在以下問題不可以防止由分發者進行的對該程序的未授權泄露與篡改。
在創建者所創建的程序在分發者終端注冊、并且用戶操作終端以下載在分發者終端注冊的程序的情況下,在該程序中插入唯一ID以作為電子水印而指明用戶是非常有效的,從而防止用戶進行未授權泄露。另外,使用防篡改硬件來防止用戶進行篡改也是有效的。
然而,在現有方法中,程序不包含指明分發者的信息。因此,如果分發者進行了未授權泄露,則不可能指明為泄露來源的分發者。相應地,防止分發者進行未授權泄露是無效的。
另外,當在程序中插入指明用戶的ID時,分發者向程序插入了用戶的ID。在這種情況下,分發者需要以明文處理該程序。
因此,分發者不僅能夠插入用戶ID,而且能夠篡改程序使得該程序以不同的方式運行。換而言之,存在分發者篡改程序的風險。
還考慮到創建者在程序中插入用戶ID,而不是使用分發者。然而,在大多數情況下創建者不能作為分發者。
發明內容
本發明的目的在于提供一種方案,使分發者能夠在程序中插入指明用戶的信息,同時防止分發者對該程序進行未授權泄露與篡改。
本發明提供配備有偽模塊(dummy module)與數字簽名的程序主體,在該偽模塊中可以插入水印而不影響程序主體的運行。
因此,分發者能夠在偽模塊中插入指明用戶的水印。另外,通過為程序主體配備數字簽名,就可以防止分發者對該程序進行未授權泄露和/或篡改。
圖1為根據實施方式1的程序分發系統的配置圖;圖2為根據實施方式1的程序結構轉換部件的配置圖;圖3為根據實施方式1的水印插入部件的配置圖;圖4為根據實施方式1的簽名部件的配置圖;圖5為實施方式1的發送部件的配置圖;圖6為根據實施方式1的分發者包的配置圖;圖7為實施方式1的水印插入部件的配置圖;圖8為實施方式1的簽名部件的配置圖;圖9為實施方式1的發送部件的配置圖;圖10為實施方式1的用戶包的配置圖;圖11為實施方式1的接收檢查模塊的配置圖;圖12為顯示實施方式1中整體地配備有水印驗證程序的程序例子的圖;圖13顯示當實施方式1中整體地配備有水印驗證程序時接收模塊檢查部件的配置圖;圖14為顯示實施方式1的程序創建裝置的運行的流程圖;圖15為實施方式1的程序分發裝置的運行的流程圖;圖16為程序使用裝置的運行的流程圖;圖17為解釋實施方式1在程序未授權泄露的情況下用來指明泄露目的地的結構的圖;圖18為實施方式1的水印抽取裝置的配置圖;圖19為實施方式2的程序分發系統的配置圖;圖20為顯示在實施方式2的程序創建裝置中進行的操作的流程圖;圖21為解釋在實施方式1中創建的程序的圖。
具體實施例方式
(實施方式1)以下將參照附圖描述根據本發明實施方式1的程序分發系統。圖1為根據實施方式1的程序分發系統的配置圖。
根據實施方式1的程序分發系統配備有程序創建裝置10。
程序創建裝置10表示諸如創建程序的制造商或人等創建者的終端。
程序創建裝置10配備有存儲部件20。存儲部件20為用來存儲由創建者所創建的程序的元件,并且表示諸如FD、HD以及內部存儲器等物理設備。
程序創建裝置10還配備有程序結構轉換部件30。程序結構轉換部件30將存儲在存儲部件20中的程序分割為多個模塊(主體模塊)。另外,程序結構轉換部件30向被分割的程序添加偽模塊,該偽模塊不影響該程序的運行。然后,程序結構轉換部件30向水印插入部件40輸出如上所述地轉換的程序。另外,以后將具體描述程序結構轉換部件30。
水印插入部件40將電子水印插入由程序結構轉換部件30轉換的程序的主體模塊。更具體地講,水印插入部件40在程序中插入從用來指明分發者的ID信息所生成的電子水印。然后,水印插入部件40向簽名部件50輸出其中插入了電子水印的程序。另外,以后將具體描述水印插入部件40。
簽名部件50向從水印插入部件40輸出的程序的、其中插入了水印的模塊添加數字簽名。在簽名部件50所添加的數字簽名中使用主體模塊的散列值(hash value)。然后,簽名部件50向發送部件60輸出其上添加了數字簽名的程序。
另外,以后將具體描述簽名部件50。
發送部件60將從簽名部件50發送來的程序模塊打包,并且發送該包以及驗證程序給作為程序分發者終端的程序分發裝置70。當檢查在水印插入部件40中插入的電子水印時,為程序用戶終端的程序使用裝置105a和105b使用所述驗證程序。另外,以后將具體描述發送部件60。
另外,在實施方式1中,所述驗證程序被發送給作為程序分發者終端的程序分發裝置70,但是所述驗證程序不需要總是被發送給程序分發裝置70,并且可以發送給獨立的驗證程序分發者。
程序分發裝置70代表程序分發者的終端,諸如通信運營商或程序分發者的門戶站點。程序分發裝置70在所接收的程序中插入程序的用戶ID,并且向該用戶分發程序。
程序分發裝置70配備有接收部件90。接收部件90解碼從程序創建裝置10的發送部件60發送來的包,以生成該程序。另外,接收部件90接收從發送部件60發送來的驗證程序。
程序分發裝置70還配備有請求接收部件100。請求接收部件100是用來從用戶接收對于下載的請求消息的元件。
程序分發裝置70還配備有存儲部件110。存儲部件110存儲從發送部件60發送來的程序與驗證程序,以及從請求接收部件100發送來的請求消息。
程序分發裝置70還配備有水印插入部件120。水印插入部件120從存儲在存儲部件110中的程序中抽取主體模塊與偽模塊,并且在所程序的偽模塊中插入電子水印。水印插入部件120從用來指明用戶的ID生成要插入的電子水印。然后,水印插入部件120向簽名部件130輸出具有插入其中的、指明用戶的電子水印的程序。
簽名部件130計算從水印插入部件120輸入的程序的偽模塊的散列值,并且向所輸入的程序添加由所計算的散列值與其他部分構成的數字水印。簽名部件130向發送部件140發送其上添加了數字簽名的程序。
發送部件140將從簽名部件130輸出的程序的模塊打包,并且發送該包與驗證程序給作為程序用戶終端的程序使用裝置150a與150b。
程序使用裝置150a與150b代表使用程序側的用戶終端。此后,描述中使用程序使用裝置150a,而程序使用裝置150a與150b簡稱為程序使用裝置150。
程序使用裝置150配備有請求發送部件160。請求發送部件160發送請求分發程序的消息給作為分發者終端的程序分發裝置70。
程序使用裝置150還配備有接收部件170。接收部件170接收從程序分發裝置70的發送部件140發送來的包,并且解碼該包以產生程序。接收部件170還接收從發送部件140發送來的驗證程序。然后,接收部件170輸出解碼后的程序與驗證程序給存儲部件180。
存儲部件180存儲從接收部件170輸出的程序。
程序使用裝置150還配備有接收模塊驗證部件190。接收模塊驗證部件190驗證由接收部件170下載(接收)的程序的電子水印與數字簽名。然后,接收模塊驗證部件190輸出驗證后的程序給存儲部件200。另外,以后將具體描述接收模塊驗證部件190。
存儲部件200存儲從接收模塊驗證部件190輸出的已驗證程序。
程序使用裝置150還配備有執行部件210。執行部件210執行所下載的程序。
該程序分發系統如下所述地配置。
以下將參照圖2描述實施方式1中的程序結構轉換部件30。圖2為根據實施方式1的程序結構轉換部件30的配置圖。
程序結構轉換部件30配備有程序輸入部件301。程序輸入部件301接收其上添加偽模塊、待分割為多個模塊的程序。程序輸入部件301輸出該程序給偽模塊添加部件305。
偽模塊添加部件305將從偽模塊輸入部件303輸入的偽模塊添加到從程序輸入部件301輸入的程序,并且輸出該程序給程序分割部件302。優選地,當偽模塊添加部件305添加偽模塊時,偽模塊由主體模塊使用斷言方法(assertmethod)方法等等調用至少一次。
斷言方法是用程序中總是為假的條件語句替換斷言語句并且向該條件語言添加對于偽模塊的調用語句的方法。細節描述在“Watermark for softwareand its Insertion,Attacking,Evaluation and Implementation methods”,YujiIchisugi,Information Processing Society of Japan,Summer Symposium OnProgramming”中。
偽模塊添加部件305向偽信息存儲部件304提供所添加的偽模塊的名稱。
程序分割部件302將在偽模塊添加部件305中被添加了偽模塊的程序分割為多個模塊。例如,當程序以JAVA語言編寫時,程序分割部件302可以獲得作為模塊的編譯后的類文件,或者當程序以C語言編寫時,程序分割部件302可以獲得作為模塊的編譯后的目標文件。程序分割部件302輸出所分割的模塊的數目給分割信息存儲部件306。
程序輸出部件307輸出在偽模塊添加部件305中被添加了偽模塊并且在程序分割部件302中被分割為多個模塊的程序。
在這種結構中,程序結構轉換部件30向程序添加偽模塊,并且將其上添加了偽模塊的程序分割為多個模塊。
以下將參照圖3描述實施方式1中的水印插入部件40。圖3為根據實施方式1的水印插入部件40的配置圖。
水印插入部件40配備有程序輸入部件401。程序輸入部件401接收待輸入水印的程序,即接收在程序結構轉換部件30中轉換的程序。程序輸入部件401輸出所輸入的程序給插入部件402。
水印數據輸入部件403輸入待作為水印插入的數據(水印數據)。待輸入的水印數據為用來指明程序分發裝置70(即分發者)的信息,并且包括分發者的地址、電話號碼、公司名稱、個人名稱和/或電子郵件地址。可以向水印數據輸入程序的創建者(程序創建裝置10)的信息。
ID信息生成部件404生成用來根據從水印數據輸入部件403輸入的水印數據唯一地指明分發者(程序分發裝置70)的ID信息。該ID信息可以是輸入數據自身,或者通過加密輸入數據而得到的數據。另外,該ID信息可以是用來在存儲水印數據的數據庫中唯一指明水印數據的ID。
另外,實施方式1描述了基于ID信息生成水印。然而,水印不一定總是基于ID信息生成,并且只是要求分發目的地能夠根據水印唯一指明。例如,可能將序列號1到N插入待發送的模塊,并且將序列號為i的模塊分發給分發者(程序分發裝置70),從而可以唯一地指明水印與分發目的地。
模塊信息存儲部件408存儲在程序結構轉換部件30中添加的偽模塊的名稱。模塊信息存儲部件408預先從程序結構轉換部件30的偽信息存儲部件304獲得偽模塊名稱以備存儲。
插入部件402根據在ID信息生成部件404中生成的ID信息生成待要實際插入程序中的水印,使用從模塊信息存儲部件408獲得的偽模塊名稱來區分偽模塊與主體模塊,并且將水印插入主體模塊。另外,插入部件402輸出其中插入水印的主體模塊的名稱給信息存儲部件405。
作為插入部件402所插入的水印信息,不僅可能插入分發者ID,而且可能插入諸如程序權限信息、用戶終端的訪問控制信息以及安全策略等其他信息。
例如,程序權限信息包含該程序執行期滿日期和/或執行次數,和/或程序向其他終端轉移的許可,并且訪問控制信息與安全策略信息為有關于對終端資源的訪問的信息,諸如在存儲器/HD中的讀與寫的許可,以及對于套接字使用的許可。
水印信息存儲部件405存儲其中插入水印的模塊的名稱。
程序輸出部件406輸出在插入部件402中插入了水印的程序。
在這種結構中,水印插入部件40在主體模塊中插入用來指明分發者的水印。
以下將參照圖4描述根據實施方式1的簽名部件50。圖4為根據實施方式1的簽名部件50的配置圖。
簽名部件50配備有程序輸入部件501。程序輸入部件501接收待添加簽名的程序,即從水印插入部件40輸出的程序。程序輸入部件501將所輸入的程序輸出到簽名添加部件502。
模塊信息存儲部件508存儲在程序結果轉換部件30中添加的偽模塊的名稱。模塊信息存儲部件508預先從程序結構轉換部件30的偽信息存儲部件304獲得偽模塊名稱以備存儲。
簽名密鑰輸入部件503輸入加密簽名的保密密鑰。
簽名添加部件502使用從模塊信息存儲部件508獲得的偽模塊名稱來區分偽模塊與主體模塊,并且計算主體模塊的散列值。然后,簽名添加部件502使用從簽名密鑰輸入部件503輸入的保密密鑰(創建者保密密鑰)加密所計算的散列值。
簽名添加部件502使用簽名格式將模塊、作為簽名的散列值以及包含用于簽名驗證的公開密鑰(創建者公開密鑰)的證書制成單一文件。另外,簽名添加部件502將模塊名稱與散列值相關聯,以輸出到簽名數據存儲部件505。
簽名數據存儲部件505存儲從簽名添加部件502輸出的、相互關聯的模塊名稱與散列值。
程序輸出部件506輸出具有在簽名添加部件502中所添加的簽名以及其他的程序。
在這種結構中,簽名部件50向主體模塊添加簽名,并且用保密密鑰加密該簽名。
以下將參照圖5描述根據本發明實施方式1的發送部件60。圖5為實施方式1的發送部件60的配置圖。
發送部件60配備有程序輸入部件601,其接收從簽名部件50輸出的程序。程序輸入部件601接收作為其輸入的、待發送給分發者(即程序分發裝置70)的程序。程序輸入部件601輸出所輸入的程序給發送數據打包部件602。
發送數據打包部件602編譯包括程序的各種數據,并且生成分發者包,以發送給分發者,即程序分發裝置70。另外,發送數據打包部件602向打包信息存儲部件610提供為分發者打包的程序的數據大小或者CRC大小。另外,以后將具體描述分發者包。
打包數據輸入部件608輸入描述偽模塊名稱的文件。
加密密鑰生成部件605生成用于通信的加密密鑰。更具體地講,加密密鑰生成部件605生成在創建者與分發者(即程序創建裝置10與程序分發裝置70)之間處理包時所使用的加密密鑰。
驗證程序輸入部件609輸入驗證程序,以驗證在水印插入部件40中插入的水印。
安裝程序輸入部件611輸入用戶(即程序使用裝置150)軟件以便安裝從分發者(即程序分發裝置70)發送來的程序。
加密部件607使用在加密密鑰生成部件605中生成的、用于通信的加密密鑰,加密打包后的程序以及從驗證程序輸入部件609輸入的水印驗證程序,以輸出到程序發送部件606。
程序發送部件606向程序分發裝置70發送在發送數據打包部件602中打包的、并且在加密部件607中加密的程序。
以下將參照圖6描述在數據的打包部件602中生成的分發者包。圖6為根據實施方式1的分發者包的配置圖。
分發者包700包含主體模塊701、偽模塊702、在簽名部件50的簽名添加部件502中計算的主體模塊的簽名值703、用來解碼用保密密鑰加密的簽名值703的公開密鑰(創建者公開密鑰)704、描述偽模塊名稱的文件705、在偽模塊上簽名的保密密鑰(創建者保密密鑰)706、用來解碼偽模塊上簽名的公開密鑰(創建者公開密鑰)707以及安裝程序709。
此處假定對于公開密鑰704與707,由證書權威頒發證書,包含公開密鑰的證書此后被稱為公開密鑰。
作為例子,考慮打包為jar文件與tar文件,并且打包后的文件可能是被壓縮的。
程序發送部件606與分發者包700一道發送驗證程序708給程序分發裝置70。通過這種方法,另一個終端能夠檢查由程序創建部件10添加的水印。
另外,此處分發在偽模塊上簽名的保密密鑰(創建者保密密鑰)706,但不必總是分發該密鑰。另外,優選地,此時安裝程序709以及水印驗證程序708由防篡改軟件方法保護,(例如)以使其難于讀取。因此,可以防止通過不正當地分析安裝程序709與水印驗證程序708的運行而刪除與篡改水印。
以下將參照圖7描述實施方式1的水印插入部件120。圖7為實施方式1的水印插入部件120的配置圖。
程序輸入部件1201接收從存儲部件110輸入所抽取的水印的程序。程序輸入部件1201輸出該輸入程序給插入部件1202。
水印數據輸入部件1203輸入待作為水印插入的數據(水印數據)。待輸入的水印數據為用來指明程序使用裝置150(即用戶)的信息,并且包含用戶的地址、電話號碼、公司名稱、個人名稱和/或電子郵件地址。可以將程序分發者(程序分發裝置70)的信息輸入水印數據。
ID信息生成部件1204生成用來根據從水印數據輸入部件1203輸入的水印數據唯一地指明用戶的ID信息。該ID信息可以是輸入數據自身,或者是通過加密輸入數據而獲得的數據。另外,該ID信息可以是用來在存儲水印數據的數據庫中唯一指明水印數據ID,插入部件1202根據在ID信息生成部件1204中生成的ID信息生成實際插入程序的水印,使用從模塊信息存儲部件1208獲得的偽模塊名稱來區分偽模塊與主體模塊,并且將作為水印的用戶ID插入偽模塊。另外,插入部件1202輸出其中插入水印的偽模塊給水印信息存儲部件1205。
水印信息存儲部件1205存儲其中插入水印的模塊的名稱。
程序輸出部件1206輸出在插入部件1202中插入了水印的程序。
在這種結構中,水印插入部件120在偽模塊中插入了用來指明用戶的水印。
另外,實施方式1描述了基于ID信息生成水印。然而,水印信息不一定總是基于ID信息生成,只是要求能夠根據水印信息唯一指明用戶。例如,可能將序列號1到N插入待發送的模塊,并且將序列號為i的模塊分發給用戶(程序使用裝置150),從而可以唯一地指明水印與用戶。
另外,作為水印信息,不僅可能插入用戶ID,而且可能插入程序權限信息、用戶終端的訪問控制信息以及安全策略。
例如,程序權限信息包含該程序執行期滿日期和/或執行次數,和/或程序向其他終端轉移的許可/禁止,并且訪問控制信息與安全策略信息為有關于對終端資源的訪問的信息,諸如在存儲器/HD中的讀與寫的許可,以及對于套接字使用的許可。
以下將參照圖8描述根據實施方式1的簽名部件130。圖8為實施方式1的簽名部件130的配置圖。
簽名部件130配備有程序輸入部件1301。程序輸入部件1301接收待添加簽名的程序,即從水印插入部件120輸出的程序。程序輸入部件1301將所輸入的程序輸出給簽名添加部件1302。
模塊信息存儲部件1308存儲從程序創建裝置10發送來的分發者包700的偽模塊705的名稱。
簽名密鑰輸入部件1303存儲在偽模塊上簽名的保密密鑰706以及解碼從程序創建裝置10發送來的分發者包700的偽模塊簽名值的公開密鑰707。
簽名添加部件1302使用從模塊信息存儲部件1308獲得的偽模塊名稱來區分偽模塊與主體模塊,并且計算偽模塊的散列值。然后,簽名添加部件1302使用從簽名密鑰輸入部件1303輸入的保密密鑰(創建者保密密鑰)706加密偽模塊的散列值。
簽名添加部件1302將模塊、散列值以及用于簽名驗證的公開密鑰證書制成單一文件。另外,簽名添加部件1302將模塊名稱與散列值相關聯,以輸出到簽名數據存儲部件1305,并且還輸入對于偽模塊的保密密鑰706以及對于偽模塊的公開密鑰707。
程序輸出部件1306輸出具有在簽名添加部件1302中添加的簽名的程序。
在這種結構中,簽名部件130使用創建者保密密鑰在偽模塊上簽名,并且加密該簽名。
以下將參照圖9描述根據實施方式1的發送部件140。圖9為實施方式1的發送部件140的配置圖。
發送部件140配備有接收從簽名部件130輸出的程序的程序輸入部件1401。程序輸入部件1401將所輸入的程序輸出給發送數據打包部件1402。
數據打包部件1402編譯包括程序的各種數據,并且生成用戶包,以發送給用戶(程序使用裝置150)。另外,發送數據打包部件1402向打包信息存儲部件1410提供為用戶打包的程序的數據大小或者CRC大小。
另外,以后將具體描述用戶包。
打包數據輸入部件1408接收從創建者(即程序創建裝置10)發送來的分發者包700。
加密密鑰生成部件1405生成用于通信的加密密鑰。更具體地講,加密密鑰生成部件1405生成處理在程序分發裝置70與程序使用裝置150之間的包時所使用的加密密鑰。
驗證程序輸入部件1412輸入驗證程序,以驗證在水印插入部件40中插入的水印。
加密部件1407使用在加密密鑰生成部件1405中生成的、用于通信的加密密鑰,加密打包后的程序以及從驗證程序輸入部件1412輸入的水印驗證程序。
程序發送部件1406向程序使用裝置150發送在發送數據打包部件1402中打包的、并且在加密部件1407中加密的程序。
以下將參照圖10描述在發送數據打包部件1402中生成的用戶包。圖10為根據實施方式1的用戶包的配置圖。
用戶包1000包含主體模塊701、偽模塊702、包含在分發者模塊700中的主體模塊的簽名值703、在簽名部件130的簽名添加模塊1302中計算的偽模塊的簽名值1004、包含在分發者模塊700中的主體模塊的簽名值703的公開密鑰(創建者公開密鑰)704、偽模塊簽名值1004的公開密鑰(創建者公開密鑰)707以及安裝程序709。
作為例子,考慮打包為jar文件與tar文件,并且打包后的文件可能是被壓縮的。
程序發送部件1406與用戶包1000一道發送驗證程序708給程序使用裝置150。
以下將參照圖11描述根據實施方式1的接收檢查模塊190。圖11為實施方式1的接收檢查模塊190的配置圖。
接收檢查模塊190配備有程序輸入部件1901。程序輸入部件1901接收目標為檢查以及組合從接收部件170輸出的每個模塊的程序。程序輸入部件1901將程序輸出到接收包檢查部件1902。
打包信息存儲部件1903存儲從分發者(程序分發裝置70)接收的包的大小或CRC大小。打包信息存儲部件1903預先從程序分發裝置70獲得包的大小。
接收包檢查部件1902確定從分發者(程序分發裝置70)接收的包是否是一個完整的包。更具體地講,接收包檢查部件1902檢查從打包信息存儲部件1903獲得的包的大小或CRC大小是否與所接收的包的大小一致。當打包信息存儲部件1903獲得的包的大小或CRC大小與所接收的包的大小一致時,接收包檢查部件1902輸出該程序給簽名檢查部件1904。同時,當這些大小不一致時,部件1902拋棄所接收的包。
簽名檢查部件1904為驗證所有接收模塊的簽名是否正確、并且計算每個所接收模塊的散列值的元件。接著,簽名檢查部件1904分別使用主體模塊的公開密鑰704以及用來解碼添加到用戶包的偽模塊簽名值1004的公開密鑰707,解碼在用戶包1000中描述的模塊的簽名值(散列值)403與1004。然后,簽名檢查部件1904比較所計算的簽名值與添加到模塊的簽名值,并且當這些值相互一致時,輸出該程序給模塊組合部件1905,而當這些值相互不一致時,拋棄所有從分發者接收的模塊。
模塊組合部件1905將所有從分發者接收的模塊組合為一個,以生成原始程序。
驗證程序輸入部件1906輸入從分發者(即程序分發裝置70)取得的水印驗證程序。
終端信息輸入部件1908輸入程序使用裝置150的終端ID(用戶ID)。
水印驗證程序1907抽取組合后的程序的水印,并且確定該水印是否與終端ID一致。
更具體地講,使用來自驗證程序輸入部件1906的驗證程序,水印驗證程序1907抽取在模塊組合部件1905中生成的程序的水印,并且比較該水印與從終端信息輸入部件1908輸入的終端ID。然后,當在模塊組合部件1905中生成的程序的水印與從終端信息輸入部件1908輸入的終端ID一致時,程序1907輸出該程序給程序輸出部件1909,同時當該水印與終端ID不一致時,拋棄所生成的程序。
程序輸出部件1909輸出已經通過所有檢查的程序。
在這種結構中,接收模塊檢查部件190使用主體模塊以及偽模塊的簽名值判定該程序是否被授權。另外,接收模塊檢查部件190使用水印判定該程序是否被授權。
另外,驗證程序可以整體地添加到程序,并且從程序分發裝置70發送到程序使用裝置150。
圖12顯示程序例子2001,其中整體地添加了水印驗證程序。
圖13顯示這種情況下的接收模塊檢查部件。在這種情況下,接收模塊檢查部件210沒有驗證程序輸入部件1906以及終端信息輸入部件1908。
當程序在執行部件210中執行時,首先執行驗證程序2002,并且抽取插入主體程序2003中的水印,并且與終端ID比較。當該水印與終端ID一致時,開始執行主體程序2003。
因此,可能運行其上添加了水印驗證程序的程序。
參照圖14至16,以下將描述當在創建者的程序創建裝置10中創建的程序被發送到程序分發裝置70,并且下載到用戶的程序使用裝置150時的運行。
圖14為顯示實施方式1的程序創建裝置10的運行的流程圖。
程序創建裝置10接收作為其輸入的、待存儲到存儲部件20中的所創建的程序,該程序包含N-1個模塊(步驟1401)。
接著,則程序創建裝置10中,程序結構轉換部件30的程序輸入部件301接收存儲在存儲部件20中的程序。程序結構轉換部件30的偽模塊添加部件305接收偽模塊,以便分發者從偽模塊輸入部件303插入用戶ID。偽模塊添加部件305添加輸入偽模塊到在步驟1401中存儲的程序(步驟1402)。偽模塊添加部件305向偽模塊信息存儲部件304提供所添加的偽模塊的名稱。
然后,在程序結構轉換部件30中,程序分割部件302將在步驟1402中在其上添加了偽模塊的程序分割為包含偽模塊的N個模塊(步驟1403)。另外,程序分割部件302輸出所分割的模塊的數目給分割信息存儲部件306。
程序輸出部件307輸出在步驟1403中分割的模塊給水印插入部件40。
然后,水印插入部件40在程序輸入部件410中接收從程序結構轉換部件30輸出的模塊。
在水印插入部件40中,插入部件402查閱模塊信息存儲部件408,并且取得有關偽模塊的信息。插入部件402從編號i為1的模塊開始(步驟1404)至編號為N的模塊(即對所有模塊)(步驟1405)確定模塊是否為偽模塊(步驟1406)。
當在步驟1406確定模塊不是偽模塊時,插入部件402根據在ID信息生成部件404中生成的分發者ID生成水印,以插入到模塊中(步驟1407)。另外,插入部件402輸出其中添加了水印的模塊的名稱給水印信息存儲部件405。
然后,程序創建裝置10遞增i(步驟1408),然后返回步驟1405。
當在步驟1406確定模塊是偽模塊時,插入部件40不向該模塊插入水印,并且通過程序輸出部件406輸出該偽模塊給簽名部件50。然后,程序創建裝置10遞增i(步驟1408),然后返回步驟1405。
當對所有模塊完成上述處理時(步驟1405),插入部件402向程序輸出部件406輸出其中插入了水印的模塊(主體模塊),并且程序輸出部件406將這些模塊提供給簽名部件50。
在簽名部件50中,程序輸入部件501接收其中插入了水印的模塊,以輸出到簽名添加部件502。
簽名添加部件502計算插入了水印的模塊(主體模塊)的散列值,并且添加該散列值作為數字簽名(步驟1409)。
簽名添加部件502接收來自簽名密鑰輸入部件503的保密密鑰,并且加密所添加的散列值。
然后,簽名添加部件502通過程序輸出部件506向發送部件60輸出其上添加了簽名與水印的模塊(主體模塊)。
最后,在發送部件60中,程序輸入部件601接收模塊,并且發送數據打包部件602生成分發者包以輸出到加密部件607。
使用在處理程序創建裝置10與程序分發裝置70之間的包時所使用的加密密鑰,加密部件607加密該包(步驟1401),并且還加密從驗證程序輸入部件608輸入的驗證程序(步驟1411)。然后,程序發送部件606發送分發者包700與驗證程序708給分發者(步驟1412)。
分發者包700包含N-1個主體模塊701、單一偽模塊702、相應于N-1個主體模塊701的簽名值703、用來解碼加密簽名值的公開密鑰704、偽模塊名稱705、分發者用來在偽模塊上簽名的保密密鑰706、相應于保密密鑰706的公開密鑰707以及安裝程序709。
另外,當可以通過發送路徑獨立地得到公開密鑰時,不需要總是發送證書。
使用諸如XML簽名之類的格式,將簽名以及每個模塊相互關聯。XML簽名能夠以XML的統一方式表示簽名的目標、簽名算法、簽名值、證書以及其他。
因此,程序創建裝置10向分發者發送包含待由分發者自由使用的偽模塊以及其中插入了水印與數字簽名的主體模塊的分發者包。
通過這種方法,分發者能夠在偽模塊中插入用來指明用戶的ID等等。
另外,因為主體模塊具有數字簽名,所以分發者不能對主體模塊進行篡改。
另外,因為分發者包700使用在程序創建裝置10與程序分發裝置70之間確定的保密密鑰加密,所以也可以防止除被授權的分發者之外的人員對分發者包700進行篡改。
以下將參照圖15描述在分發者一側,在程序分發裝置70中執行的操作。圖15為分發者一側程序分發裝置70操作的流程圖。
程序分發裝置70在接收部件90中接收從創建者的程序創建裝置10發送來的分發者包,并且解碼該包以存儲在存儲部件110(步驟1501)。
程序分發裝置70在請求接收部件100中接收來自用戶的下載請求,并且判定所接收的請求是否為對于包的下載請求(步驟1502)。
當該請求不是對于包的下載請求時,因為該請求是對于驗證程序的,所以發送部件140在加密部件1407中使用在加密密鑰生成部件1405中生成的、并且用于處理程序分發裝置70與程序使用裝置150之間的包的加密密鑰加密驗證程序,并且從程序發送部件1406發送該程序給程序使用裝置150(步驟1512)。
同時,當在步驟1502該請求是對于包的下載請求時,水印插入部件120的程序輸入部件1201接收來自存儲部件110的分發者包。接著,水印插入部件120的插入部件1202解包(depackage)分發者包,并取得N個模塊(步驟1503)。
接著,插入部件1202查閱模塊信息存儲部件1208,并且取得關于偽模塊的信息。然后,使用所獲取的關于偽模塊的信息,插入部件1202通過從1(步驟1504)到N(步驟1505)變化模塊號i檢查所獲取的N個模塊是否每個模塊為偽模塊(步驟1506)。
當一個模塊為偽模塊時,插入部件1202從ID信息生成部件1204獲取用戶ID,并且使用用戶ID在偽模塊中插入水印(步驟1507)。然后,插入部件1202輸出其中插入了水印的模塊給程序輸出部件1206,并且程序輸出部件1206將該模塊輸出給簽名部件130。
插入部件1202還輸出其中插入了水印的模塊名稱給水印信息存儲部件1205。
簽名部件130在程序輸出部件1301中接收輸入模塊。簽名部件130在簽名添加部件1302中計算偽模塊的散列值。接著,簽名添加部件1302使用在分發者包700的偽模塊上簽名的、從程序創建裝置10發送來的、并且從簽名密鑰輸入部件1303輸入的保密密鑰(創建者保密密鑰)706,加密所計算的散列值。簽名添加部件1302向偽模塊添加加密后的數字簽名,以輸出到程序輸出部件1306(步驟1508)。程序輸出部件1306輸出其上添加了數字簽名的偽模塊給發送部件140。
最后,程序分發裝置70遞增i(步驟1509),并返回步驟1505。
同時,當在步驟1505模塊不是偽模塊時,程序分發裝置70不插入用戶ID與簽名,輸出該模塊給發送部件140,遞增i,并返回步驟1505。
程序分發裝置70對所有模塊執行上述處理。
發送部件140在程序輸入部件1401中接收從程序輸出部件1306發送來的模塊,以輸出到發送數據打包部件1402。
發送數據打包部件1402生成用戶包,以輸出到加密部件1407。
使用在加密密鑰生成部件1405中生成的、用于通信的加密密鑰,加密部件1407加密打包后的用戶包1000(步驟1510),以輸出到程序發送部件1406。然后,程序發送部件1406發送加密后的包給程序使用裝置150(步驟1511)。
加密部件1407向用戶包1000添加N-1個主體模塊701、單一偽模塊702、N-1個主體模塊701的簽名值(散列值)703、偽模塊的簽名值1004、主體模塊簽名值703的公開密鑰704、用于偽模塊簽名值1004的公開密鑰707以及安裝程序709。
另外,當可通過發送路徑獨立地得到公開密鑰時,不必總是發送密鑰證書。
以與分發者包中同樣的方式,使用簽名格式將偽模塊與簽名相關聯。
通過這種方式,程序分發裝置70能夠在偽模塊中插入用來指明用戶的ID等等。因此可以防止用戶對于程序的未授權使用。
另外,偽模塊被給予數字簽名,因此不能被篡改。另外。因為添加到偽模塊的數字簽名使用創建者的保密來加密,所以用戶不能根據在解碼時所使用的公開密鑰的差別指明其中插入了用戶ID的偽模塊。作為結果,可以可靠地防止偽模塊被用戶篡改。
另外,因為用戶包1000使用在程序分發裝置70與程序使用裝置150之間確定的保密密鑰加密,所以也可以防止非授權用戶的人員對于用戶包1000的篡改。
以下將參照圖16描述在用戶110中進行的操作。圖16為程序使用裝置150的操作的流程圖。
首先,程序使用裝置150在請求發送部件160中向分發者發送對于程序發送的請求以及裝置150的終端ID(步驟1601)。
程序使用裝置150在接收部件170中接收從程序分發裝置709發送來的用戶包,并且解碼該包,以存儲在存儲部件180中(步驟1602)。
接收模塊檢查部件190在程序輸入部件1901中接收存儲在存儲部件180中的包。
在接收模塊檢查部件190中,接收包檢查部件1902從打包信息存儲部件1903獲得該包的大小或CRC大小。然后,接收包檢查部件1902檢查從打包信息存儲部件1903獲得的該包的大小或CRC大小是否與所接收的包的大小一致,并且由此檢查所輸入的包是否因為數據包丟失等等而成為不完整數據(步驟1603)。
當在步驟1603所接收的包為不完整的數據時,接收包檢查部件1902向用戶顯示出錯消息(步驟1615)并拋棄所接收到的包(步驟1616)。
同時,當在步驟1603接收到完整的數據時,接收包檢查部件1902解包所接收的包,并且抽取N個模塊(步驟1604)。然后,接收包檢查部件1902輸出這N個模塊給簽名檢查部件1904。
簽名檢查部件1904獲取這N個模塊,并且計算i從1(步驟1605)到N(步驟1606)的每個模塊的數字簽名(步驟1607)。簽名檢查部件1904使用添加到用戶包1000的公開密鑰704與707,解碼添加到每個模塊的數字簽名。然后,簽名檢查部件1904比較添加到每個模塊的數字簽名與所計算的數字簽名,并由此檢查每個模塊是否為授權模塊(步驟1608)。
當簽名正確時,簽名檢查部件1904將該模塊提供給模塊組合部件1904。檢查部件1904遞增i(步驟1609),并返回步驟1606。
當簽名不正確時,簽名檢查部件1904顯示錯誤消息(步驟1615),并且拋棄所接收的包(步驟1616)。
當所有模塊都通過了簽名檢查時,模塊組合部件1905組合這些模塊,以生成程序(步驟1610)。在生成程序之后,模塊組合部件1905輸出該程序給水印檢查部件1907。
水印檢查部件1907向程序分發裝置70請求水印驗證程序,并且在驗證程序輸入部件1906中接收驗證程序(步驟1611)。
使用所接收的驗證程序,水印檢查部件1907抽取所生成程序的水印(步驟1612),并且檢查該水印是否與從終端信息輸入部件1908輸入的終端ID一致(步驟1613)。
當該水印與終端ID一致時,水印檢查部件1907通過程序輸入部件1909一次存儲該程序在存儲部件200中。
然后,執行部件210使用對于存儲在存儲部件200中的程序的安裝程序1002,并且由此安裝個該程序以備執行(步驟1614)。
同時,當該水印與ID不一致時,水印檢查部件1907不存儲該程序,顯示錯誤消息(步驟1615),并且拋棄所接收的包(步驟1616)。
由此,通過比較添加到模塊的數字簽名與所計算的數字簽名,程序使用裝置150能夠判定所接收程序的有效性。
另外,通過比較插入偽模塊的水印與裝置150的ID信息,程序使用裝置150能夠判定所接收程序的有效性。
另外,程序使用裝置150從用戶包1000獲取主體模塊簽名值的公開密鑰704,以及偽模塊簽名值的公開密鑰707,并且能夠使用這些密鑰解碼簽名值。同時,加密后的簽名值不能在不使用授權創建者的保密密鑰的情況下解碼,因此可能識別非法程序。
以下將參照圖17描述在程序的未授權泄露中指明泄露目的地的結構。
如圖17所示,當程序不正當泄露時,創建者使用水印抽取裝置220從已經泄露到泄露目的地1701的程序中抽取水印,并且能夠指明為泄露來源的分發者的程序分發裝置70。
以下將參照圖18描述根據實施方式1的水印抽取裝置220。圖18為實施方式1的水印抽取裝置220的配置圖。
程序輸入部件2201接收其中插入了水印的程序,并且輸出該程序到水印檢測部件2202。
ID信息存儲部件2204根據從水印檢測部件2202得到的ID信息生成分發目的地的信息。
當ID信息為數據庫中的數據ID時,ID信息存儲部件2204從該ID抽取數據,因此獲得分發目的地的信息。另外,當ID信息為分發目的地信息的加密信息時,ID信息存儲部件2204解碼該數據,并且獲得分發目的地的信息。
水印信息存儲部件2205存儲其中插入了水印的模塊的名稱。這些信息從水印插入部件40的水印信息存儲部件405獲得。
水印檢測部件2202從以下模塊中抽取插入到模塊中的水印,該模塊具有從水印信息存儲部件2205獲得的名稱。然后,水印檢測部件2202根據所城區的水印生成ID信息,以提供給輸出部件2203。
輸出部件2203參照ID信息存儲部件2204,從水印檢測部件2202在中生成的ID信息抽取分發目的地的信息。并且輸出該信息。
通過這種方法,水印抽取裝置220輸出非法分發了程序的分發來源的信息。
另外,本發明適用于以下情況水印驗證程序被添加到在程序使用裝置150中接收的程序上。
在這種情況下,發送部件60與接收模塊檢查部件190的操作不同于上述的情況。
在發送部件60中,驗證程序輸入部件609不接收水印驗證程序。另外,在接收模塊檢查部件190中,不進行在驗證程序輸入部件1901、終端信息輸入部件1908以及水印檢查部件1907中的操作。
以下將參照圖21描述在實施方式1中創建的程序。
在圖21中,程序2900a具有存儲在存儲部件20中的基本程序。程序2900b為通過向基本程序2900a添加分發者水印信息與偽方法而獲得的程序。程序2900c為通過編譯基本程序2900a而獲得的程序,并且程序2900d表示通過在程序2900c中插入用戶水印而獲得的程序。
首先,在程序創建裝置10中,程序結構轉換部件30的偽模塊添加部件305在步驟1402向程序2900a添加偽方法(圖中2901所示的部分)。另外,(例如)使用斷言方法向程序2900a添加偽方法的調用語句(圖中2902所示的部分)。
水印插入部件40中的插入部件402在步驟1406中判定每個方法是否為偽方法,當該方法不是偽方法時,插入從分發者的ID生成的水印信息S1(11)與S2(22)(圖中2903示的部分)(1122)。在插入分發者的水印信息之后,在步驟1409編譯程序并且向非偽方法的部分添加數字簽名。另外,為了簡便,使用反匯編程序進行描述。
在程序分發裝置70中,水印插入部件120的插入部件1202在步驟1506中判定每個方法是否為偽方法。當一個方法是偽方法時,部件1202插入根據用戶的ID信息((C)11)生成的水印信息U1(100111 001101 101000 001011)(圖中2904所示的部分),并且在步驟1508中向偽方法添加數字簽名。
接著,在程序使用裝置150中,在步驟1607,接收模塊檢查部件190的簽名檢查部件1904使用從程序創建裝置10分發來的安裝程序,驗證添加到程序2900d的數字簽名。另外,在步驟1613,接收模塊檢查部件190的水印檢查部件1907使用從程序創建裝置10分發來的驗證程序,從偽方法MS抽取水印。當程序2900d通過步驟1607與1613的驗證時,程序使用裝置150安裝程序2900d以備執行。
另外,該實施方式描述了添加作為偽模塊的方法的情況,當時其也適用于添加類的情況。
如上所述,根據實施方式1,通過獨立于主體模塊來添加偽模塊,分發者能夠向偽模塊插入用戶ID。另外,通過向主體模塊添加簽名,就可以防止分發者操縱作為程序基本重要部分的主體模塊。因此,可以防止分發者對程序的篡改。
另外,根據實施方式1,添加到主體模塊的數字簽名使用創建者的主體模塊的保密密鑰來加密,并且分發者不具有創建者的主體模塊的保密密鑰。通過這種方法,即使分發者使用公開密鑰704解碼數字簽名來篡改,也不可能使用創建者的保密密鑰再次加密。相應地,用戶不能解碼主體模塊。結果,可能安全地防止分發者篡改主體模塊。
另外,根據實施方式1,即使程序非法泄露了,因為在主體模塊中插入了分發者ID,也可以指明作為泄露來源的分發者。由此,可以防止分發者對于程序的篡改。
另外,根據實施方式1,因為程序部分被分割為多個主體模塊,所以增加了包含偽模塊的所有模塊的數目,并且用戶需要在大量模塊中指明其中插入了用戶ID的偽模塊,從而增加難度。另外,模塊與偽模塊之間的大小差異降低,因此用戶不可能指明其中插入用戶ID的偽模塊。相應地,可以防止用戶對程序的篡改。
另外,根據實施方式1,通過向分發者包700提供對于偽模塊上簽名的保密密鑰,分發者可能使用創建者的保密密鑰向偽模塊添加數字簽名。當分發者使用分發者的保密密鑰向偽模塊添加數字簽名時,對于圖體模塊的保密密鑰與對于偽模塊的保密密鑰,證書頒發來源不同。因此,用戶能夠容易地指明偽模塊的部分,并且容易地指明插入水印的部分。然而,在實施方式1中,因為用戶在簽名驗證中所使用的證書都是頒發給創建者,所以不可能使用證書的頒發來源來指明插入了水印的部分,因此可以防止用戶刪除水印。
另外,也可以為運行程序創建裝置10、程序分發裝置70以及程序使用裝置150中的每一個準備程序,將該程序存儲在存儲介質中,并且使通用計算機從存儲介質下載該程序以備執行。
(實施方式2)以下將參照附圖描述根據本發明實施方式2的程序分發系統。本發明的實施方式2相應于以下情況用戶從多個分發者下載程序的不同模塊。圖19為實施方式2的程序分發系統的配置圖。
實施方式2的程序分發系統的配置圖與實施方式1在以下方面不同創建者分割程序以發送到多個分發者,并且用戶通過多個分發者接收所分割的程序。
更具體地講,在程序結構轉換部件1802與水印插入部件1803的操作中,創建者一側的程序創建裝置1801不同于實施方式1的程序創建裝置10。另外,在接收模塊檢查部件1804的操作中,用戶一側的程序使用裝置1805不同于實施方式1的程序使用裝置150。
以下將描述實施方式2的程序結構轉換部件1802。在偽模塊添加部件305的操作中,程序結構轉換部件1802不同于實施方式1的程序結構轉換部件30。
實施方式2的偽模塊添加部件305向程序添加從偽模塊輸入部件303輸入的兩個偽模塊。偽模塊添加部件305使用斷言方法添加這些偽模塊,以備由不同主體模塊調用。
另外,除了偽模塊添加部件305的操作外,程序結構轉換部件1802與實施方式1的程序結構轉換部件30相同,因此省略其描述。
以下將描述實施方式2的水印插入部件1803。在插入部件402的操作中,實施方式2的水印插入部件1803不同于實施方式1的水印插入部件40。
實施方式2的插入部件402根據在ID生成部件404中生成的ID信息生成實際插入程序中的水印,并且對于具有非從模塊信息存儲部件408輸入的偽模塊名稱的名稱的模塊,在一部分中插入指明分發者A的分發者ID,同時在另一部分中插入指明分發者B的分發者ID。
另外,實施方式2的水印插入部件1803的其他部分與實施方式1的水印插入部件40的其他部分相同,因此省略其描述。
以下將描述接收模塊檢查部件1804。
接收模塊檢查部件1804檢查從分發者A與分發者B接收的包,解包分發者A與分發者B的各自的包,并且獲取總共N個程序。
以下將描述下列操作在創建者的程序創建裝置1802中生成的程序被發送到分發者A的程序分發裝置70a與分發者B的程序分發裝置70b,并且被下載到用戶的程序使用裝置150。
以下將參照圖20描述程序創建裝置1801中的處理。圖20為顯示在實施方式2的程序創建裝置1801中進行的操作的流程圖。
首先,程序創建裝置1801創建包含N-2個模塊的程序,以存儲在存儲部件20中(步驟2001)。然后,程序轉換部件1802向程序添加待插入用戶ID的兩個偽模塊(步驟2002),并且分割該程序為包含偽模塊的N個模塊(步驟2003)。
另外,圖19顯示兩個分發者的情況。然而,本發明適用于三個或更多個分發者的情況,并且在這種情況下,添加相應于分發者數目的偽模塊。
水印插入部件1803從1(步驟2004)到j(步驟2005)改變模塊編號i,以檢查具有每個編號的模塊是否為偽模塊(步驟2006)。
當模塊不為偽模塊時,水印插入部件1803插入指明分發者A的分發者ID(步驟2007)。接著,簽名部件50向其中插入了分發者ID的偽模塊添加數字簽名(步驟2008)。然后,程序創建裝置1801遞增i(步驟2009),并返回步驟2005。
當在步驟2006判定模塊為偽模塊時,程序創建裝置1801不插入水印與數字簽名,遞增i并返回步驟2005。
接著,水印插入部件1803從j+1到N(步驟2010)改變i,以檢查每個是否為偽模塊(步驟2011)。
然后,當模塊不為偽模塊時,水印插入部件1803插入指明分發者B的分發者ID(步驟2012),并且簽名部件50添加數字簽名(步驟2013)。然后,程序創建裝置1801遞增i(步驟2014),并返回步驟2010。
當在步驟2011判定模塊為偽模塊時,程序創建裝置1801不插入水印與數字簽名,遞增i并返回步驟2010。
最后,發送部件60打包待發送給分發者A與分發者B的模塊以加密(步驟2015),并且將這些包分別發送給分發者A的程序分發裝置70a與分發者B的程序分發裝置70b(步驟2016)。
以下將描述實施方式2的程序分發裝置70a與程序分發裝置70b的操作。在步驟1503與1505的操作中,實施方式2的程序分發裝置70a與程序分發裝置70b的操作與實施方式1的程序分發裝置70的操作不同。
在實施方式1的步驟1503中,在實施方式2中分發者A的程序分發裝置70a獲取j個模塊,而分發者B的程序分發裝置70b獲取N-j個模塊。
另外,在實施方式1的步驟1505中,在實施方式2中分發者A的程序分發裝置70a從1到j改變i,而分發者B的程序分發裝置70b從j+1到N-j改變i。
另外,除了步驟1503與1505外,在實施方式2中每個步驟都與實施方式1的運行相同,并且省略其描述。
接著,描述實施方式2中用戶的程序使用裝置1805的操作。在實施方式1的步驟1601至1604的操作中,實施方式2中用戶的程序使用裝置1805的操作與實施方式1的程序使用裝置150的操作不同。
在實施方式1的步驟1601中,在實施方式2中向分發者A的程序分發裝置70a與分發者B的程序分發裝置70b發送終端ID。
在實施方式1的步驟1602中,在實施方式2中從分發者A的程序分發裝置70a與分發者B的程序分發裝置70b接收各自的包,并且解碼并存儲這些包。
在實施方式1的步驟1603中,在實施方式2中檢查從分發者A的程序分發裝置70a與分發者B的程序分發裝置70b接收的各自的包。
然后,在實施方式1的步驟1604中,在實施方式2中解包分發者A的程序分發裝置70a與分發者B的程序分發裝置70b的各自的包,并且獲取總共N個程序。
實施方式1中的步驟1604之后的每個步驟在實施方式2中提供與實施方式1的運行相同的操作,因此省略其描述。
如上所述,根據實施方式2,程序的不同部分被發送給分發者A與分發者B,從而分發者A與分發者B不能具有完整程序。因此,可以防止由于分發者A與分發者B假裝用戶而產生的未授權泄露。
如上所述,根據本發明,可能在不使分發者操縱程序的主體模塊的情況下,插入用戶ID,因此可以防止分發者對程序的篡改。另外,插入作為水印信息的分發者ID也可以抑制未授權泄露。本發明適用于分發諸如運動圖片、音頻以及程序等內容,因此用途廣泛。
本發明不限于上述實施方式,在脫離本發明范圍的前提下可能有各種改變與變化。
本發明基于在2003年8月28日提交的日本專利申請2003-305397,以及在2004年7月6日提交的日本專利申請2004-199677,其內容融入此文作為參考。
權利要求
1.一種程序創建裝置,其通過分發者向用戶分發所創建的程序,包括偽模塊添加器,其向程序添加偽模塊,由此使分發者能夠在偽模塊中插入指明用戶的用戶水印,而對程序的運行沒有任何影響;簽名器,其向程序添加數字簽名;以及發送器,其向分發者分發其上添加了偽模塊以及數字簽名的分發者程序。
2.根據權利要求1的程序創建裝置,還包括水印插入器,其在程序中插入指明分發者的分發者水印。
3.根據權利要求1的程序創建裝置,還包括程序分割器,其將程序分割為多個模塊。
4.根據權利要求1的程序創建裝置,其中用于由分發者添加到偽模塊的數字簽名的保密密鑰被發送到分發者。
5.根據權利要求1的程序創建裝置,其中用來檢查由分發者插入的用戶水印的驗證程序被添加到程序并且發送。
6.根據權利要求1的程序創建裝置,其中所述分發者程序被分割為多個部分,并且通過分發者分發到用戶。
7.一種程序創建裝置,包括水印插入器,其在分發者程序的偽模塊中插入指明用戶的用戶水印,其中所述偽模塊與數字簽名被添加到程序,在對程序的運行沒有任何影響的情況下添加插入水印的偽模塊;發送器,其向用戶發送在偽模塊中插入用戶水印的用戶程序。
8.根據權利要求7的程序創建裝置,還包括簽名器,其向偽模塊添加數字簽名。
9.根據權利要求8的程序創建裝置,其中使用用于從程序創建裝置發送來的數字簽名的保密密鑰,將數字簽名添加到偽模塊。
10.一種程序使用裝置,包括接收器,其接收用戶程序,在該用戶程序中,指明用戶的用戶水印被插入在分發者程序的偽模塊中,在該分發者程序中,偽模塊與數字簽名被添加到一程序,在對程序的運行沒有任何影響的情況下添加插入水印的偽模塊;以及水印檢查器,其檢查用戶程序中的用戶水印。
11.根據權利要求10的程序使用裝置,還包括組合器,其組合從用戶程序分割來的各部分;以及執行器,其執行所組合的用戶程序。
12.根據權利要求10的程序使用裝置,其中所述水印檢查器從發送路徑上的終端獲取用來檢查用戶水印的驗證程序。
13.根據權利要求12的程序使用裝置,其中所述驗證程序包含在驗證程序中。
14.一種程序分發系統,包括根據權利要求1的程序創建裝置;程序分發裝置,具有水印插入器,其在分發者程序的偽模塊中插入指明用戶的用戶水印;以及發送器,其向用戶發送在偽模塊中插入用戶水印的用戶程序;以及程序使用裝置,具有接收器,其接收用戶程序;以及水印檢查器,其檢查用戶程序中的用戶水印。
15.一種用于通過分發者向用戶分發所創建的程序的程序分發方法,包括向程序添加偽模塊,由此使分發者能夠在偽模塊中插入指明用戶的用戶水印,而對程序的運行沒有任何影響;向程序添加數字簽名;以及向分發者分發其上添加了偽模塊以及數字簽名的分發者程序。
16.一種用于向用戶分發以根據權利要求15的程序分發方法所發送的分發者程序的程序分發方法,包括在分發者程序的偽模塊中插入指明用戶的用戶水印;以及向用戶發送在偽模塊中插入用戶水印的用戶程序。
17.一種程序使用方法,包含接收以根據權利要求16的程序發送方法所發送的用戶程序;以及檢查用戶程序中的分發者水印。
18.一種程序創建方法,包含向程序添加偽模塊,由此使水印能夠被插入偽模塊中,而對程序的運行沒有任何影響;以及向程序添加數字簽名。
全文摘要
在本發明中,程序配備有對程序的運行沒有任何影響的偽模塊以及數字簽名,可以在該偽模塊中插入水印。因此,分發者可能在偽模塊中插入指明用戶的水印,并且防止分發者對于程序的未授權泄露。另外,可以防止分發者對程序的篡改。
文檔編號G06F1/00GK1592188SQ20041007491
公開日2005年3月9日 申請日期2004年8月30日 優先權日2003年8月28日
發明者里雄二, 伊藤智祥, 山口孝雄 申請人:松下電器產業株式會社