受托编译中性结构程序版本产生 特定结构的系统和方法 本发明一般涉及一种分布式计算机系统,特别涉及一种程序编译系统(Program Compilation System)和方法,其中,由受托的第三方以如下方式对中性结构可执行程序进行编译,所述的方式是指该所编程序的接受者能够检验所述相应中性结构程序的同一性(identity)并能够检验它由所述受托第三方(trusted third party)所编译。
术语“结构”被规定用于这个文件的目的意指一系列型号计算机(familyof computer models)的运行特性。不同的结构例子是:Macintosh计算机、使用DOS或Windows操作系统的IBM PC兼容计算机、运行Solaris操作系统的SUN微系统计算机和使用Unix操作系统的计算机系统。
术语“中性结构”(architecture neutral)被规定用于这个文件的目的涉及到使用一些不同的计算机结构在多种计算机平台上执行诸如用Java(SunMicrosystem公司的商标)语言编写的程序等某些程序的能力。
术语“特定结构”被规定用于这个文件的目的涉及到仅使用一个单一的计算机结构在计算机平台上执行某些程序的请求。例如,用80486汇编程序语言编写的目标代码程序只能在使用IBM PC兼容计算机结构的计算机(以及含有IBM PC兼容计算机仿真器的其它计算机)上执行。
中性结构程序(ANPrograms)的重要特性包括用所述中性结构语言(ANLanguage)编写的程序地结构独立性。例如,Java字节码程序可以在具有Java字节码解译程序的任意一个计算机平台上执行。Java字节码程序的另一个重要特性是在执行以前利用Java字节码检验器(verifier)可以直接检验它们的完整性。Java字节码检验器确定所述的程序是否符合预定的完整性标准。这些标准包括操作数栈(operand stack)和数据类型使用限制,该使用限制保证Java字节码程序不会在执行计算机的操作数栈中上溢或下溢,并保证所有的程序指令仅利用已知数据类型的数据。其结果是Java字节码程序不能够建立目标指针,并且,通常不能访问除用户显然已经被授权允许使用的系统资源以外的系统资源。
遗憾的是,分布在ANLanguage中的可执行程序使得所述ANProgram的运行效率要低于如果利用特定结构性能时所能达到的效率。例如,由Java字节码解译程序执行的Java字节码程序的运行速度通常要比在相应的特定结构语言(ASLanguage)中编译的等效特定结构程序(ASProgram)慢2.5到5倍。在速度减少5倍被认为对于一个ANProgram执行器(即,解译程序)来讲是不好的同时,它会在效率方面带来足够大的损失,所以某些用户将需要或坚持要求按ASLanguage编译的等效程序的能力使用。
编写的编译程序可将ANProgram编译成等效ASProgram,但是,对于终端用户来讲,它们特别昂贵。另外,不能利用一个ANProgram完整性检验器根据编译的ASProgram代码来直接检验所述等效编译的ASProgram的完整性。因此,在Java字节码程序的情况下,将ANProgram编译成等效ASProgram的这种使用可能导致ANLanguage的一种最重要特性的丧失。
但是,存在有某些合法的(或正当的)任务,这些任务可以利用完整性不可检验的ASProgram加以执行,但不能利用完整性可检验的ANProgram加以执行。这些任务包括其它违背设置在完整性可检验的ANProgram上的操作数栈和数据类型使用限制的任务,另外,这种ASProgram能够比ANProgram执行得更快,其结果是就存在有为什么希望具有如下计算机系统的理由,这种计算机系统被设计成除了具有执行完整性不可检验的ASProgram的能力以外,它主要用于执行完整性可检验的ANProgram。
虽然通过第三者执行ANProgram的编译是可能的,但是,这种编译需要将所述的第三者认证,就是说,必须可以对由特定受托的第三者编译的ASProgram中的信息进行检验。最好,它还能够确认编译后的ASProgram是由一个特定受托编译程序产生的,并且由于相对于预定完整性标准编译后的ASProgram的完整性不能够被直接检验,所以该编译后的ASProgram应当包括某种信息,这种信息可以用能检验的方式识别依据其进行编译的相应的ANProgram和对其进行编译的ASLanguage。
因此,本发明的一个目的是提供一种ANProgram编译程序和编译方法,这种编译方法使根据相应的ANProgram所编译的ASProgram的用户能够确认编译该ANProgram的编译者的同一性以及所述相应的ANProgram的同一性和其中所编译的ASProgram的ASLanguage语言。
本发明的另一个目的是提供一种ANProgram执行器(executer)和一种执行方法,这种方法是在防止调用其源、编译信息和完整性不能检验的ASProgram的同时,允许正在执行的、完整性可检验的ANProgram去调用受托的或具有可检验源和编译信息的完整性不可检验的ASProgram,从而使得几乎所有的合法任务都可以被执行。
总之,本发明是一种计算机网络,该网络包括一个程序编译计算机和一个程序执行计算机。
所述程序编译计算机是由编译方(compiling party)运行的,它包括一个存储器,用于存储由一个始发方(originating party)产生的中性结构程序。所述中性结构程序包含有中性结构程序码和所述始发方的一个数字署名(signature)。所述程序编译计算机还包括一个署名检验器,该检验器检验所述始发方的数字署名,以验证所述始发方的数字署名匹配与附加到中性结构程序的署名(即:是由其产生)。
所述程序编译计算机还包括一个编译程序,当验证完所述始发方的数字署名时,该编译程序按照由对信息编译所识别的特定结构语言,将该中性结构程序码编译成特定结构程序码。该编译程序使用一个署名发生器将一个所述编译程序的数字署名附加到所述特定结构程序码上,其中,该编译程序的署名标记一组信息,该信息包括所编译的特定结构程序码加上位于所述中性结构程序上的署名。在最佳实施例中,所述编译程序使用上述署名发生器将所述编译方的数字署名也附加到特定结构程序码上,其中,编译方署名标记一组信息,该信息包括所编译的特定结构程序码、位于中性结构程序上的署名和该编译程序署名。
所述程序执行计算机由执行方操作,它包括一个存储器,用于存储中性结构和特定结构程序。它还包括一个署名检验器,用于(A)检验处于中性结构程序形式下的所述始发方的数字署名,和(B)检验处于特定结构程序形式下的编译程序的数字署名和/或检验处于特定结构程序形式下的编译方的数字署名。术语“检验一个署名”的意思是执行一个过程以确定所述的署名与被所述署名标记的该组信息相匹配(即:实际上是由其产生)。
所述程序执行计算机还包括一个特定结构程序执行器,当处于所述特定结构程序形式下的数字署名被验证完毕时,该特定程序执行器执行所述特定结构程序的特定结构程序码。
在最佳实施例中,在一个对象中表示了所述中性结构程序,所述对象含有一个数字署名,该数字署名包括唯一与所述中性结构程序相关的一个消息摘要。由所述编译程序产生的该特定结构程序包括:
·该编译的、特定结构码;
·由所述中性结构程序的提供方标记的该相应的中性结构程序的数字署名;
·编译程序本身的数字署名,包括所编译的程序的消息摘要和用于识别编译该程序所使用的和利用编译程序的专用加密密钥标记的编译程序的信息;和
·执行该编译的受托方的数字署名,包括所编译的程序的消息摘要和用于识别该受托方的信息和使用编译方的专用加密密钥标记的信息。
通常可以获得的公用加密密钥的受托储存部分(repository),有时调用一个命名服务,并保持该公用密钥以用于该编译程序和受托的编译方。使用这些公用加密密钥,该编译程序的所有接受者都能够对编译后的程序中的数字署名进行解密,以验证所述的编译程序是由指定的受托方编译以及是由指定的编译程序编译,并且,检验相应的中性结构程序的同一性。作为选择,所编程序的接受者能够使用一个程序检验器在执行所编译的特定结构程序之前去检验相应的中性结构程序的正确运行。
本发明的其它目的和特征通过下述结合附图的详细描述及所附权利要求将变得更清楚。
图1是本发明最佳实施例中的一个分布计算机系统方框图;
图2是根据本发明最佳实施例的一个中性结构程序的结构;
图3是根据本发明最佳实施例产生的一个编译的、特定结构程序结构;
图4是根据本发明一个最佳实施例的一个对象和相关的对象分类。
参看图1,这里示出了一计算机网络100,它包括很多客户计算机102、服务计算机104和受托密钥储存部分106。经过网络通信连接器108,客户计算机102彼此相连并与服务计算机104和受托密钥储存部分106相互连接。所述网络通信连接器可以是一个局部或广域网络、互联网络、这些网络的结合或某些其它类型的网络通信连接器。
虽然大多数客户计算机102是诸如Sun工作站、IBm兼容计算机、Macintosh计算机等桌面计算机,但是实际上任何类型的计算机都可作一客户计算机。这些客户计算机中的每一个都包括一个CPU110,一个用户接口112,一个存储器114和一个网络通信接口116。所述网络通信接口允许多个客户计算机彼此间以及与服务计算机104和与受托密钥储存部分108之间经过网络通信连接器106相互通信。
每个客户计算机102的存储器114存储有一个操作系统118,一个网络通信管理器120,一个ANProgram(中性结构程序)执行器122,一个ASProgram(特定结构程序)执行器124,和一个ANProgram完整性检验器126,一个ANProgram编译制备器128,一个署名发生器130,一个署名检验器132,一个编译信息(Complnfo)检验器134,一个对象分类加载器136,一个用户地址空间138,一个受托对象分类储存部分140,一个未受托对象分类储存部分142和一个已知的受托编译方和受托编译程序的表144。所述操作系统运行在CPU110上,并响应由一用户通过所述用户接口112发出的命令而控制和协调在所述CPU上运行的程序120-136。
每个客户计算机102的ANProgram执行器122执行存储在所述受托和未受托对象分类储存部分140和142内所述对象分类中的ANProgram。并且所述ANProgram按照一个ANLanguage编写,对于这个ANLanguage,用户可建立诸如堆栈和数据使用限制的预定完整性标准,从而使得该ANProgram不执行非法的任务。因此,在执行之前,通过确定该程序是否满足所述预定完整性标准,ANProgram完整性检验器126可以直接验证所述ANProgram的完整性。因此,这个ANProgram被认为是完整性可检验的ANProgram。
在最佳实施例中,所述完整性可检验的ANProgram由所述Java字节码语言编写。并且,ANProgram执行器122和ANProgram检验器124分别是Java字节码程序解译器和Java字节码程序检验器,它们分别被用于执行和检验所述的Java字节码程序。所述Java字节码检验器和解译器是由SunMicrosystem公司生产的。
但是,每个客户计算机102都具有一个相关的特定结构,对于这个结构,许多程序可以按相应的ASLanguage编写并由所述ASProgram执行器122执行。所述ASLanguage不需要按ASLanguage编写的ASProgram满足ANLanguage的预定完整性标准。其结果是所述ASProgram能够执行某些任务,而这些任务不能够由所述ANProgram执行由于其没有被装载而受到所述ANLanguage的预定完整性标准所设置的限制。但是,遗憾的是这也意味着它们的完整性不能够利用所述ANProgram完整性检验器126直接进行检验,并因此被认为完整性不可检验。
尽管如此,如前面所指出的,ANProgram运行的效率要低于按ASLanguage编译的同一程序。因此考虑到与用户的客户计算机相关的ASLanguage,客户计算机102的用户可以希望具有一个由服务计算机(servercomputer)104编译的ANProgram,以使所编译的ASProgram能够在那里被ASProgram执行器124执行,或者,如果利用其它客户计算机的ASProgram执行器124分布和执行此编译的ASProgram,那么用户可以希望具有考虑到与其它客户计算机相关的ASLanguage编译的ANProgram。
制备一个用于编译的中性结构程序(ANProgram)
参看图1和2,当一个始发方(OrigParty)希望具有一个由所述服务计算机104编译的ANProgram200时,OrigParty利用用户接口112发出一个命令以对所述ANProgram编译制备器128提出一个请求并指令它制备用于编译的ANProgram。该ANProgram可以位于包含在受托或未受托对象分类储存部分140或142的其中之一内的一个对象分类中。表1包含有由ANProgram编译制备器128使用的该过程的伪代码表示,用于制备由服务计算机104编译的ANProgram。表1-3中使用的伪代码采用通用计算机语言规范。这里使用伪代码的主要目的是用于叙述,同时,它可以很容易被本专业技术领域内的计算机程序编制人员所理解。
参看图1和图2以及表1,所述ANProgram编译制备器128首先调用所述ANProgram完整性检验器126并指令它检验ANProgram200的ANProgram代码202的完整性。做这项工作的目的在于确认在将其传送给服务计算机104进行编译之前,ANProgram码满足所述ANLanguage的预定完整性标准。如果所述ANProgram码不满足预定的完整性标准,那么,所述ANProgram完整性检验器将一失效结果送回ANProgram编译制备器。作为响应,所述ANProgram编译制备器中止编译制备过程并产生一个适当的消息以指示该状态。
但是,如果该ANProgram码202满足所述预定的完整性标准,那么,ANProgram完整性检验器126将一个通过的结果回送给ANProgram编译制备器128。该ANProgram编译制备器然后调用署名发生器130并指令它产生origParty的数字署名(DigitalSignatureop)210,该署名210可以被检验以保证所述ANProgram200由受托的OrigParty产生。署名发生器通过首先产生所述ANProgram码202的消息摘要(MDOP)212产生所述的DigitalSignatureOP。这是通过在ANProgram码的数据比特上计算一个散列函数、即HashFunctionOP而进行的。所使用的该散列函数可以是一个预定的散列函数,也可以是由所述OrigParty选择的一个散列函数。本文为描述的目的,该HashFunctionOP对应于所述OrigParty,由于它用于所述OrigParty的DigitalSignatureOP。
然后,署名发生器130利用OrigParty的专用加密密钥(OrigPartysPrivatekey)加密所产生的消息摘要(MDOP)212和HashFunctionOP(HashFunctionOP ID)214的该ID。然后,该署名发生器将所述OrigParty的ID216加到位于加密项212和214末端处明文(clear text)中,以形成所述DigitalSignatureOP。OrigParty的专用密钥和ID由具有用户接口112的OrigParty提供。
在产生DigitalSignatureOP 210以后,所述ANProgram编译制备器128将它附加到ANProgram码202上。然后,ANProgram编译制备器产生一个已经制备的所述服务计算机104用于编译的ANProgram 200的消息。
然后,OrigParty利用用户接口112向网络通信管理器120发出一个命令,以便将所述的ANProgram200和一些变元(argument)一起传送给服务计算机104,这些变元说明将被编译该程序的特定结构语言(ASLanguage ID)和所使用的编译程序(Compiler ID)。该网络通信管理器从配置有受托或未受托的对象分类储存部分140或142中提取所述ANProgram,并将它提供给网络通信接口116。然后,该网络通信管得器指令网络通信接口将ANProgram和所述特定变元一起传送给服务计算机。
编译一个中性结构程序
然后,服务计算机104接收被传送的ANProgram200。该服务计算机包括CPU150,用户接口152,存储器154和网络通信接口156。该网络通信接口允许该服务计算机经过网络通信连接器108与客户计算机102和受托密钥储存部分106进行通信。
服务计算机104的存储器154存储一个操作系统158,一个网络通信管理器160,一个ANProgram编译程序162,一个署名检验器164,一个ANProgram完整性检验器166,一个署名发生器168,一个ANProgram储存部分(repository)170和一个ASProgram储存部分(repository)172。操作系统在CPU150上运行,并响应编译方(CompParty)利用用户接口152发出的命令控制和协调在CPU上运行的程序160-168。
该网络通信接口156接收该ANProgram200并将已发生的该情况指示给网络通信管理器160。作为响应,该网络通信管理器将所接收的ANProgram放置入ANProgram储存部分170中。如果所述服务器104被设置成自动编译程序服务器,那么,通过网络通信管理器160自动执行编译。反之,当该CompParty利用所述用户接口发出一个命令时,所述网络通信管理器将所述ANProgram移入储存部分170。
然后,或是自动地、或是根据该CompParty利用所述用户接口252发出的命令,该ANProgram编译程序162被请求对ANProgram200进行编译。表2包含有该ANProgram编译程序对所述ANProgram进行编译所使用的编译过程伪码表示。
参看图1-2和表2,该ANProgram编译程序162首先调用该署名检验器164去检验在所接收的ANProgram200中的DigitalSignatuyeOP210,从而建立如下状态,即:所述DigitalSignatuyeOP210实际上是始发方用于该ANProgram的署名(例如,与在所述ANProgram某些其它版本上的OrigParty署名或伪造的署名相对照)。特别是,该署名检验器使用在所接收ANProgram中的明文Orig Party的ID216以便从受托密钥储存部分106中获得所述OrigParty的公用密钥。然后,该署名检验器使用所述OrigParty的公用加密密钥(OrigParty’s publickey)对在DigitalSignatuyeOP中的被加密的MDOP212和HashFuctionOP ID214进行解密。
接着,该署名检验器164根据所接收的ANProgram200的ANProgram码202计算相应的Hahs FuctionOP而产生一个测试消息摘要(TestMDOP),该测试消息摘要应当与被解密的MDOP相匹配。解密的DigitalSignatuyeOP中的HashFuctionOP ID214用于识别所使用的适当的HashFuctionOP。然后,将解密的MDOP和所产生的TestMDOP进行比较以检验所述的DigitalSignatuyeOP210。
如果MDOP212和TestMDOP不相匹配,那么,该署名检验器162回送一个失效结果给该ANProgram编译程序162。作为响应,该ANProgram编译程序中止编译过程并产生一个适当的消息。
另一方面,如果MDOP212和TestMDOP相匹配,那么,署名检验器回送一个通过结果给ANProgram编译程序162,并且所述ANProgram编译程序162调用ANProgram完整性检验器166。它指令所述ANProgram完整性检验器去检验所接收ANProgram200的ANProgram码202的完整性。与在前面讨论的制备用于编译的ANProgram部分相比,其执行的方式相同并具有相同的目的。因此,如果ANProgram码不满足所述预定完整性标准,那么,ANProgram完整性检验器就要回送一个失效结果给ANProgram编译程序。作为响应,所述ANProgram编译程序中止编译过程并产生一个指示该状态的适当消息。
但是,如果所接收ANProgram200的ANProgram码202满足了所述的预定完整性标准,那么,ANProgram完整性检验器166回送一个通过结果给ANProgram编译程序162。编译程序162然后将ANProgram码编译成利用由所述OrigParty指定的ASLanguage ID识别的ASLanguage。参看图1-3和表2,所述编译程序将ANProgram码202,DigitalSignatureOP210和编译后的ASProgram码302放置入ASProgram300,该ASProgram300被存储在ASProgram储存部分172中。
ANProgram编译程序162然后调用署名发生器168并指令它产生ANProgram编译程序的数字署名(DigitalSignatureC)320,该数字署名320可以被检验以保证所述ASProgram300由受托的ANProgram编译程序编译。它的执行方式类似于前面描述的有关产生DigitalSignatureOP的执行方式。但是,在这种情况下,所标记的一组信息是ASProgram码和DigitalSignatureOP。具有相应HashFunctionC ID234的其它预定散列函数可以被用于产生将由DigialSidnatureC标记的该组信息的消息摘要MDC322,ANProgram编译程序的专用加密密钥(编译程序的专用密钥)被用于加密所述MDC和HashFunctionCID,ANProgram编译程序的识别符(编译程序的ID)被加到位于被加密的MDC和HashFurctionC末端处的明文中。所述编译程序的专用密钥和ID由ANProgram编译程序提供。
ANProgram编译程序162第二次调用署名发生器168以产生CompParty的数字署名(DigialSignatureCP)312,该数字署名312可以被终端用户(end user)检验以保证所述ASProgram300由受托的CompParty产生。关于这一点的执行方式类似于前面所述的关于(在制备用于编译的ANProgram的讨论中)产生DigitalSignatureOP的方式。但是,这里为DigialSignatureCP产生的消息摘要(MDCP)314是通过在ASProgram码、DigitalSignatureOP和DigitalSignatureC的数据比特的基础上计算一个预定的或所选择的散列函数(HashFunctionCP)产生的。与所述HashFunctionOP类似,为该文件叙述的目的,HashFunctionCP对应于所述CompParty,由于它被用于CompoParty的DigitalSignatureCP。
然后,署名发生器168利用CompParty的专用加密密钥(CompParty的专用密钥)加密所述MDCP314和HashFanctionCP的ID(HashFunctionCP ID)316。然后,署名发生器将CompParty的识别符(CompParty的ID)318加到位于被加密项314和316末端处明文中以形成DigitalSignatureCP312。CompParty的专用密钥和ID是由CompParty利用所述用户接口152提供的。
在产生DigitalSignatureC320和DigitalSignatureCP312以后,ANProgram编译程序162将它们附加到ASProgram码302上,从而使在所产生的编译的ASProgram文件或对象中具有下述成分:
ANProgram码,
DigitalSignatureOP,
ASProgram码,
DigitalSignatureC,和
DigitalSignatureCP。然后,该ANProgram编译程序产生一个消息,该消息表示ANProgram200已经被编译成ASProgram300,并已经准备传送给所述OrigParty。
CompParty然后使用网络通信管理器160将ASProgram300传送给OrigParty的客户计算机102。网络通信管理器是通过从其中设置有ASProgram的ASProgram储存部分172中提取所述ASProgram的并将它提供给所述网络通信接口156而作到这一点的。然后,网络通信管理器指令所述网络通信接口将所述ASProgram传送给OrigParty的客户计算机。
对象和对象分类的建立和分布
然后,所传送的ASProgram300由OrigParty客户计算机的通信接口116接收并将该发生的情况指示给网络通信管理器120。作为响应,OrigParty利用用户接口252发出一个命令,以命令从网络通信接口中提取接收的ASProgram,从而使得网络通信管理器将所接收的ASProgram放置入所述OrigParty客户计算机的未受托对象分类储存部分142中。一旦做了这件事情,OrigParty可以将所接收的ASProgram作为仅具有一种方法的新对象分类(例如编译程序的代码)进行处理,或者它可以建立一个对象分类,该对象分类包括ASProgram300以及其它的ANProgram和ASProgram。
图4示出了根据本发明的一个典型的对象分类400。该对象分类可以包括一个或多个ASProgram402和/或一个或多个ANProgram404,以及一个虚拟函数表410。对于每个ASProgram来讲,所述虚拟函数表包含着指示一个不是用ANLanguage编写的ASProgram(即本机程序)的相应的识别符(identifier(native_ASProgram ID))412并包含一个到本机程序的相应指针(Ptr)414。类似的,对于每个ANProgram来讲,虚拟函数表包含一个相应的识别符(AN-Program ID)416和一个到所述ANProgram的相应指针418。这个对象分类的每个对象420包括一个指向对象分类400的对象标题422。
因此,OrigParty可以利用ASProgram300建立对象420和对象分类400,所述ASProgram300从服务计算机104中被接收而作为所述对象分类内多个ASProgram402中的一个。
当所述OrigParty希望将一个对象和包括ASProgram300和ANProgram在内的对象分类分布给各个ExecuteParty(执行方)时,OrigParty利用用户接口112发出一个命令,以指令所述网络通信管理器将这些项(items)传送给ExecutePartys的客户计算机102。网络通信管理器通过从其中设置有这些项的未受托对象分类储存部分142中提取它们、并利用适当的传送指令将它们提供给网络通信接口116而做这项工作。另外,OrigParty的网络通信管理器可以响应由一个ExecuteParty启动的请求,以对指定的对象分类400进行复制。
在对象分类中的中性结构程序和特定结构程序的执行
客户计算机102的网络通信接口156接收所传送的对象和对象分类并将已发生的状态指示给网络通信接口160。作为响应,ExecuteParty利用用户接口112发出一个命令,该命令指令所述网络通信管理器提取从网络通信接口所接收的对象和对象分类。然后,网络通信管理器将所接收的对象和对象分类存储到未受托对象分类储存部分142中。
每个客户计算机102的未受托对象分类储存部分142包含有多个未受托的对象和与其有关的多个对象分类。当根据适当的ANProgram进行编译时,由于它们所包括的任意的ANProgram都还不具有已经过检验的其完整性和它们所包括的任意的ASProgram还都不具有已经过检验或还没有经过检验的其源,所以,这些对象分类不是受托的。
每个客户计算机的受托对象分类储存部分140包含有多个受托对象和其多个对象分类。由于它们所包括的任意ANProgram已经可具有经过ANProgram完整性检验器166检验过的其完整性和它们所包括的任意ASProgram已经被确定为是值得信赖的,所以,这些对象分类是受托的。实际上,由于这些对象分类是受托的,因此就没有理由在这些对象分类的所述方法上执行完整性检查,所以,在受托对象分类储存部分140中的某些或全部对象分类并不需要具有数字署名。
下面这一点是希望的,即如前面所建议的,一个对象分类主要包括ANProgram,但还可以包括ASProgram,从而使得利用所述对象分类基本上可以执行所有的合法任务如上述所建议的。因此,ANProgram执行器122能够执行完整性可检验的ANProgram并能调用ASProgram执行器去执行完整性不可检验的ASProgram,所述完整性不可检验的ASProgram位于(1)在受托对象分类储存部分140内的受托对象分类中,或(2)在未受托对象分类储存部分142内的未受托对象分类中并具有可检验的DigitalSignatureOP、DigitalSignatureCP和DigitalSignatureC信息,从而,基本上可以执行所有的合法任务。在这种方式下,不具有DigitalSignatureOP、DigitalSignatureCP和DigitalSignatureC信息或它们的数字署名不能够被检验的未受托对象分类的ASProgram将被避免执行。表3包含有由所述ANProgram执行器使用的执行过程的伪码表示。
参看图1-4和表3,在一个ExecuteParty(例如,OrigParty或另外的一方)的客户计算机102上,ANProgram执行器124处于正在执行ANProgram中试图调用一个特定对象分类的方法。所述方法调用最初是由对象分类加载器136处理的,它确定所述对象分类是否已经被装载。如果所述对象分类已经被装载到ExecuteParty的用户地址空间138中,那么,假如所调用的方法是一个ANProgram,则ANProgram执行器122执行所调用的方法,假如所调用的方法是一个ASProgram,则ASProgram执行器124执行所调用的方法。
但是,如果所述对象分类还没有被装入到ExecuteParty的地址空间138中,那么,对象分类加载器136就要将所述对象分类装入到ExecuterParty的地址空间中并确定所调用的方法是否被允许执行。例如,如果所述对象分类是从受托对象分类储存部分140装入的,那么,所调用的方法被允许执行,并调用所述Execute过程。如果所调用的方法是一个ANProgram,Execute过程(见表3)调用所述ANProgram执行器去执行所调用的方法。反之,则调用ASProgram执行器124去执行所调用的方。
但是,如果所述对象分类是从未受托的对象分类储存部分142装入的,那么,分类加载器136检查所述对象的对象标题以确定它的对象分类是否还包括任意的ASProgram。这是通过确定在该对象的虚拟函数表中是否存在任意native ASProgram ID进行的。
如果在所述对象分类中不存在ASProgram,那么,分类加载器136调用ANProgram完整性检验器166去检验在该对象分类中ANProgram的完整性。其执行方式和目的与前面所述检验ANProgram 200(在讨论对ANProgram进行编译的部分中)所使用的方式和目的相类似。因此,如果多个ANProgram中任意一个的完整性没有被检验,那么,ANProgram完整性检验器将回送一个失效结果给所述分类加载器,并且,所述分类加载器中止分类装载过程并产生一个适当的消息以指示该状态。但是,如果ANProgram完整性检验器回送一个表示该对象分类的所有ANProgram都已经被检验通过的结果(passedresult)时,那么,分类加载器能执行所调用的方法。
如果在所述对象分类中存在有任意一个ASProgram,那么,分类加载器136调用署名检验器132去检验编译程序DigitalSignatureC和CompParty的署名DigitalSignatureCP。如果ASPrograms中的任意一个不包括DigitalSignatureCP和DigitalSignatureC,那么,ASProgram源的完整性不能被检验,因此,署名验证器回送一个失效结果给ANProgram执行器。作为响应,分类加载器中止对象分类装载过程并产生一个适当的消息指明发生了该状态。
另外,如果在所述对象分类中的所有ASPrograms都包括DigitalSignatureCPDigitalSignatureC,那么,将在这两个数字署名中所指出的CompParty和Ciompiler(编译程序)的同一性与已知的表144(见图1)。受托的Compiler Parties与受托的Compilers(编译程序)进行比较。如果在由CompParty或Compiler编译的对象分类中的ASProgram内的任意一个ASProgram都不包括在已知的、受托的Compiler Parties和受托的Comiler设定中,那么,分类装载过程被中止,借此以阻止所调用方法的执行。类似的,如果在ASProgram中的任意一个ASProgram内识别的ASLanguage与由ASProgram执行器124使用的ASLanguage不匹配,那么,分类装载过程被中止。
但是,如果在该对象分类中的所有ASPrograms都包括DigitalSignatureCP和DigitalSignatureC,和用于所有ASPrograms的、被识别的CompParty和Compiler是受托的Compiler Parties和Compilers,并且,由所有ASProgram使用的ASLanguage是由ASProgram执行器使用的语言,那么,署名检验器以与前面所述(在有关对ANProgram200进行编译的讨论部分中)用于检验DigitalSignatureOP的类似方式检验这些署名。但是,在这种情况下,所述Compiler和CompParty的公用密钥是从受托密钥储存部分106中提取的,并被分别用于对在DigitalSignatureC中的MDC和HashFunctionC ID和在DigitalSignatureCP中的MDCP和HashFunctionCP ID进行解密。另外,与解密的MDCP和MDC相应的测试消息摘要(TestMDC和TestMDCP)是通过计算散列码产生,其是在ASProgram码数据比特上加TesMDC的DigitalSignatureOP和在相同数据比特上加TestMDCP的DigitalSignatureC,分别根据由解密的HashFunctionC ID和HashFunctionCP ID所识别的HashFunctionC和HashFunctionCP而计算的。
如果用于每个ASProgram的DigitalSignatureC和/或DigitalSignatureCP没有被验证(即:MDC≠TestMDC和/或MDCP≠TestMDCP),那么,署名检验器132回送一个失效结果给分类加载器136,作为响应,分类加载器中止分类装载过程并产生一个适当的消息以指示该状态已经发生。
但是,如果用于每个ASProgram的DigitalSignatureC和DigitalSignatureCP都已经被验证(即:MDC=TestMDC和MDCP=TestMDCP),那么,ASProgram执行器124再一次调用署名检验器132去检验用于ANProgram的所述OrigParty(Digin SignatoreCP)的署名,所述ASProgram是根据所述ANProgram进行编译的。为了检验OrigParty的数字署名,每个DigitalSignatureOP都是以与前面有关对ANProgram200进行编译的讨论中所涉及的相同方式检验的。
如果,作为ASProgram编译基础的ANProgram中每一个DigitalSignatureOP被验证,那么,分类加载器调用ANProgram完整性检验器去检验在所述对象分类中每个ANProgram的完整性和作为ASProgram编译基础的ANProgram的完整性。其执行方式与前述相同。如果这些ANPrograms中任意一个ANProgram的完整性没有被验证,那么,ANProgram完整性检验器将回送一个失效结果给分类加载器,该分类装载器将中止分类装载过程并产生一个适当的消息。
但是,如果这些ANrograms中的每一个ANProgram的完整性都已经被验证,那么,ANProgram完整性检验器126将回送一个通过的结果给分类加载器136。作为响应,该分类加载器将请求ANProgram执行器或ASProgram执行器在适当的时候去执行所调用的方法。
从前述可看出,ExecuterParty被保证只有在具有其数字署名可以被检验的完整性可验证的ANProgram和ASProgram的未受托储存部分142中的那些未受托对象分类将被装入并具有它们执行的程序。
另外的实施例
上述讨论的本发明的某些特征是可以选择的。因此,本专业技术领域内的技术人员可以认识到存在有某些未包括这些特性的另外一些实施例。
例如,已经描述了作为分别对CompParty和ANProgram编译程序产生的DigitalSignatureCP和DigitalSignatureC的ANProgram编译程序。但是,所述ANProgram编译程序能够被简单的构成以产生这些数字署名中的一个署名,该署名为了能对ANProgram进行编译的编译程序进行验证或对编译方(compiling party)进行验证。
类似的,已经描述了作为用于请求对DigitalSignatureCP和DigitalSignatureC进行检验的程序执行器。但是,所述的程序执行器能够被构成仅请求对这些数字署名中的一个进行检验,并且,如果正在被检验的ASProgram包括它的话,应当对另一个的数字署名进行可选择的检验。再有,在假设的基础上即在假设所述编译方是受托的并且该编译方的一项工作就是在执行所述编译之前去检验编译成ASProgram的每一个ANProgram的完整性的基础上,所述程序执行器能够被构成跳过检验与每一个ASProgram相对应的ANProgram的完整性的步骤。
当Executer Party是所述Orig Party时,Executer Party知道,它实际上是将ANProgram200传送给Comp Party的服务计算机104以便将其编译成ASProgram300。在这种情况下,分类加载器136能够被结构成不调用署名检验器去检验在ANProgram中的DigitalSignatureOP。而是使得所述ExecuterParty能够简单地将在ANProgram的局部复制中的DigitalSignatureOP和在编译后ASProgram中的DigitalSignatureOP加以比较。另外,由于在被传送给所述编译服务计算机之前的编译过程准备期间已经检查了ANProgram的完整性,所以,所述分类加载器能够被结构成不调用ANProgram完整性检验器去检验对应于所调用ASProgram的ANProgram的完整性。另外,由于所述ANProgram的完整性已经利用所述编译程序在执行相应ASProgram之前由所述分类加载器调用所述ANProgram完整性检验器进行了检查,所以,ANProgram编译准备器128能够被构成在制备编译过程期间不调用所述ANProgram完整性检验器。
在结合本发明几个特殊实施例对本发明进行描述的同时,应指出这些描述仅仅是为了对本发明进行的说明,并不是对本发明的限制。本专业技术领域内的普通技术人员可以在不脱离本发明权利要求限定的本发明的构思和范围的前提下作出许多修改。
表1 制备用于编译中性结构程序方法的伪代码表示
表2
编译ANProgram和产生ASProgram方法的伪码表示
--> Generate and Return File or Object containing: ANProgram Code, DigitalSignatureOP, ASProgram Code, DigitalSignatureC,and DigitalSignatureCP /* ASProgram has been compiled and generated */ } }}]]>
表3
执行ASProgram方法的伪码表示
--> Return }/* Object Class does contain ASPrograms designated as native_ASPrograms in Object Header of Object */If any ASProgram does not contain a DigitalSignatureCP and a DigitalSignatureC { /* Compiling Party and Compiler of every ASProgram cannot be verified */ Generate appropriate message Return }For each ASProgram in Object Class: {Determine identity of CompParty and Compiler and determine ASLanguage used byASProgram}If identity of CompParty for any ASProgram is not a known,trusted,Compiling Party,or the identity of Compiler is not a known,trusted Compiler,or the identified ASLanguage is not one used by the ASProgram Executer { Generate appropriate message Return }For each ASProgram in Object Class: { Retrieve CompParty’s PublicKey from trusted key repository using ClearText CompParty’s ID in DigitalSignatureCP Decrypt(MDCP+HashFunctionCP ID in DigitalSignatureCP,CompParty’s PublicKey) Generate TestMDCP=HashFunctionCP(ASProgram code+DigitalSignatureOP +DigitalSignatureC in ASProgram)using HashFunctionCP identified by decrypted HashFunctionCP ID Compare decrypted MDCP and TestMDCP }If decrypted MDCP≠TestMDCP for any ASProgram { /* DigitalSignatureCP for every ASProgram has not been verified */ Generate appropriate failed result message Return }/* DigitalSignatureCP for every ASProgram has been verified*/For each ASProgram in Object Class: { Retrieve ANProgram Compiler’s PublicKey from trusted key repository using ClearText ANProgram Compiler’s ID in DigitalSignatureC Decrypt(MDC+HashFunctionC ID in DigitalSignatureC,ANProgram Compiler’s PublicKey) Generate TestMDC=HashFunctionC(ASProgram code+DigitalSignatureOP) using HashFunctionC identified by decrypted HashFunctionC ID Compare decrypted MDC and TestMDC }If decrypted MDC≠TestMDC for any ASProgram { /* DigitalSignatureC for every ASProgram in Object Class has not been verified */ Generate appropriate failed result message Retum }/* DigitalSignatureC for every ASProgram in Object Class has been verified */For each ANProgram from which an ASProgram in Object Class was compiled: { Retrieve OrigParty’s PublicKey from trusted key repository using ClearText OrigParty’s ID in DigitalSignatureOP Decrypt(MDOP+HashFunctionOP ID in DigitalSignatureOP,OrigParty’s PublicKey) Generate TestMDOP=HashFunctionOP(ANProgram code)using HashFunctionOP identified by decrypted HashFunctionOP ID Compare decrypted MDOP and TestMDOP }If decrypted MDOP≠TestMDOP for any ANProgram { /*DigitalSignatureOP for every ANProgram from which an ASProgram in Object Class was compiled not verified */ Generate failed result message Return }/* The DigitalSignatureOP in every ASProgram in Object Class is verified */Verify integrity of ANPrograms in Object class and ANPrograms from which ASPrograms in Object Class were compiled with ANProgram integrity verifierIf failed result { Generate failed result message Return }/* Integrity of all ANPrograms in Object class and all ANPrograms from which ASPrograms in Object Class were compiled have been verified */Call Execute(ObjectClass,Program)}]]>