CN101226569A - 在虚拟机中验证代码模块的方法及装置 - Google Patents
在虚拟机中验证代码模块的方法及装置 Download PDFInfo
- Publication number
- CN101226569A CN101226569A CNA200710004270XA CN200710004270A CN101226569A CN 101226569 A CN101226569 A CN 101226569A CN A200710004270X A CNA200710004270X A CN A200710004270XA CN 200710004270 A CN200710004270 A CN 200710004270A CN 101226569 A CN101226569 A CN 101226569A
- Authority
- CN
- China
- Prior art keywords
- code module
- code
- certificate
- module
- virtual machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
Abstract
一种用于在虚拟机中安装或更新代码模块时预验证代码模块的方法,包括:加载代码模块内的代码;对该代码模块内的代码执行代码验证;如果通过代码验证,则生成该代码模块的证书;以及存储通过代码验证的代码模块及其证书。一种用于在虚拟机中运行代码模块时验证代码模块的方法,包括:加载代码模块内的代码;基于所加载的代码生成该代码模块的证书;如果所生成的代码模块的证书与预先存储的该代码模块的证书一致,则验证该代码模块为有效;否则,对该代码模块进行预验证。采用本发明,只在安装或更新代码模块时进行代码验证,并存储验证结果;在运行代码模块时通过验证代码模块的证书确定代码模块的有效性,无需在每一次运行代码模块时都对代码进行代码验证。
Description
技术领域
本发明涉及对可在虚拟机中执行的代码模块进行验证的技术,具体地说,涉及在虚拟机中安装或更新代码模块时的代码模块预验证方法及装置、在虚拟机中运行代码模块时的代码模块验证方法及装置、在虚拟机中运行代码模块的方法以及用于运行代码模块的虚拟机。
背景技术
在虚拟机中,例如Java Applet程序、OSGi(Open Service Gatewayinitiative,称为开放服务网关)插件、Eclipse插件和.NET组件等的代码模块可从可能不能信任的第三方,通过网络传送远程下载并在本地自动执行,而并不需要明显的安装或者由用户执行。对于基于高级语言虚拟机的执行环境,如Java、.NET CLR(Common Language Runtime,称为公共语言运行库)等,其日益增长的动态特征要求更安全的机制,以保护本地虚拟机***免遭潜在的恶意代码的破坏。为了满足这一要求,通常采用虚拟机中的代码验证方法,其通过依照给定的安全策略,如类型安全规则,分析代码的结构或行为以确保代码的语义等正确。
然而,这种虚拟机中的代码验证方法存在如下问题:
一、这种代码验证方法是在运行代码模块时执行的,其对于代码模块的运行性能的影响很大。例如,Java字节码验证根据执行环境不同,占用10-30%的程序启动时间。
二、代码验证在每次代码模块运行时都要执行,不管代码模块是否是新安装的。并且,不管验证的结果如何,在代码模块执行结束后都丢弃该验证结果。这样,虚拟机不能从以前的代码模块运行中了解任何信息,并且当再次运行该代码模块时需要重新进行验证。如果虚拟机的环境持续不变,例如当代码模块被下载后长期配置相同的代码文件,并且虚拟机只重复地加载或重装相同的代码,则每次运行该代码模块时都进行验证是很不必要的。
三、在进行代码验证时,例如检查代码的类型安全,可能需要跨模块地进行代码验证,即依赖其它模块的代码进行验证,那么需要下载其它模块中与该代码有依赖关系的代码。由于这种依赖关系的解析是基于代码级别的,因此这种跨模块的代码验证不能在模块级别一次对一个代码模块进行验证。
国际公开号为WO00/72149的专利申请“Pre-verification ofApplications in Mobile Computing(移动计算设备中的应用程序的预验证)”公开了一种在移动通信设备中对应用程序进行预验证的方法,其中,在移动通信设备中预先存储了包括应用程序以及每个应用程序的数字指纹的列表,当执行某个应用程序时,通过检查上述列表中是否存在该应用程序的数字指纹,确定是否执行该应用程序。然而,该方法是对应用程序是否被授权运行进行预验证,并没有涉及对应用程序的代码的验证。
因此,迫切需要一种有效的在虚拟机中验证代码模块的方法,以提高代码模块运行时的启动和执行性能。
发明内容
本发明正是基于上述技术问题而提出的,其目的在于提供用于在虚拟机中安装或更新代码模块时预验证代码模块的方法及装置、用于在虚拟机中运行代码模块时验证代码模块的方法及装置、用于在虚拟机中运行代码模块的方法以及用于运行代码模块的虚拟机,使得代码验证只在代码模块被安装/更新时才进行,并且在执行代码验证后存储验证的结果,使虚拟机能够记住验证结果,从而无需在每次运行代码模块时都执行代码验证,减小由于在执行代码模块时进行代码验证而造成的运行开销,提高效率。
根据本发明的第一个方面,提供一种用于在虚拟机中安装或更新代码模块时预验证所述代码模块的方法,包括:加载所安装或更新的代码模块内的代码;对所述代码模块内的代码执行代码验证;如果通过所述代码验证,则生成所述代码模块的证书;以及存储通过所述代码验证的代码模块及其证书。
根据本发明的第二个方面,提供一种用于在虚拟机中运行代码模块时验证所述代码模块的方法,包括:加载将要运行的代码模块内的代码;基于所加载的代码生成所述代码模块的证书;如果所生成的代码模块的证书与预先存储的所述代码模块的证书一致,则验证所述代码模块为有效;以及如果所生成的代码模块的证书与预先存储的所述代码模块的证书不一致,则利用上述的用于在虚拟机中安装或更新代码模块时预验证代码模块的方法,对所述代码模块进行预验证。
根据本发明的第三个方面,提供一种在虚拟机中运行代码模块的方法,包括:执行上述的用于在虚拟机中运行代码模块时验证所述代码模块的方法;以及当验证所述代码模块为有效时,运行所述代码模块。
根据本发明的第四个方面,提供一种用于在虚拟机中预验证代码模块的装置,包括:加载器,用于加载所安装或更新的代码模块的代码;代码验证器,用于对所述代码模块内的代码执行代码验证;证书生成器,用于对通过代码验证的代码模块生成证书;以及存储器,用于存储通过代码验证的代码模块和其证书。
根据本发明的第五个方面,提供一种用于在虚拟机中运行代码模块时验证所述代码模块的装置,包括:上述的用于在虚拟机中预验证代码模块的装置;以及证书验证器,用于根据从所述存储器获得的所述代码模块的证书,验证由所述证书生成器对所述将要运行的代码模块生成的证书;其中,当所述证书验证器验证所述代码模块为无效时,由所述代码验证器对所述代码模块内的代码执行代码验证。
根据本发明的第六个方面,提供一种用于运行代码模块的虚拟机,包括:上述的用于在虚拟机中运行代码模块时验证所述代码模块的装置,并且只有当所述装置验证所述代码模块为有效时,运行所述代码模块。
附图说明
图1是根据本发明的一个实施例的用于在虚拟机中安装或更新代码模块时验证代码模块的方法的流程图;
图2是根据本发明的一个实施例的用于在虚拟机中运行代码模块时验证代码模块的方法的流程图;
图3是根据本发明的一个实施例的用于在虚拟机中安装或更新代码模块时验证代码模块的装置的示意性框图;
图4是根据本发明的另一个实施例的用于在虚拟机中安装或更新代码模块时验证代码模块的装置的示意性框图;
图5是根据本发明的一个实施例的用于在虚拟机中运行代码模块时验证代码模块的装置的框图;
图6是根据本发明的实施例的用于在虚拟机中运行代码模块时验证代码模块的装置的具体实现的示意性框图。
具体实施方式
相信通过以下结合附图对本发明的具体实施方式的详细描述,本发明的上述和其它目的、特征和优点会变得更明显。
图1是根据本发明的一个实施例的用于在虚拟机中安装或更新代码模块时验证代码模块的方法的流程图。
一般地,代码模块包括预编译的代码(例如Java字节码、MSIL码等)文件、元数据或清单文件、以及其它资源等,其中清单文件用于说明该代码模块的内容。例如,对于JAVA类型的代码模块,包括JAVA类文件、描述JAR文件的内容和提供有关代码模块的信息的清单文件、其它资源。如前所述,代码模块可以从不能信任的源通过网络下载到虚拟机中,然后安装在虚拟机上。一般地,对代码模块的各种操作都可用其生命周期的状态表示。
如图1所示,当代码模块被安装或更新后,在步骤101,加载所安装或更新的代码模块内的预编译的代码。
然后,在步骤110,对代码执行代码验证。当虚拟机加载了不信任的代码时,通过对代码进行验证,可以确保代码都是有效的,例如,代码没有下溢或溢出虚拟机的栈,局部变量在初始化之前没有被使用,等等。
代码验证可以是传统的代码验证过程,例如字节码验证,可以包括以下检查过程中的至少一个:检查代码的语法,即检查代码的结构是否正确;检查代码的语义,即检查代码是否符合相应的语言语义;检查代码的类型安全,即检查代码是否违反了类型安全规则;检查代码的链接关系,即检查代码是否违反了代码加载限制。当然,还可以加载额外的代码以用于验证。上述代码验证对于本领与普通技术人员是已知的,在此不再详细描述。
在代码模块是Java类文件的情况下,对Java类文件的验证包括四个过程。首先,确保类文件具有基本的类文件格式,例如前四个字节必须包含正确的特定代码(magic number)、类文件在结尾处不能被截断或有额外的字节等。其次,执行无需代码属性的代码数组的验证,例如检查每个类是否有直接的超类等。第三,检查代码属性的代码数组。第四,检查类的链接关系。关于Java类文件的验证的具体详情可以参考“Java虚拟机规范”中的第4章第9节“类文件的验证”。
然后,在步骤115,如果代码模块通过代码验证,即代码验证合格,则对该代码模块生成证书,表明该代码模块已经被验证成功。
在本实施例中,将对代码生成的摘要作为代码模块的证书。本领域技术人员已知有多种生成摘要的方法,例如,对代码应用MD5(Message-Digest 5)算法以产生哈希代码,从而生成摘要。进一步地,为了保证证书的安全,还可以进一步对所生成的摘要进行加密,例如,采用AES(Advanced Encryption Standard,高级加密标准)算法进行加密。当然,本领域技术人员知道还可以采用其它的算法以生成代码模块的证书。
如果代码模块没有通过代码验证,则产生错误信号输出,结束此次的验证代码模块的过程。
然后,在步骤120,存储通过代码验证的代码模块和其证书。为了使虚拟机能够重复利用验证结果,需要存储验证结果。在本实施例中,可以将代码模块和其证书分开存储,并且保存证书和对应的代码模块的关联信息。或者,还可以在生成代码模块的证书后,将该证书作为该代码模块的属性写入该代码模块的代码文件中,然后存储该通过验证的代码模块。
在代码模块和其证书分开存储的情况下,根据代码模块和所存储的关联信息,可以读取证书。在证书被写入对应的代码模块的代码文件的情况下,通过解析代码文件,可以读取证书。
进一步地,在本实施例中,在对所安装或更新的代码模块进行代码验证(步骤110)之前,还包括对该代码模块与其它代码模块之间的依赖关系进行解析的步骤(步骤105)。在代码验证的过程中,类型安全检查和链接检查都涉及代码模块之间的依赖关系。因此,需要解析代码模块与其它模块之间的依赖关系。
解析是一个处于导入者(代码模块)和导出者(代码模块)的连线处的过程,也是满足约束的过程,约束采用对连线关系的要求进行描述。连线是导入者和导出者之间的实际连接,并且与在导入者和导出者的清单文件头中定义的多个约束相关联。一个有效的连线是满足所有约束的连线。有关依赖关系的解析的具体详情可以参见OSGi核心规范R4中的第3.3.1、3.4、3.5和3.6部分,此处不再详细描述。然而,本领域的技术人员应当知道,还可以使用其它的解析依赖关系的方法。
在获得代码模块与其它模块之间的依赖关系后,在步骤110,对该代码模块以及与其有依赖关系的代码模块都执行代码验证。
通过以上描述可以看出,采用本实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的方法,只在安装或更新代码模块的时候进行代码验证,并且存储验证结果,从而使虚拟机能够记住验证结果。另外,本实施例可以在模块级别解析代码模块之间的依赖关系,从而在模块级别实现一次一个代码模块的验证。
在同一个发明构思下,图2是根据本发明的一个实施例的用于在虚拟机中运行代码模块时验证代码模块的方法的流程图。下面结合附图,对本实施例进行说明。对于那些与前面实施例相同的部分,适当省略其说明。
如图2所示,当在虚拟机中运行代码模块时,首先在步骤201,加载该代码模块内的预编译的代码。虚拟机可以动态地加载执行特定功能所需的代码。
接着在步骤205,不对所加载的代码进行代码验证,而是基于所加载的代码生成该代码模块的证书。该生成证书的过程与前面步骤115中生成证书的过程类似,即,对代码生成摘要,将该摘要作为该代码模块的证书。进一步地,还可以对所生成的摘要进行加密,以确保证书的安全。在本实施例中,生成摘要可以采用MD5算法,而加密可以采用AES算法。当然,本领域技术人员知道还可以采用其它的算法。
然后,在步骤210,比较在步骤205生成的证书与预先存储的代码模块的证书是否一致。当虚拟机加载了将要运行的代码模块的代码后,可以根据该代码模块读取相应的预先存储的证书。
如果两个证书一致,则在步骤215,验证该代码模块为有效。
如果两个证书不一致,则验证该代码模块为无效,其表明该代码模块被修改了或者该代码模块的预先存储的证书被修改了或者证书不存在或者与其有依赖关系的代码模块被修改了,那么在步骤220,利用如图1所示的实施例描述的用于在虚拟机中安装或更新代码模块时预验证代码模块的方法对该代码模块内的代码执行验证,以确保代码安全。
在对被验证为无效的代码模块进行代码验证之前,也需要解析该代码模块与其它代码模块之间的依赖关系,并对该代码模块以及与其有依赖关系的代码模块都执行代码验证。例如,如果代码模块A被验证为无效,而代码模块B依赖于代码模块A,那么在重新验证代码模块A时,代码模块A和B都必须进行代码验证。
根据以上描述可以看出,采用本实施例的用于在虚拟机中运行代码模块时验证代码模块的方法,可以在运行代码模块时通过验证代码模块的证书确定代码模块的有效性,并只对验证为无效的代码模块进行代码验证,再进一步地存储验证的结果。由于在虚拟机中存储了代码模块的验证结果,因此无需在每一次运行代码模块时都对代码进行代码验证,从而可以减小代码模块的运行开销,缩短启动时间,提高效率。
在同一个发明构思下,本发明还提出了一种在虚拟机中运行代码模块的方法,首先,执行如图2所示的实施例的用于在虚拟机中运行代码模块时验证代码模块的方法,然后,当验证该代码模块为有效时,运行该代码模块。
采用本发明的在虚拟机中运行代码模块的方法,可以在运行代码模块时通过验证代码模块的证书确定该代码模块的有效性,并在代码模块被确定为有效时才运行该代码模块,简化了虚拟机运行代码模块的过程,从而可以减小代码模块的运行开销,缩短启动时间,提高效率。
在同一个发明构思下,图3是根据本发明的一个实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置的框图。
如图3所示,本实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置300包括:加载器301,其加载代码模块的代码;代码验证器302,用于对该代码模块内的代码执行代码验证;证书生成器303,其用于对通过代码验证的代码模块生成证书;存储器304,用于存储已通过代码验证的代码模块和其证书。
如上所述,代码模块包括预编译的代码(例如Java字节码、MSIL码等)、元数据或清单文件、以及其它资源等,其中清单文件用于说明该代码模块的内容。
在本实施例中,当代码模块从不能信任的源下载到虚拟机中安装后,通过加载器301将该代码模块的代码加载到虚拟机中,然后由代码验证器302对这些代码进行验证。
在代码验证器302中,可以由语法检查单元检查代码的语法是否正确,由语义检查单元检查代码的语义是否正确,由类型安全检查单元检查代码是否违反了类型安全规则,由链接检查单元检查代码的链接关系。
如果该代码模块没有通过代码验证,则代码验证器302输出代码错误的信号。
如果该代码模块通过代码验证,则在证书生成器303中生成证书。在本实施例中,证书生成器303包括摘要产生单元,其用于对代码模块产生摘要,作为该代码模块的证书。在本实施例中,摘要产生单元通过对代码应用MD5算法获得哈希代码,从而产生摘要。当然,还可以采用其它的算法来生成摘要。
进一步地,为了保证证书的安全,证书生成器303还包括加密单元,用于对由摘要产生单元产生的摘要进行加密。在本实施例中,加密单元采用AES算法。当然,本领域的技术人员应当知道,还可以采用其它的算法进行加密。
然后,通过代码验证的代码模块和其证书被存储在存储器304中。在本实施例中,存储器304包括:用于存储已通过代码验证的代码模块的模块存储单元;用于存储该已通过代码验证的代码模块的证书的证书存储单元;以及用于存储证书和对应的代码模块的关联信息的关联信息存储单元。
进一步地,在本实施例中,还包括解析器305,其在由代码验证器302对代码模块进行代码验证之前,解析代码模块与其它代码模块之间的依赖关系。
在由解析器305解析了该代码模块的依赖关系后,该代码模块以及与该代码模块有依赖关系的代码模块都将由代码验证器302进行代码验证,代码验证器302中的类型安全检查单元和链接检查单元将利用这些依赖关系进行检查。
本实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置300及其组件可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。
通过以上描述可以看出,采用本实施例的用于在虚拟机中安装或更新代码模块时验证代码模块的装置300,可以在安装或更新代码模块时进行一次代码验证,并存储预验证的结果,从而使虚拟机能够记住预验证的结果,方便以后的使用。另外,本实施例可以实现模块级别的依赖关系解析,从而能够一次验证一个代码模块,方便了代码模块的验证。
图4是根据本发明的另一个实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置的框图,其中与图3所示的实施例相同的部分采用相同的符号,并适当省略其说明。
如图4所示,本实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置400还包括:重写单元401,用于将由证书生成器303对通过代码验证的代码模块产生的证书作为该代码模块的属性写入该代码模块的代码文件中,并将其输出到存储器304。
在这种情况下,存储器304可以只包括模块存储单元,用于存储通过代码验证的被改写了代码文件的代码模块。
本实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置400及其组件可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。
通过以上描述可以看出,采用本实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置400,可以将代码模块的证书存储在对应的代码文件中,从而简化了存储器的结构。
在同一个发明构思下,图5是根据本发明的一个实施例的用于在虚拟机中运行代码模块时验证代码模块的装置的框图,其中与图3、图4所示的实施例相同的部分采用相同的符号,并适当省略其说明。下面结合附图,对本实施例进行详细说明。
如图5所示,本实施例的用于在虚拟机中运行代码模块时验证代码模块的装置500包括:如图3或图4所示的实施例的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置300或400;以及证书验证器501,其根据从存储器304获得的将要运行的代码模块的证书,验证由证书生成器303对该代码模块生成的证书;当证书验证器501验证该代码模块为无效时,由代码验证器302对该代码模块内的代码执行代码验证。
具体地,当在虚拟机中运行代码模块时,由加载器301将该将要运行的代码模块的代码加载到虚拟机中,然后由证书生成器303基于所加载的代码生成该代码模块的证书,并将该证书输出到证书验证器501。证书验证器501从存储器304中获得该将要运行的代码模块的证书,将其与由证书生成器303生成的证书进行比较,以验证该代码模块是否有效。
在采用如图3所示的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置300的情况下,当证书验证器501从存储器304获取代码模块的证书时,首先在模块存储单元中查找该代码模块,然后从关联信息存储单元中读取该代码模块和对应的证书的关联信息,最后根据该关联信息从证书存储单元中取出该代码模块的证书。
在采用如图4所示的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置400的情况下,当证书验证器501从存储器304获取代码模块的证书时,通过解析代码模块的代码文件,从代码文件中读取该代码模块的证书。
如果两个证书一致,则证书验证器304验证该代码模块为有效。
如果两个证书不一致,则证书验证器304验证该代码模块为无效,即表明该代码模块被修改了或者该代码模块的预先存储的证书被修改了或者证书不存在或者与其有依赖关系的代码模块被修改了。
对于验证为无效的代码模块,在由解析器305对该代码模块的依赖关系进行解析后,由代码验证器302对其代码进行验证。例如,如果代码模块A被证书验证器304验证为无效,并且解析器401解析得到代码模块B与代码模块A存在依赖关系,那么在由代码验证器302验证代码模块A时,将对代码模块A和B都进行代码验证。
本实施例的用于在虚拟机中运行代码模块时验证代码模块的装置500及其组件可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。
通过以上描述可以看出,采用本实施例的用于在虚拟机中运行代码模块时验证代码模块的装置500,可以在运行代码模块时通过验证代码模块的证书确定代码模块的有效性,并只对验证为无效的代码模块进行代码验证,再进一步地存储验证的结果,因此只需对代码模块进行一次代码验证即可。由于在虚拟机中存储了代码模块的验证结果,因此无需在每一次运行代码模块时都对代码进行代码验证,从而减小了代码模块的运行开销,缩短了启动时间,提高了效率。
在同一个发明构思下,本发明还提出了一种用于运行代码模块的虚拟机,其包括:如图5所示的实施例描述的用于在虚拟机中运行代码模块时验证代码模块的装置500,只有当该装置500验证该代码模块为有效时,运行该代码模块。
本实施例的用于运行代码模块的虚拟机及其组件可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。
通过以上描述可以看出,采用本发明的用于运行代码模块的虚拟机,可以在运行代码模块时通过验证代码模块的证书确定该代码模块的有效性,并在代码模块被确定为有效时才运行该代码模块,简化了虚拟机运行代码模块的过程,从而可以减小代码模块的运行开销,缩短启动时间,提高效率。
图6是根据本发明的实施例的用于在虚拟机中运行代码模块时验证代码模块的装置的具体实现的示意性框图。
如图6所示,根据本发明的实施例的用于在虚拟机中运行代码模块时验证代码模块的装置是基于IBM公司的J9虚拟机和Eclipse公司的OSGi组件管理架构实现的。OSGi架构602是一种动态组件运行容器和服务平台,其提供通用的安全Java架构,并可支持如OSGi插件601的可扩展、可下载的应用程序的配置。在该OSGi架构602中,可以实现本发明的实施例中的解析器。OSGi插件601是表示将在OSGi架构702中执行的JAR文件的模块化的单元,相当于本发明的实施例中的代码模块。在J9虚拟机603中可以实现本发明的实施例中的加载器、证书生成器、证书验证器和代码验证器。插件生命周期层604提供一种控制插件的安全和生命周期操作的机制,其规定了一个插件如何进行安装、更新、启动、停止和卸载。存储器605相当于本发明的实施例中的存储器。
OSGi插件601可以从不信任的源下载并安装在OSGi架构602上,此时OSGi架构602处于安装状态。当J9虚拟机603准备运行OSGi插件601时,J9虚拟机603中的加载器将该OSGi插件601的类文件加载到本地,并基于这些类文件产生证书。J9虚拟机603从存储器605中找到与该OSGi插件601对应的证书,将其发送到证书验证器,与所产生的证书进行验证。如果验证结果是两个证书一致,则表明该OSGi插件601有效,那么不对该OSGi插件601进行代码验证,而直接运行该OSGi插件601。如果验证结果是两个证书不一致,则需要对该OSGi插件601进行代码验证。
当对OSGi插件601进行验证时,首先由OSGi架构602中的解析器对该OSGi插件601的依赖关系进行解析,插件生命周期层604进入解析状态。在成功解析了该OSGi插件601的依赖关系后,由J9虚拟机603对该OSGi插件601进行代码验证,即验证OSGi插件601中的所有类以及与该OSGi插件601有依赖关系的其它代码模块。当验证通过后,J9虚拟机603中的证书生成器对这些类文件应用MD5算法以生成哈希代码,然后对生成的哈希代码应用AES算法,从而获得被加密的代码模块的证书。此时,插件生命周期层604进入验证状态。然后,通过代码验证的OSGi插件601和生成的证书被存储在存储器605中,以供下次使用。
虽然以上结合具体实施方式对本发明的用于在虚拟机中运行代码模块时验证代码模块的方法及装置进行了详细描述,但本发明并不限于此,应当理解,在不脱离本发明的精神和范围的情况下,本领域的普通技术人员可以对本发明的上述实施方式进行各种变换、替换和修改。
Claims (18)
1.一种用于在虚拟机中安装或更新代码模块时预验证所述代码模块的方法,包括以下步骤:
加载所安装或更新的代码模块内的代码;
对所述代码模块内的代码执行代码验证;
如果通过所述代码验证,则生成所述代码模块的证书;以及
存储通过所述代码验证的代码模块及其证书。
2.根据权利要求1所述的方法,在所述执行代码验证的步骤之前,还包括:解析所述代码模块与其它代码模块之间的依赖关系;以及
所述执行代码验证的步骤对所述代码模块以及与其有依赖关系的代码模块执行代码验证。
3.根据权利要求1或2所述的方法,其中,所述执行代码验证的步骤包括以下步骤中的至少一个:检查所述代码的语法;检查所述代码的语义;检查所述代码的类型安全;以及检查所述代码的链接关系。
4.根据权利要求1至3任意一项所述的方法,其中,所述生成证书的步骤包括:对所述代码模块生成摘要,作为所述代码模块的证书。
5.根据权利要求4所述的方法,其中,所述生成证书的步骤还包括:对所生成的摘要进行加密。
6.根据权利要求1至5任意一项所述的方法,其中,所述存储步骤包括:分别存储通过所述代码验证的代码模块和其证书;以及保存所述证书与对应的代码模块的关联信息。
7.根据权利要求1至5任意一项所述的方法,其中,所述存储步骤包括:存储通过所述代码验证的代码模块,其中所述证书作为所述代码模块的属性被写入该代码模块的代码文件中。
8.一种用于在虚拟机中运行代码模块时验证所述代码模块的方法,包括以下步骤:
加载将要运行的代码模块内的代码;
基于所加载的代码生成所述代码模块的证书;
如果所生成的代码模块的证书与预先存储的所述代码模块的证书一致,则验证所述代码模块为有效;以及
如果所生成的代码模块的证书与预先存储的所述代码模块的证书不一致,则利用权利要求1至7任意一项所述的用于在虚拟机中安装或更新代码模块时预验证代码模块的方法,对所述代码模块进行预验证。
9.一种在虚拟机中运行代码模块的方法,包括:
执行如权利要求8所述的用于在虚拟机中运行代码模块时验证所述代码模块的方法;以及
当验证所述代码模块为有效时,运行所述代码模块。
10.一种用于在虚拟机中安装或更新代码模块时预验证所述代码模块的装置,包括:
加载器,用于加载所述代码模块的代码;
代码验证器,用于对所述代码模块内的代码执行代码验证;
证书生成器,用于对通过代码验证的代码模块生成证书;以及
存储器,用于存储通过代码验证的代码模块和其证书。
11.根据权利要求10所述的装置,还包括:解析器,用于解析所述代码模块与其它代码模块之间的依赖关系;以及
所述代码验证器对所述代码模块以及与其有依赖关系的代码模块执行代码验证。
12.根据权利要求10或11所述的装置,其中,所述代码验证器包括以下单元中的至少一个:
语法检查单元,用于检查所述代码的语法;
语义检查单元,用于检查所述代码的语义;
类型安全检查单元,用于检查所述代码的类型安全;以及
链接检查单元,用于检查所述代码的链接关系。
13.根据权利要求10至12任意一项所述的装置,其中,所述证书生成器包括:摘要产生单元,用于对所述代码模块产生摘要,作为所述代码模块的证书。
14.根据权利要求13所述的装置,其中,所述证书生成器还包括:加密单元,用于对所述摘要产生单元产生的摘要进行加密。
15.根据权利要求10至14任意一项所述的装置,还包括:重写单元,用于将所述证书作为代码模块的属性写入对应的代码模块的代码文件中。
16.根据权利要求10至14任意一项所述的装置,其中,所述存储器包括:
模块存储单元,用于存储通过代码验证的代码模块;
证书存储单元,用于存储所述通过代码验证的代码模块的证书;以及
关联信息存储单元,用于存储所述证书和对应的代码模块的关联信息。
17.一种用于在虚拟机中运行代码模块时验证所述代码模块的装置,包括:
如权利要求10至16任意一项所述的用于在虚拟机中安装或更新代码模块时预验证代码模块的装置;以及
证书验证器,用于根据从所述存储器获得的所述代码模块的证书,验证由所述证书生成器对所述将要运行的代码模块生成的证书;
其中,当所述证书验证器验证所述代码模块为无效时,由所述代码验证器对所述代码模块内的代码执行代码验证。
18.一种用于运行代码模块的虚拟机,包括:如权利要求17所述的用于在虚拟机中运行代码模块时验证所述代码模块的装置,并且只有当所述装置验证所述代码模块为有效时,运行所述代码模块。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200710004270XA CN101226569A (zh) | 2007-01-19 | 2007-01-19 | 在虚拟机中验证代码模块的方法及装置 |
US12/016,398 US8356351B2 (en) | 2007-01-19 | 2008-01-18 | Method and device for verification of code module in virtual machine |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200710004270XA CN101226569A (zh) | 2007-01-19 | 2007-01-19 | 在虚拟机中验证代码模块的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101226569A true CN101226569A (zh) | 2008-07-23 |
Family
ID=39717489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA200710004270XA Pending CN101226569A (zh) | 2007-01-19 | 2007-01-19 | 在虚拟机中验证代码模块的方法及装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8356351B2 (zh) |
CN (1) | CN101226569A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102265283A (zh) * | 2008-10-24 | 2011-11-30 | 爱立信电话股份有限公司 | 用于安全软件平台访问的方法和设备 |
CN102347941A (zh) * | 2011-06-28 | 2012-02-08 | 奇智软件(北京)有限公司 | 一种基于开放平台的安全应用控制方法 |
CN102929607A (zh) * | 2012-10-09 | 2013-02-13 | 曙光信息产业(北京)有限公司 | 一种基于云计算的数据挖掘***功能层析架构 |
CN103488937A (zh) * | 2013-09-16 | 2014-01-01 | 华为技术有限公司 | 一种度量方法、电子设备及度量*** |
CN103914329A (zh) * | 2014-03-20 | 2014-07-09 | 北京京东尚科信息技术有限公司 | 编译程序的方法和装置以及*** |
CN106648681A (zh) * | 2016-12-29 | 2017-05-10 | 南京科远自动化集团股份有限公司 | 一种可编程语言编译装载***及方法 |
CN107391177A (zh) * | 2017-06-28 | 2017-11-24 | 广州华多网络科技有限公司 | 一种插件下载校验逻辑性能优化方法、设备及计算机*** |
CN114860519A (zh) * | 2022-04-08 | 2022-08-05 | 中国人民解放军国防科技大学 | 一种面向大规模asic芯片的多芯片联合验证方法及装置 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI348306B (en) * | 2005-12-26 | 2011-09-01 | Ibm | A method and a pervasive device of automatically downloading a midlet triggered by push messages |
US8484625B2 (en) * | 2009-04-01 | 2013-07-09 | Motorola Mobility Llc | Method and apparatus to vet an executable program using a model |
CN102158490B (zh) * | 2011-04-07 | 2013-10-23 | 山东中创软件商用中间件股份有限公司 | 基于OSGi的服务转换方法和装置 |
CN103034789B (zh) * | 2012-12-10 | 2015-07-08 | 山东中创软件商用中间件股份有限公司 | 一种组件部署方法、装置及安全框架 |
US9367686B1 (en) * | 2015-07-21 | 2016-06-14 | AO Kaspersky Lab | System and method for antivirus checking of native images of software assemblies |
CN105487917B (zh) * | 2015-12-07 | 2017-05-31 | 郑州轻工业学院 | 一种虚拟机实现验证码***修复的方法及装置 |
FR3044786B1 (fr) * | 2015-12-07 | 2018-07-13 | Ingenico Group | Procede de chargement d'une ressource informatique au sein d'un dispositif electronique, module electronique et programme d'ordinateur correspondant |
US20170357494A1 (en) * | 2016-06-08 | 2017-12-14 | International Business Machines Corporation | Code-level module verification |
US9977725B2 (en) * | 2016-08-26 | 2018-05-22 | Cisco Technology, Inc. | Automatic classification and parallel processing of untested code in a protected runtime environment |
US10666443B2 (en) * | 2016-10-18 | 2020-05-26 | Red Hat, Inc. | Continued verification and monitoring of application code in containerized execution environment |
US10540506B2 (en) | 2017-01-12 | 2020-01-21 | Microsoft Technology Licensing, Llc | Field-programmable gate array virtualization |
US10404470B2 (en) | 2017-01-13 | 2019-09-03 | Microsoft Technology Licensing, Llc | Signature verification of field-programmable gate array programs |
US10469518B1 (en) * | 2017-07-26 | 2019-11-05 | EMC IP Holding Company LLC | Method and system for implementing cyber security as a service |
US10581897B1 (en) | 2017-07-26 | 2020-03-03 | EMC IP Holding Company LLC | Method and system for implementing threat intelligence as a service |
CN110865855B (zh) * | 2019-11-18 | 2023-10-27 | 百度在线网络技术(北京)有限公司 | 小程序处理方法及相关设备 |
US20230334145A1 (en) * | 2022-04-13 | 2023-10-19 | Oracle International Corporation | Secure modular machine learning platform |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5724425A (en) * | 1994-06-10 | 1998-03-03 | Sun Microsystems, Inc. | Method and apparatus for enhancing software security and distributing software |
US6157721A (en) * | 1996-08-12 | 2000-12-05 | Intertrust Technologies Corp. | Systems and methods using cryptography to protect secure computing environments |
US5692047A (en) * | 1995-12-08 | 1997-11-25 | Sun Microsystems, Inc. | System and method for executing verifiable programs with facility for using non-verifiable programs from trusted sources |
US7058822B2 (en) * | 2000-03-30 | 2006-06-06 | Finjan Software, Ltd. | Malicious mobile code runtime monitoring system and methods |
US6347398B1 (en) * | 1996-12-12 | 2002-02-12 | Microsoft Corporation | Automatic software downloading from a computer network |
US6381741B1 (en) * | 1998-05-18 | 2002-04-30 | Liberate Technologies | Secure data downloading, recovery and upgrading |
US6148401A (en) | 1997-02-05 | 2000-11-14 | At&T Corp. | System and method for providing assurance to a host that a piece of software possesses a particular property |
JPH10301772A (ja) * | 1997-04-30 | 1998-11-13 | Sony Corp | 情報処理装置および情報処理方法、並びに記録媒体 |
JPH10301773A (ja) * | 1997-04-30 | 1998-11-13 | Sony Corp | 情報処理装置および情報処理方法、並びに記録媒体 |
US6463535B1 (en) * | 1998-10-05 | 2002-10-08 | Intel Corporation | System and method for verifying the integrity and authorization of software before execution in a local platform |
US6950932B1 (en) * | 1999-05-07 | 2005-09-27 | Nortel Networks Limited | Security association mediator for java-enabled devices |
AU4674300A (en) | 1999-05-25 | 2000-12-12 | Motorola, Inc. | Pre-verification of applications in mobile computing |
US6618769B1 (en) * | 1999-05-27 | 2003-09-09 | Sun Microsystems, Inc. | Module-by-module verification |
US6618855B1 (en) * | 1999-05-27 | 2003-09-09 | Sun Microsystems, Inc. | Caching untrusted modules for module-by-module verification |
US6895501B1 (en) * | 2000-03-13 | 2005-05-17 | Wrq, Inc. | Method and apparatus for distributing, interpreting, and storing heterogeneous certificates in a homogenous public key infrastructure |
US6976163B1 (en) * | 2000-07-12 | 2005-12-13 | International Business Machines Corporation | Methods, systems and computer program products for rule based firmware updates utilizing certificate extensions and certificates for use therein |
US7171558B1 (en) * | 2000-09-22 | 2007-01-30 | International Business Machines Corporation | Transparent digital rights management for extendible content viewers |
US7346901B2 (en) * | 2001-12-18 | 2008-03-18 | Microsoft Corporation | Efficient generic code in a dynamic execution environment |
EP1429224A1 (en) * | 2002-12-10 | 2004-06-16 | Texas Instruments Incorporated | Firmware run-time authentication |
FR2849230B1 (fr) * | 2002-12-24 | 2005-04-22 | Francois Bangui | Procede et dispositif de verification de l'integrite d'une application logicielle sans cle de chiffrement/dechiffrement |
US7281237B2 (en) * | 2003-01-16 | 2007-10-09 | Sun Microsystems, Inc. | Run-time verification of annotated software code |
US7467417B2 (en) * | 2003-06-18 | 2008-12-16 | Architecture Technology Corporation | Active verification of boot firmware |
JP5034227B2 (ja) * | 2005-11-29 | 2012-09-26 | ソニー株式会社 | 情報処理装置、情報記録媒体製造装置、情報記録媒体、および方法、並びにコンピュータ・プログラム |
JP4655951B2 (ja) * | 2006-02-06 | 2011-03-23 | ソニー株式会社 | 情報処理装置、情報記録媒体製造装置、情報記録媒体、および方法、並びにコンピュータ・プログラム |
US20080077801A1 (en) * | 2006-09-25 | 2008-03-27 | Nokia Corporation | Protecting interfaces on processor architectures |
US8321861B2 (en) * | 2008-02-20 | 2012-11-27 | Arm Limited | Non-native program execution across multiple execution environments |
US20090307486A1 (en) * | 2008-06-09 | 2009-12-10 | Garret Grajek | System and method for secured network access utilizing a client .net software component |
US20110246778A1 (en) * | 2010-03-31 | 2011-10-06 | Emc Corporation | Providing security mechanisms for virtual machine images |
-
2007
- 2007-01-19 CN CNA200710004270XA patent/CN101226569A/zh active Pending
-
2008
- 2008-01-18 US US12/016,398 patent/US8356351B2/en not_active Expired - Fee Related
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102265283A (zh) * | 2008-10-24 | 2011-11-30 | 爱立信电话股份有限公司 | 用于安全软件平台访问的方法和设备 |
CN102347941A (zh) * | 2011-06-28 | 2012-02-08 | 奇智软件(北京)有限公司 | 一种基于开放平台的安全应用控制方法 |
CN102929607A (zh) * | 2012-10-09 | 2013-02-13 | 曙光信息产业(北京)有限公司 | 一种基于云计算的数据挖掘***功能层析架构 |
CN103488937B (zh) * | 2013-09-16 | 2017-02-22 | 华为技术有限公司 | 一种度量方法、电子设备及度量*** |
WO2015035843A1 (zh) * | 2013-09-16 | 2015-03-19 | 华为技术有限公司 | 一种度量方法、电子设备及度量*** |
CN103488937A (zh) * | 2013-09-16 | 2014-01-01 | 华为技术有限公司 | 一种度量方法、电子设备及度量*** |
US10339284B2 (en) | 2013-09-16 | 2019-07-02 | Huawei Technologies Co., Ltd. | Measurement method, electronic device, and measurement system |
CN103914329A (zh) * | 2014-03-20 | 2014-07-09 | 北京京东尚科信息技术有限公司 | 编译程序的方法和装置以及*** |
CN103914329B (zh) * | 2014-03-20 | 2017-05-10 | 北京京东尚科信息技术有限公司 | 编译程序的方法和装置 |
CN106648681A (zh) * | 2016-12-29 | 2017-05-10 | 南京科远自动化集团股份有限公司 | 一种可编程语言编译装载***及方法 |
CN107391177A (zh) * | 2017-06-28 | 2017-11-24 | 广州华多网络科技有限公司 | 一种插件下载校验逻辑性能优化方法、设备及计算机*** |
CN107391177B (zh) * | 2017-06-28 | 2020-09-08 | 广州华多网络科技有限公司 | 一种插件下载校验逻辑性能优化方法、设备及计算机*** |
CN114860519A (zh) * | 2022-04-08 | 2022-08-05 | 中国人民解放军国防科技大学 | 一种面向大规模asic芯片的多芯片联合验证方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US8356351B2 (en) | 2013-01-15 |
US20080209556A1 (en) | 2008-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101226569A (zh) | 在虚拟机中验证代码模块的方法及装置 | |
CN102830992B (zh) | 插件加载方法及*** | |
CN108960830B (zh) | 智能合约的部署方法、装置、设备及存储介质 | |
US9721101B2 (en) | System wide root of trust chaining via signed applications | |
KR101190479B1 (ko) | 티켓 인증 보안 설치 및 부트 | |
WO2017166561A1 (zh) | 一种基于安卓***apk下载方法及其*** | |
EP3038004A1 (en) | Method for providing security for common intermediate language-based program | |
US20170270319A1 (en) | Method and device for providing verifying application integrity | |
US20170262656A1 (en) | Method and device for providing verifying application integrity | |
US7953225B2 (en) | Mobile wireless communications device with software installation and verification features and related methods | |
US20170262657A1 (en) | Method and device for providing verifying application integrity | |
CN103793654A (zh) | 服务器主动管理技术协助的安全引导 | |
CN101630353A (zh) | 在移动因特网设备上安全引导uefi固件和uefi感知操作***的***和方法 | |
US20170262658A1 (en) | Method and device for providing verifying application integrity | |
KR20140114446A (ko) | 외부 코드 인증을 통한 웹 브라우징 오버헤드들의 감소 | |
KR20140048094A (ko) | 이동 단말 장치 칩 프로그래밍을 위한 방법 | |
CN101908115A (zh) | 基于可信平台模块实现软件可信执行的方法 | |
JP7439067B2 (ja) | ファイルシステムの検証とインストール | |
CN105468964A (zh) | 计算机***以及计算机***操作方法 | |
CN112527358B (zh) | 一种基于自我度量的可信应用可信度量方法、装置及*** | |
CN108536449A (zh) | Web项目部署方法及装置 | |
JP2018005915A (ja) | アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム | |
Zhang et al. | Programming smart contract with solidity | |
CN116956297A (zh) | 检测方法、装置、设备、存储介质及计算机程序产品 | |
CN116450237A (zh) | Mcu上tee可信应用的多实例动态加载方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20080723 |
|
C20 | Patent right or utility model deemed to be abandoned or is abandoned |