掌桥专利:专业的专利平台
掌桥专利
首页

一种可信计算程序调用方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 11:22:42


一种可信计算程序调用方法、装置、电子设备及存储介质

技术领域

本说明书涉及可信计算技术领域,尤其涉及一种可信计算程序调用方法、装置、电子设备及存储介质。

背景技术

实现可信计算要求计算程序运行在TEE(Trusted Execution Environment,可信执行环境)中,相关技术中,Intel SGX(Intel Software Guard Extensions,英特尔软件保护扩展)作为主流TEE实现,基于该技术的可信应用开发需要使用Intel SDK(IntelSoftware Development Kit,英特尔软件开发工具)并且按照特定的开发范式进行程序编写,因此未按照特定开发范式进行编写的现有程序需要进行较大改造才能在Intel SGX中运行,而且由于目前Intel SGX仅支持C/C++语言,这导致使用其他语言编写的现有程序具有更大的改造难度。

发明内容

为克服相关技术中存在的问题,本说明书提供了一种可信计算程序调用方法、装置、电子设备及存储介质。

根据本说明书实施例的第一方面,提供一种可信计算程序调用方法,所述方法应用于第一可信计算节点,所述第一可信计算节点处部署的第一可信执行环境中运行有可信应用,所述方法包括:

获取针对库操作系统环境的远程认证报告,所述库操作系统环境被封装于第二可信执行环境;

在根据所述远程认证报告确定所述库操作系统环境可信的情况下,将来自所述可信应用的调用请求密文发送至所述库操作系统环境中的接口程序,以使所述接口程序对所述调用请求密文进行解密后得到调用请求,并调用所述库操作系统环境中对应于所述调用请求的可信计算程序;

将所述接口程序返回的执行结果密文提供至所述可信应用,以由所述可信应用解密得到执行结果,所述执行结果密文为针对所述可信计算程序输出的执行结果进行加密得到。

根据本说明书实施例的第二方面,提供一种可信计算程序调用装置,所述装置应用于第一可信计算节点,所述第一可信计算节点处部署的第一可信执行环境中运行有可信应用,所述装置包括:

报告获取单元,用于获取针对库操作系统环境的远程认证报告,所述库操作系统环境被封装于第二可信执行环境;

请求发送单元,用于在根据所述远程认证报告确定所述库操作系统环境可信的情况下,将来自所述可信应用的调用请求密文发送至所述库操作系统环境中的接口程序,以使所述接口程序对所述调用请求密文进行解密后得到调用请求,并调用所述库操作系统环境中对应于所述调用请求的可信计算程序;

结果提供单元,用于将所述接口程序返回的执行结果密文提供至所述可信应用,以由所述可信应用解密得到执行结果,所述执行结果密文为针对所述可信计算程序输出的执行结果进行加密得到。

根据本说明书实施例的第三方面,提供一种电子设备,包括:

处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为实现上述可信计算程序调用方法的步骤。

根据本说明书实施例的第四方面,提供一种计算机可读存储介质,其上储存有可执行指令;其中,该指令被处理器执行时,实现上述可信计算程序调用方法的步骤。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。

图1是本说明书根据一示例性实施例示出的网络架构图。

图2是本说明书根据一示例性实施例示出的一种LibOS的架构图。

图3是本说明书根据一示例性实施例示出的一种可信计算程序调用方法的流程图。

图4是本说明书根据一示例性实施例示出的一种可信计算程序调用方法的交互流程图。

图5是一示例性实施例提供的一种设备的结构示意图。

图6是本说明书根据一示例性实施例示出的一种可信计算程序调用装置的框图。

具体实施方式

为对本说明书进行进一步说明,提供下列实施例:

图1是本说明书根据一示例性实施例示出的网络架构图,该网络架构包括第一可信计算节点和第二可信计算节点,其中,第一可信计算节点可以为第二可信计算节点,或者第一可信计算节点区别于第二可信计算节点,第一可信计算节点中部署有第一可信执行环境,第一可信执行环境中运行有可信应用,第二可信计算节点中部署有第二可信执行环境,第二可信执行环境中封装有库操作系统环境,且该库操作系统环境中包含有接口程序供调用方进行通讯,以及,也包含有实际执行计算过程的可信计算程序。可信应用可以通过网络连接与接口程序进行通讯,例如在第一可信计算节点区别于第二可信计算节点的情况下,可信应用与接口程序之间通过建立加密信道从而实现加密通讯;而在第一可信计算节点与第二可信计算节点为同一硬件节点的情况下,此时可以认为第一可信执行环境和第二可信执行环境均部署于第一可信计算节点,即可信应用与接口程序运行在同一硬件节点上,因此可信应用可以直接对接口程序进行本地调用而无需建立网络连接,当然,也可以通过网络连接进行通讯。另外需要指出的是,在第一可信计算节点与第二可信计算节点为同一硬件节点的情况下,第二可信执行环境与第一可信执行环境可以为同一可信执行环境,或者第二可信执行环境区别于第一可信执行环境,本说明书对此并不做任何限制。

本说明书实施例涉及的第一可信计算节点与第二可信计算节点可以为区块链节点,也可以为其他可运行计算机程序以实现任意逻辑功能的硬件/虚拟设备。

本说明书实施例涉及的可信执行环境(TEE)可以为软件提供安全的执行环境,TEE是基于 CPU 硬件的安全扩展,且与外部完全隔离的可信执行环境。TEE最早是由GlobalPlatform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。目前工业界十分关注TEE的方案,几乎所有主流的芯片和软件联盟都有自己的TEE解决方案,比如软件方面的TPM(Trusted Platform Module,可信赖平台模块)以及硬件方面的Intel SGX、ARM Trustzone(信任区)和AMD PSP(Platform SecurityProcessor,平台安全处理器)等。

以Intel SGX(以下简称SGX)技术为例。可信计算节点可以基于SGX技术创建enclave(围圈或飞地),以作为用于执行区块链交易的TEE。其中,区块链节点利用CPU中新增的处理器指令,在内存中可以分配一部分区域 EPC(Enclave Page Cache,围圈页面缓存或飞地页面缓存),以用于驻留上述的enclave。上述EPC对应的内存区域被CPU内部的内存加密引擎MEE(Memory Encryption Engine)加密,该内存区域中的内容(enclave中的代码和数据)只有在CPU内核中才能够被解密,且用于加解密的密钥只有在EPC启动时生成并存储在CPU中。可见,enclave的安全边界只包含其自身和CPU,无论是特权或非特权软件都无法访问enclave,即便是操作系统管理员和VMM(virtual machine monitor,虚拟机监视器;或称为,Hypervisor)也无法影响enclave中的代码和数据,因而具有极高的安全性,并且在上述安全性保障的前提下,CPU能够在enclave中对明文形式的区块链交易进行处理,具有极高的运算效率,从而兼顾了数据安全性和计算效率。

本说明书实施例涉及的库操作系统环境(LibOS)是指运行在可信执行环境下的一种程序执行环境,本身可以看做一个带有输入输出接口的包含多个子程序的容器。图2是本说明书根据一示例性实施例示出的一种LibOS的架构图,如图2所示,LibOS中包含entrypoint(接口)程序、handler脚本程序、可信计算程序和root(根)程序,其中,entrypoint程序包含对外开放接口的通讯服务程序、远程认证服务程序、密钥管理程序、加解密程序、任务调度程序等,handler脚本程序用于对可信计算程序的调用进行编排,包括Pre-defined jobs scripts(预定义工作脚本)、Customized jobs scripts(定制工作脚本)、Utils scripts(工具类脚本),可信计算程序中包含各种可供调用并实际执行的计算程序,如sqlite(数据库)程序、xgboost(Extreme Gradient Boosting,极端梯度提升)程序、python程序、untils(工具包)程序等,root程序包含系统底层的系统文件,为上层程序提供运行环境。而在SGX技术中,LibOS实际就相当于一个enclave,符合SGX的程序开发范式,因此LibOS中包含的程序可以被安全地运行在TEE中,而无需担心信息泄露。由于LibOS向应用程序提供兼容的系统调用,所以LibOS中包含的应用程序可以作为任意语言的现有程序运行在enclave中,因此LibOS中包含的可信计算程序无需任何改造或较少改造就能够直接移植到TEE环境中运行。LibOS中运行的任何程序的内存都由enclave保护,文件的输入输出接口由LibOS做自动的加解密,因此可以同时保护应用程序在内存和外存中数据的机密性和完整性。

本说明书实施例涉及的可信应用是指运行在TEE中、使用可验证计算技术实现的应用,当可信应用运行在WASM(WebAssembly,网页程序集)虚拟机中时,任何人可以通过将WASM字节码上传到TEE中,并由WASM虚拟机调用该WASM代码从而构成一个可信应用,WASM虚拟机进一步执行该可信应用并获得执行结果。由于可信应用运行在TEE中,因此可以通过远程认证过程向任何人证明该可信应用的确运行在TEE中,且内部的代码未被篡改,的确是按照用户的预期所执行。

图3是本说明书根据一示例性实施例示出的一种可信计算程序调用方法的流程图,该方法应用于图1所示的第一可信计算节点,所述第一可信计算节点处部署的第一可信执行环境中运行有可信应用,所述方法包括以下步骤:

S301:获取针对库操作系统环境的远程认证报告,所述库操作系统环境被封装于第二可信执行环境。

本说明书实施例中,第一可信计算节点在向封装于第二可信执行环境中的库操作系统环境发起调用请求之前,需要通过获取针对库操作系统环境的远程认证报告,以确保库操作系统环境运行在第二可信执行环境中,即确保库操作系统环境可信。

在可信应用产生相关调用需求时,第一可信计算节点可以通过多种途径获取针对库操作系统环境的远程认证报告,例如可以通过向库操作系统环境中的接口程序发送针对库操作系统环境的远程认证挑战,以获取远程认证报告,在这种情况下,第一可信计算节点可以接收所述接口程序发送的由认证服务器在完成对自荐信息的认证后返回的所述远程认证报告,所述自荐信息包含所述库操作系统环境中所含的程序代码对应的第一哈希值,以及所述库操作系统环境维护的被调用方公钥对应的第二哈希值;或者,

接收所述接口程序发送的所述自荐信息,向所述认证服务器发送所述自荐信息,并接收由所述认证服务器在完成对所述自荐信息的认证后返回的所述远程认证报告。

具体而言,本说明书实施例涉及的远程认证报告产生于针对第二可信执行环境中LibOS的远程认证过程。在接口程序接收到第一可信计算节点发出的远程认证挑战后,响应该远程认证挑战,调用接口程序中的远程认证服务程序从而执行远程认证过程,具体而言,接口程序中的远程认证服务程序首先会提取出第二可信执行环境中封装的LibOS中包含的全部程序代码,这些程序包含了LibOS中的接口程序、可信计算程序等,将这些程序代码通过哈希运算获得一个程序哈希值(第一哈希值),同样的,将LibOS维护的被调用方公钥也通过哈希运算获得一个公钥哈希值(第二哈希值),最后将程序哈希值与公钥哈希值封装得到自荐信息,该自荐信息在通过认证服务器的验证的情况下,会向远程认证服务程序提供针对该自荐信息的远程认证报告,该远程认证报告可以用于表明第二可信执行环境中封装的LibOS可信。

例如,以Intel SGX技术为例,第二可信执行环境为第二可信计算节点上创建的用于运行LibOS的enclave,远程认证过程还涉及到第二可信计算节点上另一个特殊的enclave,即quoting enclave(简称QE),QE是由英特尔提供并签名的架构型enclave(Architectural Enclave)。运行LibOS的enclave首先需要生成一用于本地认证的REPORT(报告)结构,并由QE基于该REPORT结构验证该enclave是否与自身处于同一平台上,而后由QE将该REPORT结构联合程序哈希值与公钥哈希值封装为一结构体QUOTE(即自荐信息),并使用EPID(enhanced privacy identification) 密钥进行签名。EPID密钥不仅代表链下隐私计算节点这一平台,还代表第二可信计算节点的底层硬件的可信度,还可以绑定处理器固件的版本等信息,并且只有QE才能访问到EPID密钥,以用于对上述的结构体QUOTE进行签名。在SGX技术中,上述的认证服务器可以为英特尔公司提供的IAS(Intel AttestationService)服务器,接口程序向IAS服务器发送经过签名的上述结构体QUOTE,使得IAS服务器可以对签名进行验证,并向接口程序返回相应的远程认证报告。

接口程序获得远程认证报告后,可将远程认证报告直接发送给第一可信计算节点,从而协助第一可信计算节点获取远程认证报告,本实施例通过对第一可信计算节点发起的远程认证挑战进行远程认证,从而协助第一可信计算节点获取远程认证报告,以向第一可信计算节点证明库操作系统环境未被篡改且运行在可信执行环境下,以及库操作系统环境维护的被调用方公钥是真实的,从而实现可信计算的技术要求。

在一实施例中,接口程序在获取远程认证挑战后,只会按照上述方式计算得到自荐信息而不会将自荐信息发送至认证服务器,而是先将自荐信息发送至第一可信计算节点,使得第一可信计算节点完成后续的远程认证过程,向认证服务器发送自荐信息,并接收由所述认证服务器在完成对所述自荐信息的认证后返回的所述远程认证报告,在该实施例中,第一可信计算节点可以主动对自荐信息发起远程认证过程,使第一可信计算节点获取最新的远程认证报告,从而增强证明的效度以及系统的安全性。

除了通过向库操作系统环境中的接口程序发送针对库操作系统环境的远程认证挑战,在一实施例中,在可信应用产生相关调用需求且该调用需求指向第二可信执行环境中的库操作系统环境时,还可以通过查询第一可信计算节点本地维护的远程认证报告库从而获取针对该库操作系统环境的远程认证报告,该远程认证报告库中预先存储有各个不同的库操作系统环境的远程认证报告以及对应的更新时间,每次第一可信计算节点通过远程认证挑战或其他形式获取最新的远程认证报告时,会对远程认证报告库中相应库操作系统环境的远程认证报告进行更新,以使远程认证报告库中各个库操作系统环境的远程认证报告能够及时得到更新,从而增强了证明的效度。

S302:在根据所述远程认证报告确定所述库操作系统环境可信的情况下,将来自所述可信应用的调用请求密文发送至所述库操作系统环境中的接口程序,以使所述接口程序对所述调用请求密文进行解密后得到调用请求,并调用所述库操作系统环境中对应于所述调用请求的可信计算程序。

本说明书实施例中涉及的根据远程认证报告确定所述库操作系统环境可信,具体包括:第一可信计算节点获取远程认证报告后,通过认证服务器公钥对远程认证报告的签名认证后确认该远程认证报告为认证服务器所颁发的,进而读取出该认证报告所记载的程序哈希值(第一哈希值)以及公钥哈希值(第二哈希值),将其与第一可信计算节点自身所保存的程序标准哈希值(第三哈希值)以及公钥标准哈希值(第四哈希值)进行对比,若程序哈希值与程序标准哈希值一致,则可以证明库操作系统环境未被篡改且运行在可信执行环境下,若公钥哈希值与公钥标准哈希值一致,则可以证明目前第一可信计算节点所持有的被调用方公钥的确是该库操作系统环境所维护的被调用方公钥,两次对比均一致的情况下,则可以确定该库操作系统环境是可信的。其中,程序标准哈希值是通过将对外公开的库操作系统环境中所含的所有程序代码进行哈希运算后得到,公钥标准哈希值是通过对第一可信计算节点当前持有的被认为是对应于所述库操作系统环境的被调用方公钥进行哈希运算后得到,需要指出的是,计算出程序标准哈希值的哈希运算函数与计算出程序哈希值的哈希运算函数一致,计算出公钥标准哈希值的哈希运算函数与计算出公钥哈希值的哈希运算函数一致。

本说明书实施例中,可信应用会首先生成调用请求,并将其进行加密得到调用请求密文,第一可信计算节点再将来自所述可信应用的调用请求密文发送至库操作系统环境中的接口程序,使得接口程序对调用请求密文解密后得到调用请求,并根据调用请求调用相应的可信计算程序予以执行。

在一种实施例中,调用请求密文由可信应用使用被调用方公钥对调用请求进行加密后得到,这种情况下,接口程序通过自身维护的被调用方私钥对调用请求密文进行解密后得到调用请求;在另一种实施例中,调用请求密文由可信应用使用数字信封方式对调用请求进行加密后得到,此时,第一可信计算节点在发送调用请求密文时还会发送对称密钥密文,该对称密钥密文是通过使用被调用方公钥对对称密钥进行加密后得到,这种加密方式称为数字信封方式,这种情况下,接口程序通过自身维护的被调用方私钥对对称密钥密文进行解密后得到对称密钥,然后再使用对称密钥对调用请求密文进行解密后得到调用请求,数字信封的加密方式结合了对称加密与非对称加密,在保证了信息安全的同时最大限度地利用对称加密提高了加解密的效率。

需要指出的是,本说明书实施例中的S301与S302并不具有严格的执行顺序,S301所涉及的只是获取远程认证报告,从而使得第一可信计算节点能够验证库操作系统环境是否可信,而S302则涉及的是第一可信计算节点在确认库操作系统环境可信的情况下,向接口程序发送调用请求密文,以及接口程序解密调用请求密文并响应调用请求调用相应的可信计算程序的过程,虽然为了证明库操作系统环境可信,第一可信计算节点必须首先获得远程认证报告,但由于第一可信计算节点可以随时地进行远程认证过程或查看本地远程认证报告库从而获取针对库操作系统环境的远程认证报告,即第一可信计算节点可以随时验证库操作系统环境的是否可信,因此第一可信计算节点即使在获取执行结果后也可以随时决定是否弃用,这意味着,第一可信计算节点可以同时获取针对库操作系统环境的远程认证报告以及向接口程序发送调用请求密文,即同时执行S301和S302,或者先向接口程序发送调用请求密文,再获取针对库操作系统环境的远程认证报告,即先执行S302再执行S301,在这些情况下,虽然第一可信计算节点存在暴露自身调用请求中数据的风险,但却能够提前获得计算服务的执行结果,再通过后续获得的远程认证报告从而判断执行结果是否可信,因此在一些无需输入数据的调用请求中改变S301和S302的执行顺序显然可以增加可信计算的效率。

S303:将所述接口程序返回的执行结果密文提供至所述可信应用,以由所述可信应用解密得到执行结果,所述执行结果密文为针对所述可信计算程序输出的执行结果进行加密得到。

在可信计算程序执行完成后,将输出的执行结果返回给接口程序从而完成回调过程,接口程序将返回的执行结果进行加密后得到执行结果密文,进而将执行结果密文发送至第一可信计算节点,由第一可信计算节点将执行结果密文提供至可信应用,以由可信应用对其进行解密后得到执行结果,从而完成整个可信计算程序的调用过程,使得可信应用获取对应于调用请求的执行结果,且在网络传输过程中将调用请求以及执行结果进行加密,从而在可信应用与接口程序之间建立起完整的加密信道,保证了作为一个可信计算系统整体的安全性和私密性。

具体的,所述对所述可信计算程序的执行结果进行加密后得到执行结果密文,包括:

所述执行结果密文由所述接口程序使用调用方公钥对所述可信计算程序的所述执行结果进行加密后得到,其中,所述调用方公钥可以预先维护在接口程序中的密钥管理程序中,也可以携带在调用请求中以使接口程序获取最新的调用方密钥从而保证加密通讯的有效性;或者,

在所述调用请求密文由所述可信应用使用数字信封方式对所述调用请求进行加密后得到的情况下,所述执行结果密文由所述接口程序使用所述数字信封所涉及的对称密钥对所述可信计算程序对应的执行结果进行加密后得到。

对应的,在可信应用获得执行结果密文后,会进一步根据自身维护的调用方私钥对执行结果进行解密后获取所述执行结果;或者

在所述调用请求密文由所述可信应用使用所述数字信封所涉及的对称密钥对所述调用请求进行加密后得到的情况下,可信应用由于在先前加密调用请求时所使用的就是所述数字信封所涉及的对称密钥,且该对称密钥是可信应用自行生成的,自然掌握该对称密钥,因此,第一可信计算节点会使用所述数字信封所涉及的对称密钥对所述执行结果密文进行解密后得到所述执行结果。当然,接口程序也可以不复用先前加密调用请求时所使用的所述数字信封所涉及的对称密钥,而是利用新对称密钥对执行结果进行加密得到执行结果密文,并使用调用方公钥对新对称密钥进行加密得到新对称密钥密文,从而将执行结果密文与新对称密钥密文以数字信封方式发送给第一可信计算节点,使得第一可信计算节点将数字信封提供至可信应用,可信应用进而使用调用方私钥解密新对称密钥密文得到新对称密钥,并使用新对称密钥解密执行结果密文得到执行结果,在该实施例中,由于可信应用与接口程序之间采用了双向的数字信封加密,使得攻击方即使破解了单向的对称密钥,也无法完整地获知整个调用过程,从而使得建立起的加密信道具有更强的安全性。

本说明书的实施例提供的技术方案可以包括以下有益效果:

本说明书的实施例中,由于第二可信执行环境中封装有库操作系统环境,使现有的程序无需进行改造或只需进行少量改造就能够直接运行在第二可信执行环境中,相当于利用库操作系统环境构建了一套通用应用框架,使得现有程序无需改造即可对外提供机密计算服务,那么在第一可信计算节点通过获取针对库操作系统环境的远程认证报告从而证明库操作系统可信的情况下,将可信应用中的调用请求密文发送给库操作系统环境中的接口程序,以及接收接口程序返回的库操作系统环境中可信计算程序的执行结果密文,即实现了一个由第一可信执行环境、第二可信执行环境以及可信应用与接口程序之间建立的加密信道整体构成的可信计算系统,从而使得运行在第一可信执行环境中的可信应用能够安全、私密地调用封装于第二可信执行环境的库操作系统环境中无需进行改造或只需进行少量改造的现有程序,减少了为实现相关计算功能而将现有程序进行深度改造并移植到可信执行环境中所需的开发成本。

可选的,所述可信应用运行于所述第一可信执行环境内封装的虚拟机中,所述虚拟机包括:基于二进制操作指令的栈式结构的虚拟机。以图1为例,第一可信执行环境中运行的可信应用其实是运行在第一可信执行环境内封装的虚拟机中,该虚拟机包括WASM虚拟机。

本说明书实施例所涉及的WASM虚拟机是一种基于二进制操作指令的栈式结构的虚拟机,仅支持运行以WASM语言编写的程序代码,WASM语言是除了JavaScript以外的另一种可以运行于网页的编程语言,WASM作为一种新的编码方式,可以在现代的网络浏览器中运行,它属于一种低级的类汇编代码,具有紧凑的二进制格式,能够直接操作CPU的指令代码,比如x86指令集上的汇编代码有指令集、寄存器、栈等等,因此可以以接近原生的性能运行,并且为诸如C/C+等高级语言提供一个编译目标,以便使得这些高级语言能够在浏览器上运行。WASM语言被设计为可以与JavaScript共存,因此二者能够同时运行、彼此兼容。

相关技术中,在TEE中运行WASM虚拟机程序是实现可信计算的主流方案,由于虚拟机程序理论上满足图灵完备,支持执行任意程序,因此可以满足对各类程序的可信计算需求,然而WASM虚拟机作为一种基于二进制操作指令的栈式结构的虚拟机,对于编程语言有较大限制,目前仅支持运行WASM代码,因此对于一些复杂的现有程序,例如机器学习模型训练和推断、批量数据处理等成熟的算法框架需要经过大量改造才能运行于WASM虚拟机中,具有较高的开发成本与开发难度。

在本说明书实施例中,第一可信计算节点通过获取针对库操作系统环境的远程认证报告以证明库操作系统可信的情况下,运行在第一可信计算节点部署的第一可信执行环境封装的WASM虚拟机中的可信应用与第二可信执行环境封装的库操作系统环境中的接口程序建立加密信道,从而使得可信应用能够安全、私密地调用库操作系统环境中无需进行改造或只需进行少量改造的现有程序,减少了为使现有成熟的算法框架运行在WASM虚拟机中以实现可信计算的开发成本。

可选的,在上述示例性实施例的基础上,所述调用请求包含程序标识和输入数据,以用于指示调用所述库操作系统环境中对应于所述程序标识的可信计算程序,并使所述输入数据被提供至所述程序标识对应的可信计算程序以完成计算。

具体而言,LibOS中的接口程序将接收到的调用请求密文进行解密得到调用请求后,会从该调用请求中读取得到针对该调用请求的程序标识和输入数据。其中,程序标识是指可信计算程序ID(Identity document,身份标识),接口程序维护有程序标识与可信计算程序的调用地址的对应关系,使得接口程序可以通过得到的程序标识来调用相应的可信计算程序;输入数据是为了针对该程序标识对应的可信计算程序所必要的输入参数进行赋值,在可信应用构造调用请求时,该输入数据的输入格式(包括数据类型和数据的排列顺序)就被整理成对应于程序标识对应的可信计算程序所能够识别的输入格式,从而可以在调用可信计算程序时顺利地将输入数据提供至可信计算程序以完成计算。接口程序会针对该调用请求给输入数据提供存储空间,将输入数据保存在加密文件系统的对应于该调用请求的上下文目录文件中,并创建针对于该程序标识的子进程执行相应的 handler脚本程序,handler脚本程序会对上下文目录文件进行解析和加工,从而获得针对该调用请求的输入数据,并进一步创建子进程调用程序标识对应的可信计算程序,同时将输入数据传入可信计算程序的子进程以完成计算。在另一实施例中,LibOS已经运行有各个可信计算程序的子进程,因此可以直接将输入数据传入已创建的可信计算程序子进程中以完成计算。

本说明书实施例通过在调用请求中加入程序标识和输入数据,从而使得库操作系统环境能够响应多种可信计算程序需求的机密计算服务,并按照可信应用提供的输入数据完成可信计算。

可选的,在上述示例性实施例的基础上,所述调用请求包含请求序号;所述调用请求对应的所述执行结果包含所述请求序号。

在本说明书实施例中,当可信应用构造调用请求时,会添加针对该调用请求的请求序号,并维护请求序号与执行结果的对应关系,从而使得LibOS中的接口程序将接收到的调用请求密文进行解密得到调用请求后,从该调用请求中读取得到针对该调用请求的请求序号,因此,当对应于该调用请求的可信计算程序完成计算并得到执行结果后,会在执行结果中封装该请求序号,使得接口程序将执行结果返回给可信应用后,可信应用能够通过执行结果中携带的请求序号获悉该执行结果对应于哪一个调用请求,使得可信应用更好地维护执行结果,也使得库操作系统环境能够提供基于调用请求的无歧义的机密计算服务,例如,若调用请求中仅包含程序标识,那么当同一可信应用多次请求同一程序标识对应的机密计算服务时,所返回的多个针对于同一可信计算程序的执行结果将变得无法区分,而通过在调用请求中设置请求序号,即可使得不同的调用请求可以通过调用方身份以及请求序号来进行区分。

可选的,在第一可信计算节点通过向接口程序发起远程认证挑战的方式获取远程认证报告的情况下,该远程认证挑战中可以包含程序标识,该程序标识即可信应用后续构造调用请求时携带在其中的程序标识,从而使得接口程序中的远程认证服务程序进行远程认证过程并生成自荐信息时,其中的第一哈希值不再会通过库操作系统环境中所含的所有程序代码进行哈希运算后得到,而是仅通过库操作系统环境中对应于该程序标识的可信计算程序的程序代码进行哈希运算后得到,因此整个远程认证过程完成后,协助第一可信计算节点获得的远程认证报告仅可以向可信应用证明所述程序标识对应的可信计算程序运行在可信执行环境中且未被篡改,但鉴于大多数场景下第一可信计算节点可以通过验证远程认证报告的签名信息以及被调用方公钥的真实性从而判断库操作系统环境是否运行在公认的第二可信执行环境中,从而已经保证了调用的安全性,而如果每次请求机密计算服务都需要验证第二可信执行环境封装的库操作系统环境中的全部程序的完整性(是否被篡改)不仅会浪费网络和计算资源,并且对于作为调用方的可信应用而言也没有必要性,因为调用方往往不会一次性调用全部的可信计算程序,因此本实施例通过仅验证可信应用准备调用的可信计算程序的完整性,从而在保证安全性的基础上减少资源浪费。

可选的,在第一可信计算节点通过向接口程序发起远程认证挑战的方式获取远程认证报告的情况下,在接口程序接收到第一可信计算节点发送的远程认证挑战后,向第一可信计算节点发送自身维护的库操作系统环境对应的被调用方公钥。

在本说明书实施例中,接口程序会基于远程认证挑战主动向第一可信计算节点发送自身维护的库操作系统环境对应的被调用方公钥,确保第一可信计算节点能够获得被调用方公钥用于加密调用请求,而无需通过其他方式预先获取被调用方公钥,并且由于被调用方公钥可能是动态的,因此在第一可信计算节点向库操作系统环境发起远程认证挑战从而准备请求机密计算服务时,由库操作系统环境中的接口程序主动返回被调用方公钥,能够保证被调用方公钥的实时有效性,即使后续还需要通过远程认证报告证明其真实性,也能最大限度地减少被调用方公钥出错的可能性,从而使可信应用获得更加便捷的机密计算服务。

可选的,所述库操作系统环境中部署有包含调度脚本的调度程序;

所述接口程序还用于根据所述调用请求执行所述调度程序,以通过所述调度脚本调用并执行对应于所述调用请求的可信计算程序。

在本说明书实施例中,接口程序指的是entrypoint程序,调度程序指的是handler脚本程序,接口程序与调度程序配合以调用对应于调用请求的可信计算程序的过程已经在前述实施例中有记载,详细过程可以参考前述实施例,此处不再赘述。

可选的,所述可信应用以及所述库操作系统环境均维护有所述库操作系统环境中各可信计算程序对应的输出格式;

所述执行结果由所述可信计算程序按照对应的输出格式进行输出,且所述执行结果被所述可信应用根据自身维护的所述输出格式进行解析。

本说明书实施例涉及的可信计算程序的输出格式包括可信计算程序的计算结果对应的数据类型和数据的排列顺序,由于可信应用作为调用方并不知晓也不关心其所需调用的可信计算程序的详细源代码,而只需要获得相应可信计算程序的执行结果即可,但如果执行结果是存在多个数据排列而成的结构体,可能会导致可信应用无法识别其接收到的执行结果,因此,为了使可信应用能够正确地解析可信计算程序的执行结果,可信应用需要掌握库操作系统中各可信计算程序的输出格式,基于此,当可信应用获取可信计算程序按照对应的输出格式输出执行结果后,便能够根据相应的所述输出格式进行解析,从而正确地识别和利用执行结果。

可选的,所述库操作系统环境维护有被调用方公私钥对;

所述被调用方公私钥对为静态公私钥对,所述静态公私钥对由所述库操作系统环境中程序代码的常量所定义,或由所述库操作系统环境在初始化阶段固定生成,或由密钥管理服务器固定分配;

或者,所述被调用方公私钥对为动态公私钥对,所述动态公私钥对由所述库操作系统环境在初始化阶段随机生成,或由密钥管理服务器随机分配。

本说明书实施例涉及的被调用方公私钥对包括被调用方公钥和被调用方私钥,这些公钥被所述库操作系统环境中的接口程序所维护,例如当entrypoint程序初始化时,其中的接口程序会生成随机的密钥对作为被调用方公私钥对,此时库操作系统环境所维护的被调用方公私钥对为动态公私钥对的属性,由于每次重启都会生成不同的被调用方公私钥对,因此第一可信计算节点即使曾经获得过该库操作系统环境对应的被调用方公钥,也可能需要重新进行远程认证过程获取当前最新的被调用方公钥,这样可以保证加密信道的安全性,防止网络中的重放攻击;又例如,库操作系统环境所维护的被调用方公私钥可以通过KMS(Key Management Service,密钥管理服务)服务器周期性地随机分配,此时的被调用方公私钥对同样也是动态公私钥对,这种情况下,调用方例如第一可信计算节点除了可以向库操作系统环境中的接口程序直接请求该被调用方公钥以外,也可以向KMS服务器直接请求。

同理,本说明书实施例涉及的被调用方公私钥也可以是静态的,它们是通过entrypoint程序初始化时固定生成,或由KMS服务器固定分配,或直接定义在库操作系统环境中的程序代码中,从而保证库操作系统环境维护的被调用方公私钥对不会发生变化,使得任何调用方一旦获取被调用方公钥后,后续便无需重复获取。需要指出的是,当被调用方公私钥对被作为常量定义在库操作系统环境中的程序代码中时,由于库操作系统环境中的程序需要保证其合法性、完整性,因此往往会对外公开,此时会导致被调用方私钥的暴露,所以在实际工程中,需要将被调用方私钥利用仅由库操作系统环境维护的对称密钥进行对称加密后以密文形式编写在程序代码中,或者,利用第二可信计算节点下CPU出厂时设置的公钥或其他仅由库操作系统环境维护的其他公钥进行非对称加密后以密文形式编写在程序代码中。又例如,在所述第二可信执行环境中存储有被调用方公私钥对,或者第二可信计算节点的加密存储器中以密文形式存储有被调用方公私钥对的情况下,库操作系统环境所维护的被调用方公私钥还能由库操作系统环境从可信执行环境中读取得到,或由所述库操作系统环境对从加密存储器读取到的被调用方公私钥对密文进行解密后得到。

可选的,所述可信计算程序的开发范式区别于开发直接运行于可信执行环境中的程序所使用的开发范式。

在本说明书实施例中,由于LibOS中包含的程序可以为任意编程语言编写的现有程序,从而使得现有程序借助LIbOS运行于TEE中,因此能够大大减少将现有程序移植到TEE环境中运行的改造成本。

可选的,所述第一可信计算节点和/或第二可信计算节点为区块链节点,其中,在第一可信计算节点和第二可信计算节点均为区块链节点的情况下,第一可信计算节点和第二可信计算节点为处于同一区块链网络的区块链节点,或者,第一可信计算节点和第二可信计算节点为处于不同区块链网络的区块链节点。

在本说明书实施例中,第一可信计算节点或第二可信计算节点可以为区块链节点,此时第一可信计算节点或第二可信计算节点上的执行逻辑将被封装在各自的智能合约中,从而使调用请求密文或执行结果密文可以被各自的智能合约在执行过程中写入对应的交易事件中,并通过收据形式记录在区块上,从而利用区块链网络中对程序调用过程中的阶段性结果进行共识存证。在第一可信计算节点和第二可信计算节点均为区块链节点的情况下,第一可信计算节点和第二可信计算节点为处于同一区块链网络的区块链节点,或者,第一可信计算节点和第二可信计算节点为处于不同区块链网络的区块链节点,本申请对此不做任何限制。

下面以图1中第一可信计算节点中的可信应用向第二可信计算节点请求提供机密计算服务的过程为例,对本说明书可信计算程序调用方案进行详细说明。请参考图4,本说明书涉及的可信计算程序调用方案可以基于第一可信计算节点和第二可信计算节点之间的相互配合实现,其中,第二可信计算节点部署的第二可信执行环境封装有库操作系统环境,且库操作系统环境中的可信计算程序为未做任何改造无法直接运行于可信执行环境中的现有程序,该方法可以包括以下步骤:

S401:第一可信计算节点中的可信应用根据自身的可信计算需求,构造调用请求,该调用请求中包含请求序号、程序标识和输入数据。其中,第一可信计算节点数据库中保存有可信计算程序与程序标识及其输入格式、输出格式的对应关系,该对应关系以key-value(键值对)形式存储,如表1所示。可信应用可以通过查找上述对应关系,确定可信计算需求相应的程序标识、输入数据以及输出数据。

例如,可信应用希望执行xgboost程序,因此会向数据库发出请求,并得到数据库返回xgboost程序对应的程序标识“2”以及输入格式“{(x1,y1),(x2,y2)…(xn,yn),M,L(Y,f(x)),R}”,其中,“(x1,y1),(x2,y2)…(xn,yn)”项为输入数据集,“M”为最大迭代次数,“L(Y,f(x))”为指定的损失函数,“R”为正则项系数,据此,可信应用构造出的调用请求形如:

“{220},{2},{(2.7,1),(-1.5,0)…(3.6,1)},{1000000},{L_m=\sum_{i=1}^{N}L(y_i,f_{m-1}(x_i)+h_m(x_i))+\gammaJ+\frac{\lambda}{2}\sum_{j=1}^{J}\omega_{mj}^2,0}}”。其中,前2项的“{220}”和“{2}”分别为请求序号和程序标识。

S402:可信应用根据调用请求中的程序标识,确定能够执行对应可信计算程序的可信计算节点。其中,可信应用能够调用数据库中维护的各个程序标识与能够执行相应可信计算程序的可信计算节点的对应关系,该对应关系同样也是以key-value形式存储,如表2所示:

在本说明书实施例中,由于应用程序发送的调用请求中携带的程序标识为“2”,因此可信应用能够确定出可信计算节点B能够执行程序标识“2”所对应的可信计算程序,即可信计算节点B为本实施例中的第二可信计算节点。

S403:第一可信计算节点中的可信应用首先在自身维护的路由表中查找对应于可信计算节点B的网络IP地址,并根据该网络IP地址向可信计算节点B中的接口程序发出远程认证挑战。

S404:可信计算节点B中的接口程序接收到可信应用远程认证挑战后,首先调用远程认证服务程序,生成自荐信息“{9e905e49,94cb3900,sigB}”,其中“9e905e49”是通过对库操作系统环境中包含了接口程序、调度程序和可信计算程序的全部程序代码进行哈希运算得到,“94cb3900”是通过对库操作系统环境维护的被调用方公钥进行哈希运算得到,“sigB”为可信计算节点B的数字签名(通过CPU出厂设置的私钥),然后将自荐信息通过接口程序中的通讯服务程序发送给IAS服务器,以使IAS服务器完成认证后,接收IAS服务器返回的远程认证报告“{{9e905e49,94cb3900,sigB},yes,sigIAS}”,其中“yes”代表IAS服务器成功认证该自荐信息的真实性,“sigIAS”为IAS服务器的数字签名,最后远程认证服务程序调用接口程序中的密钥管理程序获取IAS服务器的公钥,从而验证该远程认证报告是否可信,当对IAS服务器的数字签名验证成功后,即完成了整个远程认证过程,最终接口程序获得由IAS服务器颁发的远程认证报告。

S405:接口程序将远程认证报告以及被调用方公钥返回给第一可信计算节点。其中,被调用方公钥与被调用方私钥均通过密钥管理程序所维护,接口程序中的远程认证服务程序在获得远程认证报告后会进一步调用密钥管理程序获取被调用方公钥,最终将被调用方公钥和远程认证报告一起通过通讯服务程序返回给第一可信计算节点中的可信应用。

S406:可信应用根据远程认证报告确定可信计算节点B中的库操作系统环境可信的情况下,使用被调用方公钥对调用请求进行加密后得到调用请求密文。其中,可信应用在收到远程认证报告后,同样会使用IAS服务器的公钥去验证该远程认证报告的真实性,在该远程认证报告的真实性验证成功后,根据远程认证报告中对自荐信息的认证结果“yes”从而判断出该自荐信息确实是可信计算节点B所发出的,接着可信应用会根据数据库中存储的已公开的可信计算节点B中的库操作系统环境的全部程序代码计算出其哈希值,或者可信应用直接查找得到可信计算节点B中的库操作系统环境的全部程序代码对应的哈希值为“9e905e49”,同理根据接收得到的被调用方公钥计算出其哈希值为“94cb3900”,然后将计算得到的哈希值与自荐信息中的哈希值分别进行对比,结果对比结果均一致,因此可以证明可信计算节点B中的库操作系统环境中运行的全部程序均未被篡改,且可信计算节点B的被调用方公钥的确对应于可信计算节点B中的库操作系统环境,即能够证明可信计算节点B中的库操作系统环境可信,之后可信应用使用被验证可信的被调用方公钥对调用请求进行加密后得到调用请求密文:

“{14f545738408c088987a33e440237d4bd03756485d0b8f6f}”。

S407: 第一可信计算节点中的可信应用向可信计算节点B中的接口程序发送调用请求密文以及调用方公钥。

S408:可信计算节点B中的接口程序使用被调用方私钥对调用请求密文进行解密后得到调用请求。其中,接口程序通过调用加解密程序将通讯服务程序接收到的调用请求密文进行解密,加解密程序会调用密钥管理程序从而请求获得被调用方私钥,并使用被调用方私钥对调用请求密文进行解密后得到调用请求,然后将调用请求传入任务调度程序;另一方面,接口程序会直接调用密钥管理程序将接收到的调用方公钥进行保存。

S409:接口程序在加密文件系统中存储调用请求中包含的输入数据,并根据调用请求中包含的程序标识调用相应的调度脚本。任务调度程序在接收到调用请求后,会提取出调用请求中的输入数据和程序标识,在加密文件系统中创建专门的上下文目录文件用于存储输入数据,并创建子进程执行程序标识对应的调度脚本。其中,任务调度程序也维护有程序标识与调度脚本的对应关系,如表3所示:

根据前述描述可知,调用请求中的程序标识为“2”,因此任务调度程序会创建子进程调用Jobs(2)执行。

S410:调度脚本Jobs(2)对加密文件系统查找得到的输入数据进行解析加工后,将其作为输入参数并调用程序标识对应的可信计算程序完成计算。调度脚本Jobs(2)会在加密文件系统下对创建的用于存储输入数据的上下文目录文件进行解析和加工,从而整理得到输入数据,同时创建子进程,传入输入数据并执行Job(2)所定义的可信计算程序xgboost,需要指出的是,在本实施例中,虽然程序标识与调度脚本存在直接的对应关系,但由于每个调度脚本都本身都定义有对应的待调用可信计算程序,即每个调度脚本与可信计算程序存在对应关系,因此可以认为程序标识与可信计算程序之间也存在对应关系。

S411:调度脚本Jobs(2)获得可信计算程序的执行结果并将其返回给接口程序。Job(2)捕获xgboost的计算结果为一个“.h5”的模型文件,将该计算结果为xgboost按照约定的输出格式输出,Job(2)将计算结果返回给接口程序中的任务调度程序,任务调度程序将计算结果与调用请求封装后一同传回通讯服务程序。

S412:接口程序进一步将对应的请求序号封装进执行结果后,使用调用方公钥对执行结果进行加密后得到执行结果密文。通讯服务程序根据接收到的计算结果以及调用请求,进一步将调用请求中包含的请求序号与计算结果进行封装后得到执行结果“{.h5,220}”,接着,通讯服务程序调用加解密程序对执行结果进行加密,加解密程序会调用密钥管理程序从而请求获得调用方公钥,并使用调用方公钥对执行结果进行加密后得到执行结果密文,然后将执行结果密文返回给通讯服务程序。

S413:可信计算节点中的接口程序将执行结果密文返回给第一可信计算节点的可信应用。

S414:可信应用使用调用方私钥对执行结果密文进行解密后得到执行结果,可信应用根据解密得到的执行结果,解析得到包含的请求序号“220”,从而确定该执行结果对应的调用请求,同时根据约定的输出格式解析执行结果中xgboost的计算结果,从而实现一次对可信计算程序的调用过程。

上述说明书实施例详细地说明了一次完整的由第一可信计算节点中的应用程序发起,对第二可信计算节点中相应可信计算程序进行调用的调用过程,其中,可信计算程序作为现有程序运行于库操作系统环境中,可信应用和接口程序之间建立有加密信道,并且完成了远程认证过程,因此实现了基于现有程序的机密计算服务。

与前述方法的实施例相对应,本说明书还提供了装置、电子设备以及存储介质的实施例。

图5是一示例性实施例提供的一种设备的示意结构图。请参考图5,在硬件层面,该设备包括处理器502、内部总线504、网络接口506、内存508以及非易失性存储器510,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器502从非易失性存储器510中读取对应的计算机程序到内存508中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

如图6所示,图6是本说明书根据一示例性实施例示出的一种可信计算程序调用装置的框图,该装置可以应用于如图5所示的设备中,所述装置应用于第一可信计算节点,所述第一可信计算节点处部署的第一可信执行环境中运行有可信应用,所述装置包括:

报告获取单元601,用于获取针对库操作系统环境的远程认证报告,所述库操作系统环境被封装于第二可信执行环境;

请求发送单元602,用于在根据所述远程认证报告确定所述库操作系统环境可信的情况下,将来自所述可信应用的调用请求密文发送至所述库操作系统环境中的接口程序,以使所述接口程序对所述调用请求密文进行解密后得到调用请求,并调用所述库操作系统环境中对应于所述调用请求的可信计算程序;

结果提供单元603,用于将所述接口程序返回的执行结果密文提供至所述可信应用,以由所述可信应用解密得到执行结果,所述执行结果密文为针对所述可信计算程序输出的执行结果进行加密得到。

可选的,所述可信应用运行于所述第一可信执行环境内封装的虚拟机中,所述虚拟机包括:基于二进制操作指令的栈式结构的虚拟机。

可选的,

所述第二可信执行环境部署于第二可信计算节点;或者,

所述第二可信执行环境部署于所述第一可信计算节点;其中,所述第二可信执行环境与所述第一可信执行环境为同一可信执行环境,或所述第二可信执行环境区别于所述第一可信执行环境。

可选的,所述报告获取单元601具体用于:

接收所述接口程序发送的由认证服务器在完成对自荐信息的认证后返回的所述远程认证报告,所述自荐信息包含所述库操作系统环境中所含的程序代码对应的第一哈希值,以及所述库操作系统环境维护的被调用方公钥对应的第二哈希值;或者,

接收所述接口程序发送的所述自荐信息,向所述认证服务器发送所述自荐信息,并接收由所述认证服务器在完成对所述自荐信息的认证后返回的所述远程认证报告。

可选的,所述请求发送单元602在所述远程认证报告由所述认证服务器签名,且所述远程认证报告中的自荐信息满足下述条件的情况下,确定所述库操作系统环境可信:

所述自荐信息中的第一哈希值与第三哈希值对比一致,且所述自荐信息中的第二哈希值与第四哈希值对比一致;其中,所述第三哈希值为通过对公开的所述库操作系统环境中所含的程序代码进行哈希运算后得到,所述第四哈希值为通过对所述第一可信计算节点当前持有的对应于所述库操作系统环境的被调用方公钥进行哈希运算后得到。

可选的,所述调用请求包含程序标识和输入数据,以用于指示调用所述库操作系统环境中对应于所述程序标识的可信计算程序,并使所述输入数据被提供至所述程序标识对应的可信计算程序以完成计算。

可选的,所述调用请求包含请求序号;所述调用请求对应的所述执行结果包含所述请求序号。

可选的,所述库操作系统环境中部署有包含调度脚本的调度程序;

所述接口程序还用于根据所述调用请求执行所述调度程序,以通过所述调度脚本调用并执行所述调用请求对应的可信计算程序。

可选的,所述可信应用以及所述库操作系统环境均维护有所述库操作系统环境中各可信计算程序对应的输出格式;

所述执行结果由所述可信计算程序按照对应的输出格式进行输出,且所述执行结果被所述可信应用根据自身维护的所述输出格式进行解析。

可选的,

所述调用请求密文由所述可信应用使用被调用方公钥对所述调用请求进行加密后得到;或者,

所述调用请求密文由所述可信应用使用数字信封方式对所述调用请求进行加密后得到。

可选的,

所述执行结果密文由所述接口程序使用调用方公钥对所述可信计算程序的所述执行结果进行加密后得到;或者

在所述调用请求密文由所述可信应用使用数字信封方式对所述调用请求进行加密后得到的情况下,所述执行结果密文由所述接口程序使用所述数字信封所涉及的对称密钥对所述可信计算程序对应的执行结果进行加密后得到。

可选的,所述调用请求包含所述调用方公钥,以使所述接口程序通过所述调用方公钥对所述可信计算程序的所述执行结果进行加密。

可选的,所述可信计算程序的开发范式区别于开发直接运行于可信执行环境中的程序所使用的开发范式。

可选的,所述第一可信计算节点和/或第二可信计算节点为区块链节点,其中,在第一可信计算节点和第二可信计算节点均为区块链节点的情况下,第一可信计算节点和第二可信计算节点为处于同一区块链网络的区块链节点,或者,第一可信计算节点和第二可信计算节点为处于不同区块链网络的区块链节点。

相应的,本说明书还提供一种装置,所述装置包括有处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为实现上述全部方法实施例提供的可信计算程序调用方法的步骤。

相应的,本说明书还提供一种计算机可读存储介质,其上存储有可执行的指令;其中,该指令被处理器执行时,实现上述全部方法实施例提供的可信计算程序调用方法的步骤。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

在一个典型的配置中,计算机设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。

在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

相关技术
  • 一种可信计算程序调用方法、装置、电子设备及存储介质
  • 一种电子设备、可信应用调用方法、装置、设备及介质
技术分类

06120112900804