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

一种实现可信计算的方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 11:29:13


一种实现可信计算的方法、装置、电子设备及存储介质

技术领域

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

背景技术

实现可信计算要求计算程序运行在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最早是由Global Platform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。目前工业界十分关注TEE的方案,几乎所有主流的芯片和软件联盟都有自己的TEE解决方案,比如软件方面的TPM(Trusted Platform Module,可信赖平台模块)以及硬件方面的Intel SGX、ARMTrustzone(信任区)和AMD PSP(Platform Security Processor,平台安全处理器)等。

以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做自动的加解密,因此可以同时保护应用程序在内存和外存中数据的机密性和完整性。

图3是本说明书根据一示例性实施例示出的一种实现可信计算的方法流程图,该方法应用于图1所示的可信计算节点,该可信计算节点处部署的可信执行环境中封装有库操作系统环境,该方法包括以下步骤:

S301:接收调用方针对所述可信执行环境发送的远程认证挑战,并根据所述远程认证挑战协助所述调用方获取远程认证报告。

本说明书实施例涉及的调用方具体可以是图1所示的调用方节点中运行的外部服务程序,也可以是可信计算节点上运行的其他应用程序,本说明书对此不作任何限制。本说明书实施例中,可信计算节点在接收到调用方发送的远程认证挑战后,会被要求向调用方提供远程认证报告,用以向调用方证明可信计算节点上运行的库操作系统环境未被篡改且运行在可信执行环境下,以及被调用方公钥的真实性,因此,可信计算节点将通过远程认证过程从而获取远程认证报告。

本说明书实施例涉及的协助所述调用方获取远程认证报告,可以包括:生成自荐信息,所述自荐信息包含所述库操作系统环境所含的程序代码对应的第一哈希值,以及所述库操作系统环境维护的被调用方公钥对应的第二哈希值;

向所述调用方发送由认证服务器在完成对所述自荐信息的认证后返回的所述远程认证报告;或者,将所述自荐信息发送给所述调用方,以使所述调用方向所述认证服务器发送所述自荐信息,并接收由所述认证服务器在完成对所述自荐信息的认证后返回的所述远程认证报告。

具体而言,本说明书实施例涉及的远程认证报告产生于针对可信计算节点上的TEE的远程认证过程。在可信计算节点接收到调用方发送的远程认证挑战后,可信计算节点会将远程认证挑战传给LibOS中的接口程序,以使接口程序获取并响应该远程认证挑战,调用远程认证服务程序从而执行远程认证过程,具体而言,接口程序中的远程认证服务程序首先会提取出TEE中封装的LibOS中包含的全部程序代码,这些程序包含了LibOS中的接口程序、可信计算程序等,将这些程序代码通过哈希运算获得一个程序哈希值(第一哈希值),同样的,将LibOS维护的被调用方公钥也通过哈希运算获得一个公钥哈希值(第二哈希值),最后将程序哈希值与公钥哈希值封装得到自荐信息,该自荐信息在通过认证服务器的验证的情况下,会向可信计算节点提供该自荐信息的远程认证报告,该远程认证报告可以用于表明可信计算节点上的TEE可信任。例如,以Intel SGX技术为例, TEE为可信计算节点上创建的用于运行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:接收所述调用方发送的计算请求密文,所述计算请求密文在所述调用方根据所述远程认证报告确认所述可信计算节点可信的情况下发送。

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

S303:在所述库操作系统环境中对所述计算请求密文进行解密得到计算请求后,调用并执行所述库操作系统环境中对应于所述计算请求的可信计算程序。

本说明书实施例中,可信计算节点通过将从调用方发送来的计算请求密文传入库操作系统环境中的接口程序,接口程序再对计算请求密文解密后得到计算请求,根据计算请求调用相应的可信计算程序并执行。

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

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

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

本说明书的实施例中,在可信计算节点处部署的可信执行环境中封装有库操作系统环境,使现有的程序无需进行改造或只需进行少量改造就能够直接运行在可信执行环境中,并通过建立统一对外的加密输入输出接口以及远程认证模块,以保证可信计算节点的安全性,相当于利用库操作系统环境构建了一套通用应用框架,使得现有程序无需改造即可对外提供机密计算服务。

可选的,在上述示例性实施例的基础上,所述计算请求包含程序标识和输入数据;所述调用并执行所述库操作系统环境中所述计算请求对应的可信计算程序,包括:

创建对应于所述程序标识的可信计算程序的子进程;

将所述输入数据传入所述子进程,以由相应的可信计算程序完成计算。

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

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

可选的,在上述示例性实施例的基础上,所述计算请求包含请求序号;所述方法还包括:

将对应于所述计算请求的可信计算程序的执行结果发送至所述调用方,所述执行结果包含所述请求序号。

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

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

可选的,在可信计算节点接收到调用方发送的远程认证挑战后,向所述调用方发送所述被调用方公钥。

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

可选的,所述库操作系统环境包括:接口程序和包含调度脚本的调度程序;

其中,所述接口程序用于接收所述远程认证挑战,并协助所述调用方获取所述远程认证报告,以及对所述计算请求密文进行解密得到所述计算请求;以及

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

在本说明书实施例中,接口程序指的是entrypoint程序,调度程序指的是handler脚本程序,接口程序协助调用方获取远程认证报告的过程,以及接口程序与调度程序配合以执行对应于计算请求的可信计算程序的过程已经在前述实施例中有记载,详细过程可以参考前述实施例。接口程序除了能够对计算请求密文进行解密以外,还能够将可信计算程序的执行结果进行加密并发送至调用方。

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

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

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

本说明书实施例涉及的被调用方公私钥对包括被调用方公钥和被调用方私钥,这些公钥被所述库操作系统环境中的接口程序所维护,例如当entrypoint程序初始化时,其中的接口程序会生成随机的密钥对作为被调用方公私钥对,此时库操作系统环境所维护的被调用方公私钥对为动态公私钥对的属性,由于每次重启都会生成不同的被调用方公私钥对,因此调用方即使曾经得到过该库操作系统环境的被调用方公钥,也可能需要重新进行远程认证过程获取当前的被调用方公钥,这样可以保证加密信道的安全性,防止网络中的重放攻击;又例如,库操作系统环境所维护的被调用方公私钥可以通过KMS(KeyManagement 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”为正则项系数,据此,应用程序构造出的计算请求形如:

“{{192(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项的“{192(220)}”和“{2}”分别为请求编号和程序标识,请求序号中的“192”代表应用程序ID,“220”表示应用程序内部的请求序号。

S402:应用程序将计算请求发送至外部服务程序。

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

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

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

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

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

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

“{14f545738408c088987a33e440237d4bd03756485d0b8f6f}”。

S408: 调用方节点中的外部服务程序向可信计算节点中的接口程序发送计算请求密文以及调用方公钥。

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

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

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

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

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

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

S414:可信计算节点中的接口程序将执行结果密文返回给调用方节点的外部服务程序。

S415:外部服务程序使用调用方私钥对执行结果密文进行解密后得到执行结果。

S416:外部服务程序将执行结果返回给应用程序。外部服务程序根据解密得到的执行结果,解析得到包含的请求编号“192(220)”,根据“192”确定应该返回的应用程序ID,将执行结果返回给应用程序ID为“192”的应用程序,应用程序接收到执行结果后,通过根据其中包含的请求序号中的“220”确定该执行结果对应的计算请求,从而实现一次对可信计算程序的调用。

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

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

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

如图6所示,图6是本说明书根据一示例性实施例示出的一种实现可信计算的装置框图,该装置可以应用于如图5所示的设备中,以实现本说明书的技术方案,该装置应用于可信计算节点,该可信计算节点处部署的可信执行环境中封装有库操作系统环境,该装置包括以下单元:

远程认证单元601,用于接收调用方针对所述可信执行环境发送的远程认证挑战,并根据所述远程认证挑战协助所述调用方获取远程认证报告;

请求接收单元602,用于接收所述调用方发送的计算请求密文,所述计算请求密文在所述调用方根据所述远程认证报告确认所述可信计算节点可信的情况下发送;

程序调用单元603,用于在所述库操作系统环境中对所述计算请求密文进行解密得到计算请求后,调用并执行所述库操作系统环境中对应于所述计算请求的可信计算程序。

可选的,所述远程认证单元601具体用于:

生成自荐信息,所述自荐信息包含所述库操作系统环境所含的程序代码对应的第一哈希值,以及所述库操作系统环境维护的被调用方公钥对应的第二哈希值;

向所述调用方发送由认证服务器在完成对所述自荐信息的认证后返回的所述远程认证报告;或者,将所述自荐信息发送给所述调用方,以使所述调用方向所述认证服务器发送所述自荐信息,并接收由所述认证服务器在完成对所述自荐信息的认证后返回的所述远程认证报告。

可选的,所述计算请求包含程序标识和输入数据;所述程序调用单元603具体用于:

创建对应于所述程序标识的可信计算程序的子进程;

将所述输入数据传入所述子进程,以由相应的可信计算程序完成计算。

可选的,所述计算请求包含请求序号;所述装置还包括:

执行结果发送单元604,用于将对应于所述计算请求的可信计算程序的执行结果发送至所述调用方,所述执行结果包含所述请求序号。

可选的,所述库操作系统环境包括:接口程序和包含调度脚本的调度程序;

其中,所述接口程序用于接收所述远程认证挑战,并协助所述调用方获取所述远程认证报告,以及对所述计算请求密文进行解密得到所述计算请求;以及

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

可选的,

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

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

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

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

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

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

可选的,所述装置还包括:

执行结果加密单元605,用于对所述可信计算程序的执行结果进行加密后得到执行结果密文;

加密结果发送单元606,用于将所述执行结果密文发送至所述调用方,以使所述调用方对所述执行结果密文解密后得到所述执行结果。

可选的,所述执行结果加密单元605具体用于:

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

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

可选的,所述可信计算节点为区块链节点。

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

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

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

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

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

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

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

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

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

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

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

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

06120112941230