[发明专利]在虚拟机中验证代码模块的方法及装置无效
申请号: | 200710004270.X | 申请日: | 2007-01-19 |
公开(公告)号: | CN101226569A | 公开(公告)日: | 2008-07-23 |
发明(设计)人: | 龙海涛;傅荣耀;D·伍德;B·特蕾西 | 申请(专利权)人: | 国际商业机器公司 |
主分类号: | G06F21/00 | 分类号: | G06F21/00;G06F9/445;G06F9/455 |
代理公司: | 北京市中咨律师事务所 | 代理人: | 李峥;刘薇 |
地址: | 美国*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 虚拟机 验证 代码 模块 方法 装置 | ||
技术领域
本发明涉及对可在虚拟机中执行的代码模块进行验证的技术,具体地说,涉及在虚拟机中安装或更新代码模块时的代码模块预验证方法及装置、在虚拟机中运行代码模块时的代码模块验证方法及装置、在虚拟机中运行代码模块的方法以及用于运行代码模块的虚拟机。
背景技术
在虚拟机中,例如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(移动计算设备中的应用程序的预验证)”公开了一种在移动通信设备中对应用程序进行预验证的方法,其中,在移动通信设备中预先存储了包括应用程序以及每个应用程序的数字指纹的列表,当执行某个应用程序时,通过检查上述列表中是否存在该应用程序的数字指纹,确定是否执行该应用程序。然而,该方法是对应用程序是否被授权运行进行预验证,并没有涉及对应用程序的代码的验证。
因此,迫切需要一种有效的在虚拟机中验证代码模块的方法,以提高代码模块运行时的启动和执行性能。
发明内容
本发明正是基于上述技术问题而提出的,其目的在于提供用于在虚拟机中安装或更新代码模块时预验证代码模块的方法及装置、用于在虚拟机中运行代码模块时验证代码模块的方法及装置、用于在虚拟机中运行代码模块的方法以及用于运行代码模块的虚拟机,使得代码验证只在代码模块被安装/更新时才进行,并且在执行代码验证后存储验证的结果,使虚拟机能够记住验证结果,从而无需在每次运行代码模块时都执行代码验证,减小由于在执行代码模块时进行代码验证而造成的运行开销,提高效率。
根据本发明的第一个方面,提供一种用于在虚拟机中安装或更新代码模块时预验证所述代码模块的方法,包括:加载所安装或更新的代码模块内的代码;对所述代码模块内的代码执行代码验证;如果通过所述代码验证,则生成所述代码模块的证书;以及存储通过所述代码验证的代码模块及其证书。
根据本发明的第二个方面,提供一种用于在虚拟机中运行代码模块时验证所述代码模块的方法,包括:加载将要运行的代码模块内的代码;基于所加载的代码生成所述代码模块的证书;如果所生成的代码模块的证书与预先存储的所述代码模块的证书一致,则验证所述代码模块为有效;以及如果所生成的代码模块的证书与预先存储的所述代码模块的证书不一致,则利用上述的用于在虚拟机中安装或更新代码模块时预验证代码模块的方法,对所述代码模块进行预验证。
根据本发明的第三个方面,提供一种在虚拟机中运行代码模块的方法,包括:执行上述的用于在虚拟机中运行代码模块时验证所述代码模块的方法;以及当验证所述代码模块为有效时,运行所述代码模块。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于国际商业机器公司,未经国际商业机器公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710004270.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:液晶显示器
- 下一篇:手机来电拒接后的短信自动回复方法