软件运行时出处的制作方法

文档序号:6496175阅读:139来源:国知局
软件运行时出处的制作方法
【专利摘要】执行中的第一计算模块验证未经验证的第二计算模块的运行时出处。在第一计算模块处接收标识第二计算模块的作者的已签名证书。验证该已签名证书与第二计算模块间的关联。随后生成由第一计算模块签名并且标识第二计算模块的运行时出处的第一出处证书和相关联的私有密钥,并且向第二计算模块发布该第一出处证书。可以发布已签名证书链,其包括出处证书和静态标识证书。所述链中的每一个出处证书验证执行层的完整性,并且该多个静态标识证书标识与每一个软件层相关联的计算模块的各自的作者。可以通过所发布的证书链递归地追踪第二计算模块的出处。
【专利说明】软件运行时出处
【技术领域】
[0001]本发明一般地针对可靠地标识编程代码,更具体来说针对可靠地标识计算平台的运行时完整性。
【背景技术】
[0002]难以确定及保证包括软件和固件在内的计算机代码的可信任性或完整性。软件在安装或执行之前是否被修改过的有限的确定能够通过各种代码签名技术被实现。例如,使用由受信任机构颁发的密码密钥(例如公开/私有密钥),软件销售商可以使用私有密钥来对文件(例如软件程序)数字签名。终端用户可以利用软件销售商的公开密钥来验证文件的作者。基于该文件所计算出的散列码(例如密码散列)可以被用来验证该文件在由软件销售商签名之后未被修改过。
[0003]这些技术试图例如使用密码散列来保证底层代码(例如可执行文件或脚本)自从由软件销售商签名之后未被改动或破坏过。但是这样的技术局限于验证静态文件标识的完整性(即写到计算机可读介质的文件数据的完整性)。

【发明内容】

[0004]根据本发明的一个实施例,能够验证由执行中的第一计算模块接收到的第二计算模块的已签名证书。在第一计算模块处接收来自第二计算模块的至少一个已签名证书,所述已签名证书标识第二计算模块的作者。验证该已签名证书与第二计算模块间的关联。所述关联是通过比较散列值来被验证的。连同其相关联的公开/私有密钥对一起生成由第一计算模块签名的第一出处证书,该第一出处证书标识第二计算模块的运行时出处。
[0005]根据一个实施例,向第二计算模块发布第一出处证书和相关联的公开/私有密钥对。
[0006]前面所讨论的运行时出处对于标识运行中的软件模块和运行时环境是有用的。举例来说,第二计算模块可以执行第三计算模块并且可以是用于接收第三计算模块的加载器。因此,第二计算模块可以与第三计算模块交互,其交互方式和前面所描述的第一计算模块与第二计算模块交互的方式相同。根据一个实施例,第二计算模块接收来自第三计算模块的至少一个已签名证书,所述已签名证书标识第三计算模块的作者。通过比较散列值,该已签名证书与第二计算模块之间的关联被验证。使用第二计算模块的私有密钥对并且基于由第一计算模块签名的该第一出处证书生成由第二计算模块签名的第二出处证书,该第二出处证书标识第三计算模块的运行时出处。
[0007]根据一个实施例,向第二计算模块发布一个已签名证书链。所述已签名证书链包括至少一个由受信任认证机构颁发的证书,并且标识第一计算模块的作者。所述已签名证书链包括多个出处证书,每一个出处证书与执行层相关联,并且每一个静态标识证书标识与每一个软件执行层相关联的软件的各自的作者。
[0008]根据一个实施例,所述至少一个已签名证书包括已签名证书链,该已签名证书链包括至少一个由受信任认证机构颁发的证书以及至少一个由所述至少一个已签名证书当中的另一个证书所签名的证书。验证已签名证书与第二计算模块之间的关联包括追踪所述至少一个已签名证书的签名直到由所述受信任认证机构颁发的所述至少一个证书。
[0009]根据一个实施例,第一计算模块包括硬件引导过程(hardwareboot process)以及标识硬件设备的证书。初始软件镜像由硬件计算设备验证。由硬件引导过程生成已签名证书,来认证计算设备验证了初始软件镜像并且在重置之后立即执行了该初始软件镜像。
[0010]根据一个实施例,第一计算模块包括云计算服务。
[0011]根据描述和附图,本领域技术人员将会理解前述和其他特征。
【专利附图】

【附图说明】
[0012]图1是根据本发明的一个实施例的用于建立计算模块的运行时出处的过程的流程图;
[0013]图2是根据本发明的一个实施例的表示计算模块的运行时出处的证书链的图示;以及
[0014]图3是能够根据本发明的一个实施例所配置的计算机的高级图示。
【具体实施方式】
[0015]存在用于签名包含计算机代码(例如可执行文件或脚本文件)的(一个或多个)文件的各种技术。对文件签名标识声称是包含在文件中的计算机代码的作者的实体事实上正是所述计算机代码的作者,并且验证所述计算机代码在该(一个或多个)文件被签名之后没有改变。但是这样的文件签名技术的受限之处在于,没有提供关于与已签名文件中的计算机代码接口的其他软件或计算模块的证书的完整性或作者身份的保证。因此,在与执行中的计算机代码接口的其他软件层处,不安全性和脆弱性能够被引入。
[0016]举例来说,包含用于文字处理程序的编程代码的文件可以由其作者签名,来标识该文件由声称为作者的实体所写,并且验证该文件在被签名之后没有改变。但是所述文字处理程序在操作系统“之上”运行。也就是说,文字处理程序由操作系统加载,并且在由操作系统提供的运行时环境中执行。验证包含文字处理程序的文件的签名并没有提供操作系统是可信的保证。类似地,操作系统可以由虚拟化环境加载。即使包含文字处理程序的文件以及包含操作系统的(一个或多个)文件被签名,那些签名也不保证虚拟化环境是可信的。在再一个实例中,被软件组件访问的网络资源、第三方软件库或云计算服务可能是系统中的安全风险的来源。对描述单个软件组件的文件签名不保证被计算机程序访问的任何资源的可信性。此外,文件签名技术不提供对于软件组件的出处以及被该软件组件访问的所有各层和资源的验证。
[0017]图1示出了根据本发明的一个实施例的用于建立计算模块的运行时出处的过程100的流程图。出于本讨论的目的提到了计算模块。但是本领域技术人员应理解,计算模块能够包括可执行软件、软件库、固件、引导代码、网络服务或其他计算机资源。
[0018]软件运行时出处是在自举过程(bootstrap process)中,在加载代码的每一阶段所执行的递归算法。最终的运行中的程序能够访问描述自从处理器被重置之后所执行的每一个软件层的证书链。该证书链中的锚点是由硬件提供的描述处理器自身的证书。所述由硬件提供的证书由处理器的制造商预加载并且充分地标识硬件,这样它的硬件安全性特征被恰当地描述。所述由硬件提供的证书可以作为一项证明给出,其表明处理器是物理上安全的并且不是有潜在安全漏洞的软件仿真。举例来说,所述证书指示型号80321348,并且制造商把所有80321348处理器定义为提供安全的引导过程、加密DRAM接口以及JTAG访问端口被锁定。这样的信息将使得远程用户确信,运行在该硬件处理器上的程序不会遭到外部硬件探测。
[0019]这里所描述的软件运行时出处算法可以随着每一个软件层被加载和执行而被递归地执行。通过“加载”代理来促进软件的加载,并且软件模块一旦被加载,其自身就可以成为针对后续软件模块的加载代理。加载代理包括描述其自身的系谱或出处的证书链。该证书链中的最后一个证书认证了加载代理的公开/私有密钥对的公开部分。
[0020]每一个加载代理或加载器包括:1)证书链,2)对应于由所述链中的最后一个证书签名的公开密钥的私有密钥。每一个软件模块被“代码签名”并且包括:1)静态比特镜像,2)定义了该软件模块的起源的相关联的静态证书链,其中所述静态证书链中的最后一个证书包括公开密钥,该公开密钥与被用来对所述软件模块的散列编码的由所述软件模块的作者所保有的私有密钥相关联;以及3)所述软件模块的已编码散列。
[0021]被示出为图1中的流程图的过程100是由加载器所采取,用于验证软件模块,并然后把数据传递到经过验证且活动运行的软件模块从而使得该软件模块可以采取加载器的角色并且能够促进后续软件模块的加载的各个步骤的过程。
[0022]根据过程100,在步骤110,在执行中的受信任第一计算模块或加载器处接收到来自未经验证的第二计算模块的已签名证书(例如X.509证书)。所述受信任计算模块与验证程序出处的证书链相关联。可以利用过程100或者通过下文所描述的自举机制(bootstrapping mechanism)来生成所述证书链。也就是说,可以递归地执行过程100,以随着另外的计算模块在执行中的受信任计算模块之上被执行来验证每一个执行层。受信任第一计算模块或加载器可以包括描述正在执行第一计算模块的硬件的证书(集成的静态标识证书链以及秘密私有密钥)。
[0023]在步骤120,所述已签名证书与第二计算模块之间的关联被验证。所述已签名证书可以包括多个证书,其中至少一个是由受信任机构所签名。举例来说,可以从受信任机构为一家公司颁发证书。所述公司可以使用该证书来对另外的证书签名,所述另外的证书又可以依次被用来对其他证书签名,等等诸如此类。通过比较散列值来执行对于该已签名证书与第二计算模块之间的关联的验证。具体来说,第二计算模块的散列由加载器计算出来。所述加载器随后使用相关联的静态证书链中的第二软件模块的最后一个证书中的公开密钥来解密第二计算模块的被加密的已编码散列。如果由加载器计算的该被计算出的散列与所述已解码散列匹配,则认为第二软件模块得到验证。每一个散列代表一个比特模式。通过检查与已签名证书的软件散列相关联的比特模式是否匹配于与第二计算模块的散列相关联的比特模式,已签名证书与第二计算模块之间的关联被验证。其他已知的和传统的软件签名方法也是可能的。
[0024]如果在判定140处,已签名证书与第二计算模块之间的关联没有得到验证,则过程100在步骤170处拒绝对于第二计算模块的访问。拒绝访问能够包括停止执行软件组件、阻止对于网络资源的访问或者未能加载库。[0025]如果在判定140处,已签名证书与第二计算模块之间的关联得到验证,则在步骤150处,公开/私有密钥对由第一计算模块或加载器生成。
[0026]在步骤155处,第一计算模块或加载器为第二计算模块生成新的出处证书。该新的出处证书证明第一计算模块或加载器已经验证并加载了第二计算模块。所述新的出处证书包括第一计算模块的名称作为其主体(subject),以及来自前面关于步骤150所述的公开/私有密钥对的新生成的公开密钥。所述新的出处证书标识第二计算模块的运行时出处,并且被第一计算模块或加载器用该加载器的私有密钥签名。从而,所述新的出处证书与第一计算模块或加载器的出处证书链密码地连接(cryptographicalIy connected)。该新的出处证书随后可以被附加到该加载器的运行时出处证书链,从而为第二计算模块形成新的运行时出处证书。
[0027]在步骤160,新的出处证书被发布到第二计算模块。具体来说,所述新的运行时出处证书被发布到由加载器向第二软件模块的所加载的镜像。加载器还向第二软件模块的所加载的镜像发布由该加载器创建的该新生成的私有密钥。
[0028]在步骤165,所述加载器或第一计算模块的该出处证书链被发布到第二计算模块。此外,所述加载器或第一计算模块还可以向第二计算模块发布与第二计算模块相关联的标识证书。这些标识证书可以驻留在第二计算模块上或者可以在文件镜像注解中获得。在所有证书都被发布之后,该加载器向第二计算模块的所加载的软件镜像转移控制,并且第二计算模块变为具有其自身的公开/私有密钥对的活动代理或加载器,并且可以促进后续计算模块的加载。第二计算模块采取加载器的角色,并且自此以后可以执行,并具有对描述运行时环境的出处证书链以及对被提供来表明其自身的标识的标识证书的访问。
[0029]第二计算模块现在与验证程序的运行时出处的证书链相关联。第二计算模块现在可以验证其他计算模块(例如第三计算模块)的证书与该其他计算模块间的关联,其验证方式与第一计算模块验证前面提到的已签名证书与第二计算模块间的关联的方式相同。
[0030]根据本发明的计算机系统可以包括硬件引导过程以及验证引导代码(即第二计算模块)的初始引导代码证书和签名的处理器(即第一计算模块)。所述引导过程可以被实施在具有安全处理器的安全计算平台上。所述计算机可以包括由其制造商签名的证书(例如X.509证书)以及如在公开密钥基础设施(PKI)规范中所描述的公开/私有密钥对。可选地,所有芯片外数据传输可以被加密,比如网络通信或DRAM事务。
[0031]在引导过程期间,处理器作为前面在过程100中所讨论的第一计算模块,并且引导镜像作为第二计算模块。处理器接收来自引导镜像的已签名证书,并且使用所述已签名证书,引导镜像被验证。处理器随后向引导镜像提供出处证书,其认证了处理器验证了引导镜像并且在重置之后立即执行了该引导镜像。处理器还向引导镜像提供公开/私有密钥对,以用于生成并签名在引导镜像之上运行的计算模块的出处证书。
[0032]用户或其他计算机程序可以通过分析计算模块的出处证书链来验证在该已签名证书与该计算模块之间的关联。由于已经通过过程100审查了包括引导过程在内的被计算模块访问的每一个软件层,因此计算模块的出处证书链还可以被用来追溯软件以及在其之下运行的所有各层的运行时出处一直到在处理器重置的时候在处理器上运行的初始软件。
[0033]图2是根据本发明的一个实施例的表示计算模块的运行时出处的证书链200的图示。每一个证书包括颁发者“I”和主体(subject) “S”。证书链200包括组件证书210的集合和出处证书220的集合。组件证书210为每一个运行时层包括一个或多个证书,并且描述了可以通过制造商追溯到公知的认证代理的该层的静态标识。如图2中所示,组件证书210包括处理器证书层230、虚拟化证书层240、操作系统证书层250和应用证书层260。
[0034]处理器证书层230包括由受信任机构Comodo (即颁发者)向公司Intel (即主体)颁发的第一证书231。处理器证书层230还包括由“Intel”使用第一证书231为安全处理器(即Sec86)颁发的第二证书232。
[0035]虚拟化证书层240包括由受信任机构GoDaddy (即颁发者)向公司VMWare (即主体)颁发的第一证书241。虚拟化证书层240还包括由“VMWare”使用第一证书241为虚拟化软件程序(即ESXi)颁发的第二证书242。
[0036]操作系统证书层250包括由受信任机构VeriSign (即颁发者)向公司WindRiver(即主体)颁发的第一证书251。操作系统证书层250还包括由“WindRiver”使用第一证书251为操作系统(即Linux)颁发的第二证书252。
[0037]应用证书层260包括由受信任机构VeriSign (即颁发者)向公司Microsoft (即主体)颁发的第一证书261。应用证书层260还包括由“Microsoft”使用第一证书261为产品套件(即MS Office)颁发的第二证书262。应用证书层260还包括由“MS Office”使用第二证书262为软件应用(即MS Office)颁发的第三证书263。
[0038]出处证书220指示每一层的运行时出处,并且可以被追溯到在重置时正在处理器上运行的初始软件。如所示出的,出处证书220的集合包括证书270,其由处理器生成以对虚拟化软件签名。也就是说,证书270由处理器使用证书232向运行时虚拟化软件ESXi颁发。类似地,证书280由虚拟化层使用证书242向操作系统Linux颁发。证书290由操作系统使用证书252向应用MSWord颁发。
[0039]因此,如图2中所示,应用MSWord的运行时出处被给予证书链200。也就是说使用证书链200,每一个软件层可以被验证并被追踪到受信任机构,并且软件层栈可以被认证并且被追溯到重置之后的处理器。
[0040]利用这些证书,潜在的用户可以追溯每一个执行层(即计算模块)直到受信任认证机构。应当提到的是,过程100以及证书链(例如证书链200)可以被用在各种应用中。举例来说,已经根据过程100被审查的远程“云计算”环境可以对用户或用户的系统提供证书链,以建立所述“云计算”环境的信任基础。因此,尽管用户不需对硬件具有物理控制,并因此不能物理地验证恶意软件(例如用于捕获私有信息或者污染远程计算的软件)存在,但是由过程100所生成的证书链提供了一定程度的受信任计算。
[0041]过程100和证书链还可以被用来在近场通信,比如电子钱包和蜂窝电话支付系统中提供一定程度的信任。也可以通过这种方式来传达消费者操作的毫微微蜂窝的可信任性。此外,过程100和证书链还可以被用来验证需要动态软件更新的系统的可信任性。举例来说,所述更新的标识可以在安装之前被检查,并且一旦被安装,描述软件系统的当前状态的记录可以成为公共可用的。
[0042]前面描述的用于控制对于共享资源的访问的方法可以被实施在使用众所周知的计算机处理器、存储器单元、存储设备、计算机软件和其他组件的计算机上。在图3中示出了这样的计算机的高级框图。计算机300包括处理器310,其通过执行计算机程序指令来控制计算机300的总体操作,其中所述计算机程序指令定义了此类操作。计算机程序指令可以被存储在存储设备320,或其他计算机可读介质(例如磁盘、CD ROM等等)中,并且在希望执行所述计算机程序指令时被加载到存储器330中。因此,图1的方法步骤可以由存储在存储器330和/或存储320中的计算机程序指令定义,并且由执行所述计算机程序指令的处理器310控制。
[0043]举例来说,所述计算机程序指令可以被实施为由本领域技术人员编程的计算机可执行代码,以执行由图1的方法步骤所定义的算法。相应地,通过执行该计算机程序指令,处理器310执行由图1的方法步骤所定义的算法。计算机300还包括用于通过网络与其他设备通信的一个或多个网络接口 340。计算机300还包括使能与计算机300进行用户交互的输入/输出设备350 (例如显示器、键盘鼠标、扬声器、按钮等等)。本领域技术人员应认识到,实际计算机的实现方式还可以包含其他组件,并且为了说明性的目的,图3是这样的计算机的各组件中的一些的高级表示。
[0044]前述的【具体实施方式】应当被理解为在每一个方面都是说明性和示例性而非限制性的,并且此处所公开的本发明的范围不应从【具体实施方式】来被确定,而应从根据专利法所允许的全部广度来被解释的权利要求书来被确定。应理解,此处所示出及描述的实施例仅为本发明原理的说明,各种修改可以为本领域技术人员所实施而不背离本发明的范围和精神。本领域技术人员可以实施各种其他的特征组合而不背离本发明的范围和精神。各个功能模块仅为说明性目的而被示出,并且可以被组合、被重新布置和/或以其他方式被修改。
【权利要求】
1.一种用于验证计算机程序的方法,其包括: 在第一计算模块处接收来自第二计算模块的至少一个已签名证书,所述已签名证书标识所述第二计算模块的作者; 验证所述已签名证书与所述第二计算模块间的关联;以及 生成由所述第一计算模块签名的第一出处证书和相关联的私有密钥,所述第一出处证书标识所述第二计算模块的运行时出处。
2.权利要求1的方法,其还包括: 在所述第二计算模块处接收来自第三计算模块的至少一个已签名证书,所述已签名证书标识所述第三计算模块的作者; 验证所述已签名证书与所述第三计算模块间的关联;以及 基于所述第一出处证书生成由所述第二计算模块签名的第二出处证书和相关联的私有密钥,所述第二出处证书标识所述第三计算模块的运行时出处,其中所述已签名证书链包括多个出处证书和多个静态标识证书,每一个出处证书与执行层相关联,并且每一个静态标识证书标识与每一个软件执行层相关联的软件的各自的作者。
3.权利要求1的方法,其中,所述第一计算模块包括硬件引导过程(hardwarebootprocess),所述方法还包括: 由计算设备验证初始软件镜像;以及 向硬件引导过程提供已签名证书,以认证所述计算设备验证了所述初始软件镜像并且在重置之后立即执行了所述初始软件镜像。·
4.一种用于验证计算机程序的系统,其包括: 用于在第一计算模块处接收来自第二计算模块的至少一个已签名证书的装置,所述已签名证书标识所述第二计算模块的作者; 用于验证所述已签名证书与所述第二计算模块间的关联的装置;以及 用于生成由所述第一计算模块签名的第一出处证书和相关联的私有密钥的装置,所述第一出处证书标识所述第二计算模块的运行时出处。
5.权利要求4的系统,其中,所述第一计算模块包括描述执行所述第一计算模块的硬件的证书和相关联的秘密私有密钥。
6.权利要求4的系统,其还包括用于向所述第二计算模块发布已签名证书链的装置,所述已签名证书链包括至少一个由受信任认证机构颁发并且标识第一计算模块的作者的证书,其中所述已签名证书链包括多个出处证书和多个静态标识证书,每一个出处证书与执行层相关联,并且每一个静态标识证书标识与每一个软件执行层相关联的软件的各自的作者。
7.权利要求4的系统,其中,所述至少一个已签名证书包括已签名证书链,所述已签名证书链包括由受信任认证机构颁发的至少一个证书以及由所述至少一个已签名证书中的另一个证书签名的至少一个证书;并且 其中,所述用于验证所述已签名证书与所述第二计算模块间的关联的装置包括用于追踪所述至少一个已签名证书的所述签名直到由所述受信任认证机构颁发的所述至少一个证书的装置。
8.一种包括计算机可读介质编码指令的装置,所述编码指令,响应于由计算设备的执行,使得所述计算设备执行以下操作: 在第一计算模块处接收来自第二计算模块的至少一个已签名证书,所述已签名证书标识所述第二计算模块的作者; 验证所述已签名证书与所述第二计算模块间的关联;以及 生成由所述第一计算模块所签名的第一出处证书和相关联的私有密钥,所述第一出处证书标识所述第二计算模块的运行时出处。
9.权利要求8的装置,其中,所述操作还包括向所述第二计算模块发布所述第一出处证书。
10.权利要 求8的方法,其中,所述第一计算模块包括云计算服务。
【文档编号】G06F21/12GK103718183SQ201280038457
【公开日】2014年4月9日 申请日期:2012年6月19日 优先权日:2011年7月25日
【发明者】休伯特·R·麦克莱伦, 弗拉基米尔·科列斯尼科夫 申请人:阿尔卡特朗讯
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1