专利名称:程序创建装置的制作方法
技术领域:
本发明涉及一种安全的程序分发系统,对其施加了程序电子水印。
背景技术:
随着计算机技术的发展,通过网络分发程序代码(此后简称为程序)已经较常见了。与此类分发相对应,出现了以下问题所下载的程序被分析,从而泄露在该程序中所使用的算法与思路,并且程序本身被篡改用来进行诈骗。
另外,程序盗窃已经成为一种严重的问题,使得某人所开发的程序的全部或部分在没有正当授权的情况下被使用,或者在没有获得程序开发者同意的情况下被重新分发。
考虑到将来还会扩大的通过网络的程序分发,必须要保护程序以防止欺诈的方案。
例如,考虑用户操作终端从分发者下载程序的情况。在这种情况下,创建者首先创建程序。接着,分发者的终端将该程序注册。然后,当用户终端请求分发者终端分发该程序时,分发者终端将该程序发送给用户终端,并且用户终端下载所分发的程序以存储。
在这些情况下,假定有以下威胁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日
发明者里雄二, 伊藤智祥, 山口孝雄 申请人:松下电器产业株式会社