部署合约的方法及装置与流程

文档序号:20600668发布日期:2020-05-01 21:36阅读:268来源:国知局
部署合约的方法及装置与流程

本说明书一个或多个实施例涉及可验证计算技术领域,尤其涉及一种部署合约的方法及装置。



背景技术:

在相关技术中,针对各种场景下的隐私需求,一种方式是通过同态加密(homomorphicencryption)和零知识证明(zero-knowledgeproof)等加密技术实现隐私保护,但也随之带来了严重的性能损失。可信执行环境(trustedexecutionenvironment,tee)是另一种解决方式。tee可以起到硬件中的黑箱作用,在tee中执行的代码和数据操作系统层都无法偷窥,只有代码中预先定义的接口才能对其进行操作。在效率方面,由于tee的黑箱性质,在tee中进行运算的是明文数据,而不是同态加密中的复杂密码学运算,计算过程效率没有损失。



技术实现要素:

有鉴于此,本说明书一个或多个实施例提供一种部署合约的方法及装置,能够在链下环境内安全实现部署合约的操作。

为实现上述目的,本说明书一个或多个实施例提供技术方案如下:

根据本说明书一个或多个实施例的第一方面,提出了一种部署合约的方法,包括:

客户端获取针对链下隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下,将链下合约的字节码加密传输至所述链下隐私计算节点,由所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码并部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在所述链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

根据本说明书一个或多个实施例的第二方面,提出了一种部署合约的方法,包括:

链下隐私计算节点接收源自客户端的挑战,向所述客户端提供远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

所述链下隐私计算节点接收所述客户端加密传输的链下合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下发送;

所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码,并对所述字节码进行部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在所述链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

根据本说明书一个或多个实施例的第三方面,提出了一种部署合约的方法,包括:

区块链节点接收客户端发起的挑战交易,并向所述客户端返回链下隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

所述区块链节点接收所述客户端发起的经过加密的链下合约部署交易,在所述链上可信执行环境中解密得到所述链下合约部署交易所含的字节码密文,所述字节码密文由所述客户端对链下合约的字节码进行加密得到,所述链下合约部署交易由所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下发起;

所述区块链节点通过预言机机制将所述字节码密文传输至所述链下隐私计算节点,由所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码并部署;其中,在所述区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在所述链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

根据本说明书一个或多个实施例的第四方面,提出了一种部署合约的方法,包括:

链下隐私计算集群的控制节点接收客户端发起的挑战,从所述链下隐私计算集群内选取一链下隐私计算节点,并向所述客户端提供被选取的链下隐私计算节点对应的远程证明报告,所述远程证明报告由认证服务器对所述被选取的链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述被选取的链下隐私计算节点上创建的链下可信执行环境相关;其中,所述链下隐私计算集群内的所有链下隐私计算节点的软硬件配置一致;

所述控制节点接收所述客户端加密传输的链下合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述链下隐私计算集群内的链下隐私计算节点可信的情况下发送;

所述控制节点将收到的字节码密文分别转发至所述链下隐私计算集群内的所有链下隐私计算节点,所述字节码密文可由各个链下隐私计算节点分别在自身的链下可信执行环境中解密得到所述字节码,并对所述字节码进行部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在任一链下隐私计算节点处的链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

根据本说明书一个或多个实施例的第五方面,提出了一种部署合约的方法,包括:

客户端获取针对隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述隐私计算节点上创建的可信执行环境相关;

所述客户端在根据所述远程证明报告确定所述隐私计算节点可信的情况下,将智能合约的字节码加密传输至所述隐私计算节点,由所述隐私计算节点在所述可信执行环境中解密得到所述字节码并部署。

根据本说明书一个或多个实施例的第六方面,提出了一种部署合约的方法,包括:

隐私计算节点接收源自客户端的挑战,向所述客户端提供远程证明报告,所述远程证明报告由认证服务器对所述隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述隐私计算节点上创建的可信执行环境相关;

所述隐私计算节点接收所述客户端加密传输的智能合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述隐私计算节点可信的情况下发送;

所述隐私计算节点在所述可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

根据本说明书一个或多个实施例的第七方面,提出了一种部署合约的方法,包括:

隐私计算集群的控制节点接收客户端发起的挑战,从所述隐私计算集群内选取一隐私计算节点,并向所述客户端提供被选取的隐私计算节点对应的远程证明报告,所述远程证明报告由认证服务器对所述被选取的隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述被选取的隐私计算节点上创建的可信执行环境相关;其中,所述隐私计算集群内的所有隐私计算节点的软硬件配置一致;

所述控制节点接收所述客户端加密传输的智能合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述隐私计算集群内的隐私计算节点可信的情况下发送;

所述控制节点将收到的字节码密文分别转发至所述隐私计算集群内的所有隐私计算节点,所述字节码密文可由各个隐私计算节点分别在自身的可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

根据本说明书一个或多个实施例的第八方面,提出了一种部署合约的装置,包括:

验证单元,使客户端获取针对链下隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

部署单元,使所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下,将链下合约的字节码加密传输至所述链下隐私计算节点,由所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码并部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在所述链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

根据本说明书一个或多个实施例的第九方面,提出了一种部署合约的装置,包括:

报告提供单元,使链下隐私计算节点接收源自客户端的挑战,向所述客户端提供远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

合约接收单元,使所述链下隐私计算节点接收所述客户端加密传输的链下合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下发送;

合约部署单元,使所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码,并对所述字节码进行部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在所述链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

根据本说明书一个或多个实施例的第十方面,提出了一种部署合约的装置,包括:

报告传输单元,使区块链节点接收客户端发起的挑战交易,并向所述客户端返回链下隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

合约获取单元,使所述区块链节点接收所述客户端发起的经过加密的链下合约部署交易,在所述链上可信执行环境中解密得到所述链下合约部署交易所含的字节码密文,所述字节码密文由所述客户端对链下合约的字节码进行加密得到,所述链下合约部署交易由所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下发起;

合约传输单元,使所述区块链节点通过预言机机制将所述字节码密文传输至所述链下隐私计算节点,由所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码并部署;其中,在所述区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在所述链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

根据本说明书一个或多个实施例的第十一方面,提出了一种部署合约的装置,包括:

报告提供单元,使链下隐私计算集群的控制节点接收客户端发起的挑战,从所述链下隐私计算集群内选取一链下隐私计算节点,并向所述客户端提供被选取的链下隐私计算节点对应的远程证明报告,所述远程证明报告由认证服务器对所述被选取的链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述被选取的链下隐私计算节点上创建的链下可信执行环境相关;其中,所述链下隐私计算集群内的所有链下隐私计算节点的软硬件配置一致;

合约接收单元,使所述控制节点接收所述客户端加密传输的链下合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述链下隐私计算集群内的链下隐私计算节点可信的情况下发送;

合约转发单元,使所述控制节点将收到的字节码密文分别转发至所述链下隐私计算集群内的所有链下隐私计算节点,所述字节码密文可由各个链下隐私计算节点分别在自身的链下可信执行环境中解密得到所述字节码,并对所述字节码进行部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在任一链下隐私计算节点处的链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

根据本说明书一个或多个实施例的第十二方面,提出了一种部署合约的装置,包括:

验证单元,使客户端获取针对隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述隐私计算节点上创建的可信执行环境相关;

部署单元,使所述客户端在根据所述远程证明报告确定所述隐私计算节点可信的情况下,将智能合约的字节码加密传输至所述隐私计算节点,由所述隐私计算节点在所述可信执行环境中解密得到所述字节码并部署。

根据本说明书一个或多个实施例的第十三方面,提出了一种部署合约的装置,包括:

报告提供单元,使隐私计算节点接收源自客户端的挑战,向所述客户端提供远程证明报告,所述远程证明报告由认证服务器对所述隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述隐私计算节点上创建的可信执行环境相关;

合约接收单元,使所述隐私计算节点接收所述客户端加密传输的智能合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述隐私计算节点可信的情况下发送;

合约部署单元,使所述隐私计算节点在所述可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

根据本说明书一个或多个实施例的第十四方面,提出了一种部署合约的装置,包括:

报告提供单元,使隐私计算集群的控制节点接收客户端发起的挑战,从所述隐私计算集群内选取一隐私计算节点,并向所述客户端提供被选取的隐私计算节点对应的远程证明报告,所述远程证明报告由认证服务器对所述被选取的隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述被选取的隐私计算节点上创建的可信执行环境相关;其中,所述隐私计算集群内的所有隐私计算节点的软硬件配置一致;

合约接收单元,使所述控制节点接收所述客户端加密传输的智能合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述隐私计算集群内的隐私计算节点可信的情况下发送;

合约转发单元,使所述控制节点将收到的字节码密文分别转发至所述隐私计算集群内的所有隐私计算节点,所述字节码密文可由各个隐私计算节点分别在自身的可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

根据本说明书一个或多个实施例的第十五方面,提出了一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器通过运行所述可执行指令以实现如第一方面、第二方面、第三方面、第四方面、第五方面、第六方面或第七方面所述的方法。

根据本说明书一个或多个实施例的第十六方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面、第二方面、第三方面、第四方面、第五方面、第六方面或第七方面所述方法的步骤。

综上所述,本说明书通过在链下隐私计算节点上实现链下可信执行环境,使得链下隐私计算节点可以提供安全可靠的运行环境,并且该链下可信执行环境的可靠性可以通过远程证明予以验证,从而能够将合约安全可靠地部署于该链下可信执行环境内,确保链下隐私计算节点安全并且忠实地完成链下隐私计算。

附图说明

图1是一示例性实施例提供的一种客户端侧的部署合约的方法的流程图。

图2是一示例性实施例提供的一种实现远程证明的场景示意图。

图3是一示例性实施例提供的另一种实现远程证明的场景示意图。

图4是一示例性实施例提供的一种部署链下合约的场景示意图。

图5是一示例性实施例提供的另一种部署链下合约的场景示意图。

图6是一示例性实施例提供的一种链下隐私计算节点之间形成集群身份的示意图。

图7是一示例性实施例提供的一种调用链下合约的场景示意图。

图8是一示例性实施例提供的一种链下隐私计算节点侧的部署合约的方法的流程图。

图9是一示例性实施例提供的一种区块链节点侧的部署合约的方法的流程图。

图10是一示例性实施例提供的一种控制节点侧的部署合约的方法的流程图。

图11是一示例性实施例提供的另一种客户端侧的链下合约的部署方法的流程图。

图12是一示例性实施例提供的另一种链下隐私计算节点侧的部署合约的方法的流程图。

图13是一示例性实施例提供的另一种控制节点侧的部署合约的方法的流程图。

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

图15是一示例性实施例提供的一种客户端侧的部署合约的装置的框图。

图16是一示例性实施例提供的一种链下隐私计算节点侧的部署合约的装置的框图。

图17是一示例性实施例提供的一种区块链节点侧的部署合约的装置的框图。

图18是一示例性实施例提供的一种控制节点侧的部署合约的装置的框图。

图19是一示例性实施例提供的另一种客户端侧的部署合约的装置的框图。

图20是一示例性实施例提供的另一种链下隐私计算节点侧的部署合约的装置的框图。

图21是一示例性实施例提供的另一种控制节点侧的部署合约的装置的框图。

具体实施方式

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

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。

区块链一般被划分为三种类型:公有链(publicblockchain),私有链(privateblockchain)和联盟链(consortiumblockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等,且各参与者(即节点)可自由加入以及退出网络。私有链则相反,该网络的数据写入权限由某个组织或者机构控制,数据读取权限受组织规定;简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少,因而私有链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织,参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。

在区块链网络中,通过向区块链节点提交相应的区块链交易(简称交易),并由区块链节点执行区块链交易,以实现相应的操作目的。对于上述任何类型的区块链而言,区块链节点均可以通过创建tee,并将tee实现为区块链交易的安全执行环境。tee是基于cpu硬件的安全扩展,且与外部完全隔离的可信执行环境。tee最早是由globalplatform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。目前工业界十分关注tee的方案,几乎所有主流的芯片和软件联盟都有自己的tee解决方案,比如软件方面的tpm(trustedplatformmodule,可信赖平台模块)以及硬件方面的intelsgx(softwareguardextensions,软件保护扩展)、armtrustzone(信任区)和amdpsp(platformsecurityprocessor,平台安全处理器)等。

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

基于区块链网络的去中心化架构,使得区块链上的每笔区块链交易都需要在区块链网络内的所有区块链节点上执行,以确保每个区块链节点所维护的区块链账本数据一致。如果交易逻辑较为简单,比如以比特币为例,区块链交易仅用于实现转账操作,此时即便区块链交易需要在所有区块链节点都执行,也不会导致过多的资源消耗。但是,如果区块链提供了智能合约的功能,而区块链交易调用了智能合约,那么情况可能大不相同。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约,智能合约可以通过代码的形式定义。

以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(evm),每个以太坊节点都可以运行evm。evm是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在evm上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。智能合约分为部署和调用两个阶段。

在部署阶段,用户将一个包含创建智能合约信息的交易发送至以太坊网络,该交易的data字段包含智能合约的代码(如字节码),该交易的to字段为空。以太坊网络中的各个节点分别通过evm执行这个交易,并生成对应的合约实例。在节点间通过共识机制达成一致后,上述交易对应的智能合约创建成功,区块链上出现一个与该智能合约对应的合约账户,该合约账户拥有一个特定的合约地址,合约代码(即智能合约的代码)或合约代码的哈希值保存在该合约账户中,该合约代码用于控制相应的智能合约的行为。

在调用阶段,用户(可以与部署智能合约的用户相同或不同)将一个用于调用智能合约的交易发送到以太坊网络,该交易的from字段是该用户对应的外部账户的地址,to字段是所需调用的智能合约的合约地址,data字段包含调用智能合约的方法和参数。在节点间通过共识机制达成一致后,上述交易声明调用的智能合约以规定的方式在以太坊网络的每个节点上独立执行,所有执行记录和数据都保存在区块链上,所以当交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。

如前所述,evm是一个图灵完备的虚拟机;类似地,其他区块链也可以采用其他类型的虚拟机,比如wasm(webassembly)虚拟机等。总之,当交易调用的智能合约用于实现相对复杂的逻辑时,节点通过虚拟机执行该智能合约的代码的过程会消耗相对较多的计算资源,并且由于区块链网络内的所有节点都需要执行该智能合约的代码,因此随着节点数量的增加会导致计算资源的消耗量成倍增长。因此,虽然结合tee技术可以相对减少单个区块链节点的资源消耗、加快交易执行效率,但就整个区块链网络而言,仍然会造成极大的资源消耗和浪费。

为此,本说明书提出了在链下部署隐私计算节点(即链下隐私计算节点),可以将原本需要在所有区块链节点上执行的计算操作转移至链下隐私计算节点处执行,区块链节点只需要从链下隐私计算节点处获取计算结果并基于该计算结果更新区块链账本数据即可,并且可以基于可验证计算(verifiablecomputation)技术证明上述的计算结果确实是在可信执行环境内按照预期执行,从而在确保可靠性的同时,极大地降低了链上的资源消耗。

如前所述,通过在区块链节点部署智能合约,使得区块链节点可以执行该智能合约的代码以实现相应的计算需求;类似地,可以将用于执行计算任务的代码部署在链下隐私计算节点处,使得链下隐私计算节点可以执行代码以实现相应的计算需求。为了便于理解,本说明书中将部署于区块链节点的合约称为链上合约、将部署于链下隐私计算节点的合约称为链下合约;当然,无论是链上合约还是链下合约,其本质都是一段可以在虚拟机内执行的代码。

图1是一示例性实施例提供的一种客户端侧的部署合约的方法的流程图。如图1所示,该方法可以包括以下步骤:

步骤102,客户端获取针对链下隐私计算节点的远程证明报告。

在链下隐私计算节点上创建的链下tee,与前文所述的区块链节点上创建的链上tee相似,都是基于cpu硬件实现的与外部完全隔离的可信执行环境。链下隐私计算节点通过创建链下tee,可以通过该链下tee实现对链下合约的部署操作以及部署后的调用执行操作,并确保操作过程中的数据安全和隐私保护。

远程证明报告产生于针对链下隐私计算节点上的链下tee的远程证明过程。远程证明报告由认证服务器对链下隐私计算节点产生的自荐信息进行验证后生成,该自荐信息与链下隐私计算节点上创建的链下tee相关。链下隐私计算节点通过产生与链下tee相关的自荐信息,并由认证服务器对该自荐信息进行验证后产生远程证明报告,使得远程证明报告可以用于表明链下隐私计算节点上的链下tee可信任。例如,以intelsgx技术为例,链下tee为链下隐私计算节点上创建的用于实现链下隐私计算的enclave,远程证明过程还涉及到链下隐私计算节点上另一个特殊的enclave,即quotingenclave(简称qe),qe是由英特尔提供并签名的架构型enclave(architecturalenclave)。上述enclave首先需要生成一用于本地认证的report(报告)结构,并由qe基于该report结构验证该enclave是否与自身处于同一平台上,而后由qe将该report结构封装为一结构体quote(即自荐信息),并使用epid(enhancedprivacyidentification)密钥进行签名。epid密钥不仅代表链下隐私计算节点这一平台,还代表链下隐私计算节点的底层硬件的可信度,还可以绑定处理器固件的版本等信息,并且只有qe才能访问到epid密钥,以用于对上述的结构体quote进行签名。在sgx技术中,上述的认证服务器可以为英特尔公司提供的ias(intelattestationservice)服务器,链下隐私计算节点向ias服务器发送经过签名的上述结构体quote,使得ias服务器可以对签名进行验证,并向链下隐私计算节点返回相应的远程证明报告。

客户端可以向链下隐私计算节点发起挑战,并接收链下隐私计算节点返回的远程证明报告。例如,客户端可以向链下隐私计算节点发起链下挑战,即发起挑战的过程与区块链网络无关,这样可以跳过区块链节点之间的共识过程、减少链上链下的交互操作,使得客户端向链下隐私计算节点的挑战具有更高的操作效率。再例如,客户端可以采用链上挑战的形式,比如客户端可以向区块链节点提交挑战交易,该挑战交易所含的挑战信息可由区块链节点通过预言机机制传输至链下隐私计算节点,且该挑战信息用于向链下隐私计算节点发起挑战。

以如图2所示的场景为例。一种情况下,客户端21可以通过链下渠道直接向链下隐私计算节点22发起挑战,即客户端21向链下隐私计算节点22发起链下挑战。另一种情况下,客户端21可以通过区块链网络23向链下隐私计算节点22发起挑战,即客户端21向链下隐私计算节点22发起链上挑战。链上挑战的发起过程可以包括三个步骤:步骤①,客户端21向区块链网络23提交一笔用于发起挑战的交易,比如称之为挑战交易,该挑战交易可由区块链网络23内的某一节点23n接收和执行;步骤②,节点23n调用预先部署的预言机智能合约(简称预言机合约),该预言机合约可以将上述挑战交易所含的挑战信息传递至链下的预言机服务器24,比如预言机合约可以产生包含该挑战信息的事件,而预言机服务器24可以通过监听预言机合约产生的事件,从而获取上述的挑战信息;步骤③,预言机服务器24将挑战信息通过链下渠道发送至链下隐私计算节点22。

客户端21通过链上渠道向链下隐私计算节点22发起挑战时,涉及到区块链网络23与链下隐私计算节点22之间的数据交互,即链上、链下的数据交互,该数据交互过程可以由预言机合约与预言机服务器24通过上述的步骤②配合实现,该预言机合约与预言机服务器24之间的配合机制即为预言机机制。其中,客户端21向节点23n提交的交易应当直接或间接调用上述的预言机合约,以触发预言机机制。其中,如果将预言机合约的合约地址填入该交易的to字段,表明该交易直接调用了预言机合约;如果将某一链上合约的合约地址填入该交易的to字段,且该链上合约调用了预言机合约,表明该交易间接调用了预言机合约。链上合约调用预言机合约,一种情况下可以是在链上合约的字节码中预先写入了预言机合约的合约地址,另一种情况下可以是将预言机合约的合约地址作为调用该链上合约时的入参,并将该入参填入上述交易的data字段。除了将挑战信息或其他数据从链上传递至链下,预言机机制还可以将数据从链下传递至链上,具体可由预言机服务器24将链下数据传递至预言机合约,然后由预言机合约将链下数据传递至数据需求方,比如这里的链下数据可以包括远程证明报告或者调用链下合约所产生的隐私计算结果等。在上述的预言机机制中,将数据从链上传递至链下可以视为“请求”过程,将数据从链下传递至链上可以视为“响应”过程,这两个过程通常成对出现。

无论是链下挑战或链上挑战,链下隐私计算节点在收到客户端发起的挑战后,均可以临时触发如前文所述的远程证明过程并产生相应的远程证明报告,然后将远程证明报告反馈至客户端。或者,链下隐私计算节点在收到客户端发起的挑战时,如果本地已经存在预先生成的远程证明报告,那么链下隐私计算节点将该远程证明报告提供至客户端,而无需临时触发远程证明过程。其中,链下隐私计算节点本地存在的远程证明报告,可以是该链下隐私计算节点响应于除客户端之外的其他挑战者的挑战而触发产生,比如该其他挑战者可以包括其他客户端、链下隐私计算节点所处的链下隐私计算集群中的控制节点、kms服务器等,本说明书并不对此进行限制。因此,链下隐私计算节点在收到客户端发起的挑战后,可以首先查看本地是否存在先前生成的远程证明报告,如果存在则将该远程证明报告反馈至客户端,否则临时触发远程证明过程。其中,远程证明报告可以具有一定的时限性,比如30分钟或其他时长,超时的远程证明报告可以被客户端认定为失效,链下隐私计算节点也可以主动清除已失效的远程证明报告以避免反馈至客户端。

客户端向链下隐私计算节点发起挑战的过程中,或者链下隐私计算节点向客户端反馈远程证明报告的过程中,涉及到设备之间的数据交互。以图2所示的场景为例,所涉及的数据交互可以包括:客户端21与链下隐私计算节点22之间的数据交互(客户端21向链下隐私计算节点22发起链下挑战,链下隐私计算节点22向客户端21返回远程证明报告)、客户端21与节点23n之间的数据交互(客户端21向节点23n发送挑战交易、节点23n向客户端21返回远程证明报告)、节点23n与预言机服务器24之间的数据交互(预言机服务器24从节点23n读取挑战信息、预言机服务器24向节点23n反馈远程证明报告)、预言机服务器24与链下隐私计算节点22之间的数据交互(预言机服务器24向链下隐私计算节点22发送挑战信息、链下隐私计算节点22向预言机服务器24返回远程证明报告)等。在实现上述任一数据交互的过程中,数据发送方与数据接收方之间传输的数据存在泄漏的可能性,并且节点23n会将挑战交易上链导致该挑战交易被公开,因此可以通过对数据进行加密传输的方式,避免造成信息泄露。

以客户端21向节点23n提交挑战交易为例。通过挑战交易向链下隐私计算节点22发起链上挑战,使得节点23n可以将客户端21提交的挑战交易与其他节点进行共识后上链,对客户端21的挑战行为进行存证。但是,如果客户端21并不希望自己的挑战行为被其他用户随意获知,可以对挑战交易进行隐私保护。客户端21可以对挑战交易进行加密,而节点23n可以接收经过加密的挑战交易,这样可以确保传输过程中不会造成挑战交易的内容泄露。节点23n处可以部署链上tee,并且节点23n可以将经过加密的挑战交易读入该链上tee后,在链上tee内解密,可以确保解密得到的挑战交易仅存在于链上tee内、不会外泄。节点23n直接将经过加密的挑战交易上链,并且通过对加密数据的查看权限进行管理,可以限制能够查看挑战交易的用户,而其他用户直接查看区块链数据时仅能够获得加密后的挑战交易。实际上,节点23n可以确保需要隐私保护的数据仅在链上tee内能够被解密为明文形式,一旦离开链上tee均采用密文形式。

针对挑战交易的加密传输,可以采用对称加密或非对称加密的形式。当采用对称加密时,客户端21和节点23n分别维护有相同的对称密钥,比如该对称密钥可由客户端21与节点23n通过诸如dh(diffie-hellman)或ecdh(ellipticcurvediffie–hellman)等算法协商得到,或者由kms(keymanagementservice,密钥管理服务)服务器分发至客户端21和节点23n,本说明书并不限制密钥来源。当密钥由kms服务器分发时,kms服务器可以通过远程证明的方式确定节点23n处的链上tee可信,然后将密钥加密传输至该链上tee内,远程证明的方式与客户端21对链下隐私计算节点22的远程证明过程类似,此处暂不赘述。那么,客户端21可以通过上述的对称密钥对挑战交易进行加密,而节点23n将对称密钥维护于链上tee中,因而将经过加密的挑战交易读入链上tee内,并通过该对称密钥执行解密操作得到上述的挑战交易。对称加密采用的加密算法,例如可以包括des算法,3des算法,tdea算法,blowfish算法,rc5算法,idea算法等。

当采用非对称加密时,节点23n维护有非对称密钥的私钥,比如称之为节点私钥,而客户端21可以获得该节点私钥对应的节点公钥。非对称密钥可由节点23n在链上tee内生成,或者由kms服务器分发至该节点23n,本说明书并不限制密钥来源。类似地,当密钥由kms服务器分发时,kms服务器可以通过远程证明的方式确定节点23n处的链上tee可信,然后将密钥加密传输至该链上tee内。那么,客户端21可以通过节点公钥对挑战交易进行加密,而节点23n将节点私钥维护于链上tee中,因而将经过加密的挑战交易读入链上tee内,并通过节点私钥执行解密操作得到上述的挑战交易。非对称加密采用的非对称加密算法,例如可以包括rsa、elgamal、背包算法、rabin、d-h、ecc(椭圆曲线加密算法)等。

针对挑战交易的加密传输,还可以采用对称加密与非对称加密相结合的形式。客户端21可以维护一对称密钥,比如该对称密钥可由客户端21随机生成,且客户端21可以获得上述非对称密钥中的公钥。客户端21可以通过对称密钥对挑战交易进行加密、得到加密后挑战交易,并通过非对称密钥加密该对称密钥、得到加密后密钥,然后客户端21同时将加密后挑战交易与加密后密钥传输至节点23n。相应的,节点23n将加密后挑战交易与加密后密钥读入链上tee内,首先通过节点私钥对加密后密钥进行解密、得到对称密钥,然后通过对称密钥对加密后挑战交易进行解密。相比较而言,对称加密的加解密效率相对更高、但安全性相对较低,而非对称加密的加解密效率相对较低、但安全性相对更高,因此基于对称加密与非对称加密相结合的形式,可以兼顾加解密效率与安全性。

类似地,在其他数据交互的过程中,通过使得数据发送方与数据接收方之间维护相同的对称密钥,或者使得数据发送方维护有非对称密钥的公钥、数据接收方维护有非对称密钥的私钥,或者结合对称加密与非对称加密的形式,可以实现任意的数据发送方与数据接收方之间的数据加密传输,此处不再赘述。

链下隐私计算节点可能属于链下隐私计算集群,该链下隐私计算集群包含多个链下隐私计算节点。如果各个链下隐私计算节点之间完全独立,那么客户端与单个链下隐私计算节点之间的交互过程可以参考上文所述的实施例。而另一种方式下,链下隐私计算集群可以包含一控制节点,并由该控制节点对集群内的所有链下隐私计算节点进行统一管理。比如,客户端可以向控制节点发起挑战,并接收控制节点返回的上述链下隐私计算节点的远程证明报告。与前述实施例相类似的,客户端可以向控制节点发起链下挑战,或者客户端可以向区块链节点提交挑战交易,该挑战交易所含的挑战信息由区块链节点通过预言机机制传输至控制节点,使得控制节点向客户端返回链下隐私计算节点的远程证明报告。

以如图3所示的场景为例。一种情况下,客户端31可以通过链下渠道直接向控制节点32发起挑战,即客户端31向控制节点32发起链下挑战。另一种情况下,客户端31可以通过区块链网络33向控制节点32发起挑战,即客户端31向控制节点32发起链上挑战。链上挑战的发起过程可以包括三个步骤:步骤①,客户端31向区块链网络33提交一笔用于发起挑战的交易,比如称之为挑战交易,该挑战交易可由区块链网络33内的某一节点33n接收和执行;步骤②,节点33n调用预先部署的预言机智能合约(简称预言机合约),该预言机合约可以将上述挑战交易所含的挑战信息传递至链下的预言机服务器34,比如预言机合约可以产生包含该挑战信息的事件,而预言机服务器34可以通过监听预言机合约产生的事件,从而获取上述的挑战信息;步骤③,预言机服务器34将挑战信息通过链下渠道发送至控制节点32。

客户端31向控制节点32发起挑战时,可以将挑战目标设定为控制节点32所处集群内的某一链下隐私计算节点,比如链下隐私计算节点32n,那么控制节点32会根据收到的挑战,向客户端31返回链下隐私计算节点32n对应的远程证明报告。客户端31也可以不设定挑战目标,那么控制节点32收到挑战后,从链下隐私计算集群中进行选择,比如在选取了链下隐私计算节点32n的情况下,向客户端31返回该链下隐私计算节点32n对应的远程证明报告。

其中,控制节点32在收到客户端31发起的挑战后,可以将该挑战转发至链下隐私计算节点32n,使得链下隐私计算节点32n临时触发远程证明过程,以产生相应的远程证明报告,然后通过控制节点32反馈至客户端31。或者,控制节点32在收到客户端31发起的挑战后,可以将该挑战转发至链下隐私计算节点32n,而如果链下隐私计算节点32n上已经存在预先生成的远程证明报告,那么链下隐私计算节点32n将该远程证明报告返回控制节点32,由控制节点32提供至客户端31,而无需临时触发远程证明过程。或者,控制节点32在收到客户端31发起的挑战后,如果本地已经存在预先生成的对应于链下隐私计算节点32n的远程证明报告,那么链下隐私计算节点32n将该远程证明报告提供至客户端31,而无需向链下隐私计算节点32n转发挑战,也无需链下隐私计算节点32n因此临时触发远程证明过程。其中,链下隐私计算节点32n本地存在的远程证明报告,可以是该链下隐私计算节点32n响应于除客户端31之外的其他挑战者的挑战而触发产生,比如该其他挑战者可以包括其他客户端、控制节点32、kms服务器等,本说明书并不对此进行限制。而链下隐私计算节点32n通过控制节点32将远程证明报告提供至上述的其他挑战者时,控制节点32可以对收到的远程证明报告进行缓存。因此,控制节点32在收到客户端31发起的挑战后,可以首先查看查看本地是否存在先前获得的远程证明报告,如果存在则将该远程证明报告反馈至客户端31,否则将挑战转发至链下隐私计算节点32n;以及,链下隐私计算节点32n在收到挑战后,可以首先查看查看本地是否存在先前获得的远程证明报告,如果存在则将该远程证明报告反馈至控制节点32,否则临时触发远程证明过程。其中,远程证明报告可以具有一定的时限性,比如30分钟或其他时长,超时的远程证明报告可以被客户端31认定为失效,控制节点32或链下隐私计算节点32n也可以主动清除已失效的远程证明报告以避免反馈至客户端31。

在图3所示的实施例中,客户端31与控制节点32之间、控制节点32与链下隐私计算节点32n之间、客户端31与节点33n之间、节点33n与预言机服务器34之间、预言机服务器34与控制节点32之间等,均可能产生数据交互。对于任意的数据交互过程,均可以采用如前文所述的加密数据传输方案,包括对称加密、非对称加密或两者结合的形式,此处不再赘述。

步骤104,所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下,将链下合约的字节码加密传输至所述链下隐私计算节点,由所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码并部署。

客户端在获得链下隐私计算节点的远程证明报告之后,可以根据该远程证明报告来验证相应的链下隐私计算节点是否可信,具体指该链下隐私计算节点上部署的链下tee是否可信。

如前所述,链下隐私计算节点创建链下tee后,产生用于实现远程证明的自荐信息,该自荐信息可以用于锚定和固化链下tee的信息,使得最终得到的包含该自荐信息的远程证明报告可以用于表征链下tee的状态,并用于验证该链下tee是否可信。例如,自荐信息中可以包含第一待检验哈希值,该第一待检验哈希值为链下tee的预设信息的哈希值,比如该预设信息可以包括链下tee内部署的所有代码、该链下tee的开发者的公钥等。以intelsgx技术为例,对应于链下tee内部署的所有代码所生成的哈希值为mrenclave,对应于链下tee的开发者的公钥所生成的哈希值为mrsigner,即第一待检验哈希值可以包括mrenclave和mrsigner。

仍以intelsgx技术为例。如前所述,链下隐私计算节点向ias服务器发送经过签名的结构体quote后,由ias服务器根据所维护的公钥集合进行签名验证,并向链下隐私计算节点返回远程证明报告(即avr报告),该远程证明报告中包含:结构体quote和签名验证结果,并且ias服务器采用自身持有的私钥对该远程证明报告进行签名。

相应地,客户端在获取远程证明报告后,可以首先根据ias服务器的公钥对该远程证明报告进行签名验证,如果验证通过则表明该远程证明报告确实由ias服务器生成,且在数据传输过程中未被篡改或丢失数据。客户端可以通过任意途径获得ias服务器的公钥,譬如远程证明报告被提供至客户端时,还可以关联提供ias的证书链,使得客户端可以从该证书链中提取ias服务器的公钥。然后,客户端可以从远程证明报告中提取结构体quote和签名验证结果。客户端可以首先查看签名验证结果,如果签名验证结果为通过验证,表明链下隐私计算节点的cpu持有由intel提供的私钥,因而链下tee建立在可靠的硬件平台上,可以继续执行其他验证操作;如果签名验证结果为未通过验证,客户端可以判定链下隐私计算平台不可靠,无需继续其他验证操作。然后,客户端可以从结构体quote内提取上述的哈希值mrenclave和mrsigner,即待检验mrenclave和待检验mrsigner;同时,客户端预先获得了链下tee的mrenclave和mrsigner的可信值,比如称之为可信mrenclave和可信mrsigner,并将待检验mrenclave与可信mrenclave进行比较、将待检验mrsigner与可信mrsigner进行比较。那么,客户端可以将“待检验mrenclave与可信mrenclave一致,且待检验mrsigner与可信mrsigner一致”作为确认链下隐私计算节点可信的前提条件;换言之,如果待检验mrenclave与可信mrenclave不一致,或者待检验mrsigner与可信mrsigner不一致,客户端就判定链下隐私计算节点不可信,而如果客户端设定的所有前提条件都被满足,就可以确认链下隐私计算节点可信。此外,客户端对于签名验证结果进行验证的操作,与针对待检验mrenclave和待检验mrsigner进行验证的操作之间,并不存在必然的先后顺序,两者之间可以完全独立。

除了mrenclave和mrsigner之外,客户端还可以通过其他的前提条件对链下隐私计算节点的可信度进行验证。例如,链下隐私计算节点在创建链下tee后,可以在链下tee内生成代表自身的身份信息的密钥对,并且链下隐私计算节点在链下tee中创建自身的节点身份信息,该节点身份信息与上述对应于身份信息的密钥对相关,比如该节点身份信息可以包含该密钥对中的公钥。其中,代表身份信息的密钥对可以存在一组或多组,比如一组密钥对为用于签名与验签的密钥对(即签名密钥对),一组密钥对为用于加密与解密的密钥对(即加密密钥对),则节点身份信息可以包括签名密钥对中的签名公钥和加密密钥对中的加密公钥。在一组密钥对中,对应于不同的加密算法,可能同时存在多个公钥,这些公钥均被包含于上述的节点身份信息中。此外,节点身份信息还可以包含其他与链下隐私计算节点相关的信息,比如软件版本、所在域名、所在分区名等,本说明书并不对此进行限制。那么,链下隐私计算节点在生成结构体quote时,可以计算上述节点身份信息的哈希值,并将该哈希值作为第二待检验哈希值添加至结构体quote中。

相应地,客户端在收到远程证明报告后,可以从该远程证明报告进行签名验证。在签名验证通过的情况下,客户端可以提取远程证明报告所含的签名验证结果和第二待检验哈希值,并分别予以验证,且对于两者的验证并不存在必然的先后顺序,两者之间可以完全独立。假定客户端首先验证签名验证结果,并在签名验证结果为通过验证的情况下,继续对第二待检验哈希值进行验证。为了对第二待检验哈希值进行验证,客户端需要获取链下隐私计算节点的节点身份信息,比如远程证明报告被提供至客户端的同时,可以关联提供节点身份信息,当然客户端也可以通过其他方式或在其他时刻获得该节点身份信息。然后,客户端可以对获得的节点身份信息进行哈希计算,将计算得到的哈希值与上述的第二待检验哈希值进行比较,并将比较结果一致作为确认链下隐私计算节点可信的前提条件。如果第二待检验哈希值通过验证,可以证明链下隐私计算节点的身份信息是在链下tee内初始化生成,上述代表身份信息的密钥对中的私钥仅由链下隐私计算节点所拥有,且该链下隐私计算节点能够完成签名、加密通讯等操作。

以上列举了两种针对链下隐私计算节点进行验证时采用的判断条件,即针对第一待检验哈希值的验证、针对第二待检验哈希值的验证。还可以采用其他的判断条件,此处不再一一列举。在针对链下隐私计算节点进行可信验证时,可以选用上述的一个或多个判断条件。例如,可以同时针对第一待检验哈希值和第二待检验哈希值进行验证;或者,在一些情况下,可以仅验证第二待检验哈希值,而对第一待检验哈希值可以不验证或者部分验证。例如,客户端上可以设置信任等级,并根据信任等级确定是否验证或部分验证第一待检验哈希值,比如信任等级为0时,不需要验证第一待检验哈希值,信任等级为1时,验证第一待检验哈希值中的mrsigner,信任等级为2时,验证第一待检验哈希值中的mrenclave等。

在上述实施例中,节点身份信息包含了链下隐私计算节点的身份相关的信息,比如代表身份的公钥等。节点身份信息还可以包含与链下tee相关的信息,那么对节点身份信息进行哈希计算,并将得到的待检验哈希值添加至结构体quote时,该待检验哈希值相当于同时实现了上述第一待检验哈希值和第二待检验哈希值的作用。例如,节点身份信息除了包含签名公钥和加密公钥等信息之外,还可以包含mrenclave和mrsigner的值,使得对该节点身份信息进行哈希计算得到的待检验哈希值,同时与链下隐私计算节点的身份、链下tee相关。相应的,客户端在收到远程证明报告后,可以从该远程证明报告进行签名验证。在签名验证通过的情况下,客户端可以提取远程证明报告所含的签名验证结果和待检验哈希值,并分别予以验证,且对于两者的验证并不存在必然的先后顺序,两者之间可以完全独立。假定客户端首先验证签名验证结果,并在签名验证结果为通过验证的情况下,继续对待检验哈希值进行验证。为了对待检验哈希值进行验证,客户端需要获取链下隐私计算节点的节点身份信息,此处不再赘述。然后,客户端可以对获得的节点身份信息进行哈希计算,将计算得到的哈希值与上述的待检验哈希值进行比较,并将比较结果一致作为确认链下隐私计算节点可信的前提条件。可见,本实施例仅需一次比较,即可实现前文中两方面的验证,有助于提升验证效率。

客户端对远程证明报告的验证过程,还可以包括其他操作,比如根据远程证明报告的内容确定链下tee是否运行于测试模式(测试模式下存在数据泄露的风险)等,此处不再一一赘述。

基于上述方案,客户端在确定链下隐私计算节点可信的情况下,可以向链下隐私计算节点部署链下合约。链下合约与区块链节点所执行的链上合约类似,均可以为运行于虚拟机中的字节码,此处不再赘述。通过对链下合约的字节码进行加密传输,可以避免在传输过程中发生数据泄露或修改等,确保隐私性和安全性。

与前述的挑战过程相类似的,客户端可以通过链下途径将链下合约的字节码加密传输至链下隐私计算节点,即针对字节码的传输过程与区块链网络无关,这样可以跳过区块链节点之间的共识过程、减少链上链下的交互操作,使得字节码的传输效率更高。或者,客户端可以通过链上途径将链下合约的字节码加密传输至链下隐私计算节点,比如客户端生成链下合约部署交易,该链下合约部署交易中包含对字节码进行加密得到的字节码密文,客户端将链下合约部署交易加密后提交至区块链节点,加密后的链下合约部署交易可在区块链节点处创建的链上tee内被解密、得到字节码密文,然后由区块链节点通过预言机机制将该字节码密文传输至链下隐私计算节点。

以如图4所示的场景为例。一种情况下,客户端41可以通过链下渠道直接向链下隐私计算节点42加密传输字节码,即客户端41向链下隐私计算节点42链下传输加密后的字节码密文。另一种情况下,客户端41可以通过区块链网络43向链下隐私计算节点42加密传输字节码,即客户端41向链下隐私计算节点42链上传输加密后的字节码密文。链上加密传输的过程可以包括三个步骤:步骤①,客户端41向区块链网络43提交一笔用于部署链下合约的交易,即链下合约部署交易,该链下合约部署交易可由区块链网络43内的某一节点43n接收和执行;步骤②,节点43n调用预言机合约,该预言机合约可以将上述链下合约部署交易所含的字节码传递至链下的预言机服务器44,比如预言机合约可以产生包含该字节码的事件,而预言机服务器44可以通过监听预言机合约产生的事件,从而获取上述的字节码;步骤③,预言机服务器44将字节码通过链下渠道发送至链下隐私计算节点42。

在链下加密传输的过程中,仅涉及到客户端41与链下隐私计算节点42之间的数据交互,可以采用如前文所述的对称加密、非对称加密或两者结合的加密传输方案,此处不再赘述。在链上加密传输的过程中,涉及到多个对象之间的数据交互,需要确保字节码始终处于加密状态。例如,在客户端41向节点43n提交链下合约部署交易时,可以通过如前文所述的对称加密、非对称加密或两者结合的加密传输方案对该链下合约部署交易进行加密传输,使得链下合约部署交易所含的字节码处于加密保护状态。其中,链下合约部署交易所含的字节码可能处于明文状态或密文状态。如果处于密文状态,表明客户端41对字节码进行加密后,将字节码密文添加至链下合约部署交易的data字段,并且客户端41应当确保该字节码密文仅最终环节的链下隐私计算节点42能够解密,而其他的节点43n、预言机服务器44等均无法解密,那么节点43n在自身创建的链上tee内对链下合约部署交易进行解密后得到字节码密文后,预言机服务器44可以直接读取该字节码密文,然后由预言机服务器44将该字节码密文传输至链下隐私计算节点42。如果处于明文状态,表明客户端41直接将明文的字节码添加至链下合约部署交易的data字段,而该链下合约部署交易可以调用一链上合约,那么节点43n在链上tee内对链下合约部署交易进行解密后得到明文的字节码后,可以通过链上tee内部署的虚拟机执行上述链上合约,从而在链上tee内将字节码加密为相应的字节码密文,并确保该字节码密文仅能够由链下隐私计算节点42能够解密,然后由预言机服务器44读取该字节码密文,并进而将该字节码密文传输至链下隐私计算节点42。

针对字节码进行加密时,可以采用对称加密、非对称加密或两者结合的方式,本说明书并不对此进行限制。当采用非对称加密或者对称加密与非对称加密结合的方式时,涉及到一组非对称密钥对,客户端41或节点43n需要获知该非对称密钥对的公钥,且该非对称密钥对的私钥需要由链下隐私计算节点42所维护,使得该链下隐私计算节点42可以基于该私钥对收到的字节码密文进行解密。例如,该非对称密钥对可以为前文所述的、链下隐私计算节点42在链下tee中产生的加密密钥对;相应地,链下隐私计算节点42在收到字节码密文后,将该字节码密文读入链下tee中,并基于加密私钥对该字节码密文进行解密,从而得到明文的字节码。

链下隐私计算节点42在链下tee中解密得到明文的字节码后,可以在链下tee中对字节码进行重新加密后,存储至链下tee之外的存储空间,比如链下隐私计算节点42的硬盘中,从而完成对链下合约的部署。此处,链下隐私计算节点42通常采用一对称密钥,通过对称加密的方式对字节码进行加密并存储,这样在后续调用该字节码时,相比于采用非对称加密的形式而言,可以更快地完成解密操作。该对称密钥可由链下隐私计算节点42在链下tee中生成,或者由其他对象通过加密传输的方式分发至链下隐私计算节点42。例如,可由kms服务器对链下隐私计算节点42发起挑战,并通过远程证明验证该链下隐私计算节点42可信的情况下,向该链下隐私计算节点42分发上述的对称密钥。链下隐私计算节点42可以将kms服务器分发的对称密钥作为根密钥,并将基于该根密钥派生得到的衍生密钥应用于针对字节码的加密存储。再例如,基于intelsgx技术,上述对称密钥可以为烧录于链下隐私计算节点42的cpu内e-fuses存储电路中的rsk(rootsealkey)密钥,或者该rsk密钥派生得到的衍生密钥(即sealkey)。当然,链下隐私计算节点42也可以采用非对称加密或者对称加密与非对称加密结合的方式,对字节码进行加密存储,本说明书并不对此进行限制。

除了在链下隐私计算节点42处安全存储链下合约的字节码之外,客户端41还可以向链下隐私计算节点42指明用于执行该字节码的执行引擎。例如,在链下隐私计算节点42处创建的链下tee中,可以部署有若干执行引擎,比如evm、wasm虚拟机等中的一个或多个,尤其是在同时部署了多种执行引擎的情况下,客户端41可以向链下隐私计算节点42发送与上述字节码相关联的执行引擎指定信息,该执行引擎指定信息向链下隐私计算节点42指示用于执行上述字节码的执行引擎,比如采用evm还是wsam虚拟机等。例如,可以将字节码与执行引擎指定信息打包加密后,一并传输至链下隐私计算节点42;也可以分别对字节码和执行引擎指定信息进行加密传输,此时执行引擎指定信息应当包含相应的字节码或者链下合约的信息,比如字节码的哈希值等,以便于据此确定执行引擎指定信息对应于哪个链下合约。相应的,链下隐私计算节点42在部署链下合约时,除了对字节码进行加密存储之外,还需标注出字节码所需采用的执行引擎的信息,从而在后续的调用过程中据此选用恰当的虚拟机,以作为处理相应字节码的执行引擎。

通过上述方式,客户端41可以向链下隐私计算节点42部署更多的链下合约;类似地,其他客户端也可以向链下隐私计算节点42部署链下合约。为了便于管理,以及便于后续对链下合约进行调用,链下隐私计算节点42可以为部署的链下合约生成相应的合约id,链下合约与合约id之间一一对应。例如,在完成针对链下合约的部署操作后,链下隐私计算节点42可以对该链下合约的字节码进行哈希运算,得到第一哈希值,并将该第一哈希值作为该链下合约的合约id。当然,链下隐私计算节点42也可以通过其他方式生成合约id,本说明书并不对此进行限制。

如果将上述的第一哈希值作为链下合约的合约id,那么该第一哈希值还可以具有其他作用。在完成部署后,链下隐私计算节点42可以向客户端41反馈部署结果信息,该部署结果信息包含上述的第一哈希值,而客户端41还可以对自己发出的字节码进行哈希计算得到第二哈希值,并将第一哈希值与第二哈希值进行比较:如果两者一致,表明链下隐私计算节点42部署的字节码正确无误,没有在传输过程中被替换或者发生其他意外,客户端41可以确认链下合约在链下隐私计算节点42处部署成功;而如果两者不一致,客户端41可以认为链下合约部署失败,或者已部署的链下合约存在风险。客户端41可以将成功部署的链下合约标记为可信合约,将未成功部署的链下合约标记为不可信合约或不维护,从而在后续过程中仅针对可信合约进行调用。如果客户端41将字节码通过链下途径传输至链下隐私计算节点42,那么链下隐私计算节点42同样通过链下途径将部署结果信息返回至客户端41;如果客户端41将字节码通过链上途径传输至链下隐私计算节点42,那么链下隐私计算节点42同样通过链上途径将部署结果信息反馈至客户端41。

如前所述,链下隐私计算节点可以属于链下隐私计算集群。如果各个链下隐私计算节点之间完全独立,那么客户端分别与每个链下隐私计算节点进行交互,并实现对链上合约的部署操作,且客户端与每个链下隐私计算节点之间的交互过程均可以参考图4所示的实施例,此处不再赘述。而另一种方式下,由控制节点对集群内的所有链下隐私计算节点进行统一管理,那么客户端在部署链上合约的过程中,首先将字节码加密传输至控制节点,然后由控制节点转发至集群内的一个或多个链下隐私计算节点,从而将链上合约的字节码部署至集群内的一个或多个链下隐私计算节点。如果部署至多个链下隐私计算节点,那么这些链下隐私计算节点可以同时向外提供针对同一链下合约的调用能力,从而实现并行的链下隐私计算,还可以在多个链下隐私计算节点之间实现负载均衡。

以如图5所示的场景为例。一种情况下,客户端51可以通过链下渠道直接向控制节点52发送字节码密文,即客户端51向控制节点52链下加密传输字节码,进而由控制节点52转发至集群内的一个或多个链下隐私计算节点。另一种情况下,客户端51可以通过区块链网络53向控制节点52加密传输字节码,即客户端51向控制节点52链上传输加密后的字节码密文。链上加密传输的过程可以包括三个步骤:步骤①,客户端51向区块链网络53提交一笔用于部署链下合约的交易,即链下合约部署交易,该链下合约部署交易可由区块链网络53内的某一节点53n接收和执行;步骤②,节点53n调用预言机合约,该预言机合约可以将上述链下合约部署交易所含的字节码传递至链下的预言机服务器54,比如预言机合约可以产生包含该字节码的事件,而预言机服务器54可以通过监听预言机合约产生的事件,从而获取上述的字节码;步骤③,预言机服务器54将字节码通过链下渠道发送至控制节点52,并进而由控制节点52转发至集群内的一个或多个链下隐私计算节点。

如果仅需部署至一个链下隐私计算节点,比如图5所示的链下隐私计算节点52n,那么与图4所示实施例相类似的,客户端51或节点53n在针对字节码进行加密时,只需要确保该链下隐私计算节点52n能够解密即可。例如,可以采用该链下隐私计算节点52n在链下tee内生成的加密公钥对字节码进行加密,而链下隐私计算节点52n在收到字节码密文后,可以在链下tee内通过加密私钥对该字节码密文进行解密,从而获得明文的字节码。同时,客户端51可以携带部署目标指示信息,控制节点52可以根据该部署目标指示信息确定相应的部署目标为链下隐私计算节点52n,从而将字节码密文准确转发至该链下隐私计算节点52n,而无需转发至集群内其他的链下隐私计算节点。如果客户端51并未携带部署目标指示信息,控制节点52可以将字节码密文转发至集群内的所有链下隐私计算节点,但只有链下隐私计算节点52n能够成功解密并完成部署。

如果需要部署至集群内的多个链下隐私计算节点,除了独立部署的方式之外,本说明书中还可以将链下合约同时向多个链下隐私计算节点进行安全部署。如前所述,每个链下隐私计算节点都存在各自的节点身份信息,且节点身份信息涉及到每个链下隐私计算节点在各自的链下tee内创建的密钥对,比如加密密钥对和签名密钥对,或者兼顾加密与签名功能的密钥对。下面以加密密钥对和签名密钥对为例进行说明。为了将链下合约同时向多个链下隐私计算节点进行安全部署,需要确保多个链下隐私计算节点都能够顺利解密收到的字节码密文。为此,需要为这些链下隐私计算节点生成统一的身份信息,比如称为集群身份信息。集群身份信息可以包括集群加密密钥对和集群签名密钥对,上述的各个链下隐私计算节点均需在各自的链下tee内维护集群加密私钥、集群签名私钥,那么客户端51或节点53n只要使用集群加密公钥对字节码进行加密,即可确保上述的各个链下隐私计算节点均能够在各自的链下tee内通过集群加密私钥进行解密,从而获得字节码并完成部署。当然,即便仅部署至单个链下隐私计算节点,也可以采用上述的集群加密公钥对字节码进行加密,只要相应的链下隐私计算节点能够顺利解密即可。实际上,基于集群身份,客户端51并不需要关注对方为单个链下隐私计算节点或者链下隐私计算集群,只需要将其作为一个对象并与该对象进行交互即可,无需关注于背后的节点或集群的细节。

此外,在前文所述的挑战过程中,如果需要将挑战发送至链下隐私计算节点,而非由控制节点直接反馈远程证明报告,那么也可以采用集群加密公钥对挑战信息进行加密,只要相应的链下隐私计算节点能够顺利解密即可。但是,如果希望控制节点直接反馈远程证明报告(预先获得的远程证明报告,或者由控制节点向链下隐私计算节点发起挑战而得到),则应当采用控制节点的身份公钥对挑战信息进行加密,确保控制节点能够在自身创建的tee内通过身份私钥实现解密。

如图6所示,假定链下隐私计算集群中包括节点60、节点61、节点62等若干链下隐私计算节点,需要在这些节点之间建立统一的集群身份。首先,每个链下隐私计算节点分别创建链下tee,并分别在各自的链下tee内创建节点身份,比如节点60创建了tee1,并在tee1内创建了代表自身节点身份的密钥对key-0,节点61创建了tee2,并在tee1内创建了代表自身节点身份的密钥对key-1、节点62创建了tee3,并在tee1内创建了代表自身节点身份的密钥对key-2等。各个链下隐私计算节点加入集群的时机往往不同,因而创建链下tee和节点身份的时机也不同。通常,节点需要向链下隐私集群的控制节点发起申请,而控制节点会向发出申请的节点发起挑战,以验证该节点的硬件环境、链下tee内运行的软件等,并在验证通过后将该节点加入链下隐私计算集群,使得该节点成为链下隐私计算节点。

在需要生成集群身份时,控制节点可以将某一链下隐私计算节点选取为主节点、其他的链下隐私计算节点为从节点,由主节点生成代表集群身份的密钥对,并进而将该密钥对分享至各个从节点,最终使得所有链下隐私计算节点都维护了统一的、代表集群身份的密钥对。如图6所示,假定节点60被选取为主节点、节点61-62等为从节点。首先,节点60在tee1内生成代表集群身份的密钥对,即集群身份密钥对c-key。然后,节点60分别向各个从节点发起挑战,使得节点61、节点62等从节点分别生成远程证明报告,该过程可以参考前文所述,此处不再赘述。在远程证明报告内可以包含mrenclave、mrsigner、节点身份信息的哈希值等信息。节点60分别接收各个从节点返回的远程证明报告和节点身份信息,并通过如前文所述的方式进行验证,以确定各个从节点是否可信。

以节点61为例,假定节点60通过远程证明的方式确定该节点61可信。在上述代表节点60身份的密钥对key-0中,譬如包含一组签名密钥对key-0-s和一组加密密钥对key-0-t,节点60可以采用签名密钥对key-0-s中的签名私钥对上述的集群身份密钥对c-key进行签名。同时,在节点61向节点60提供的节点身份信息中,包含代表节点61身份的密钥对key-1中的公钥,比如签名密钥对key-1-s中的签名公钥、加密密钥对key-1-t中的加密公钥。因此,节点60可以采用加密密钥对key-1-t中的加密公钥,对上述的集群身份密钥对c-key及其签名数据进行加密,得到加密后密钥对,并发送至节点61。

节点60也基于前文所述的方式,触发获得针对自身创建的tee1而生成的远程证明报告,而节点60除了向节点61发送上述的加密后密钥对之外,还将该远程证明报告以及节点60自身的节点身份信息发送至节点61,以供节点61对该节点60进行验证。而节点61在验证确定节点60可信的情况下,通过自身维护的加密密钥对key-1-t中的加密私钥对收到的加密后密钥对进行解密,得到集群身份密钥对c-key及其签名数据;以及,节点61从节点60的节点身份信息中提取出签名密钥对key-0-s中的签名公钥,并针对上述解密得到的签名数据进行验证,如果签名验证成功,则节点61认定解密得到的集群身份密钥对c-key有效,确定该密钥对c-key可以代表链下隐私计算集群的集群身份。类似地,通过上述方式,主节点可以将集群身份密钥对c-key共享至各个从节点,最终使得链下隐私计算集群中的所有链下隐私计算节点均获得该集群身份密钥对c-key。

在如图5所示的实施例中,客户端51可以发送执行引擎指定信息,使得部署了链下合约的链下隐私计算节点可以据此获知用于执行上述字节码的执行引擎,此处不再赘述,可以参考图4所示的实施例。另外,客户端51可以收到部署结果信息,该部署结果信息包含链下合约的哈希值,比如第一哈希值,使得客户端51可以将该第一哈希值与自己发出的字节码对应的第二哈希值进行比较,从而确定链下隐私计算节点是否成功部署了上述的链上合约,此处不再赘述,可以参考图4所示的实施例。如果链上合约被部署至多个链下隐私计算节点,控制节点52只需要确保所有链下隐私计算节点反馈的部署结果信息都一致,并将任意一个链下隐私计算节点反馈的部署结果信息传输至客户端51即可。

基于上述实施例,本说明书可以基于远程证明的方式对链下隐私计算节点的硬件安全性、链下tee的软件正确性等方面进行有效验证,从而在验证链下隐私计算节点可信的情况下,将链下合约通过加密传输的方式安全部署至链下隐私计算节点,并且该链下合约仅在链下隐私计算节点创建的链下tee内执行,具有极高的安全性,可以承担区块链节点分配的链下隐私计算任务,并确保该链下隐私技术任务安全、可靠、高效地执行。同时,由于计算任务在链下隐私计算节点上执行时,并不涉及到节点之间的共识机制,因而只需要在单个链下隐私计算节点上执行该计算任务即可,相比于受共识机制的限制而使得所有区块链节点都需要执行的链上合约而言,能够极大地节省执行计算任务所带来的资源消耗。

基于本说明书的链下合约部署方案,区块链节点可以将计算任务分配至链下隐私计算节点,并调用链下隐私计算节点上部署的链下合约,通过在链下隐私计算节点创建的链下tee内执行该链下合约,以完成上述的计算任务。通过远程证明、加密传输、基于签名的身份验证等技术,可以确保链下隐私计算节点得到的计算结果可靠,并且在计算过程中不会造成数据泄露,具有极高的安全性。在计算完成后,区块链节点可以根据计算结果对区块链账本数据进行更新,可以对计算结果进行固化存证,而且可以支持针对该计算结果的后期验证。同时,相比于区块链节点在执行链上合约后所产生的上链数据而言,基于链下合约产生的计算结果本身相对更加简短,因而将该计算结果上链时,有助于节省链上存储空间。

区块链节点根据计算结果更新区块链账本数据,或者称为对计算结果进行上链,其方式可以包括:生成一笔区块链交易,将计算结果添加至交易的data字段,当该区块链交易通过共识后,可被各个区块链节点添加至最新区块的区块体中,从而实现了区块链账本数据的更新,亦即完成了对该计算结果的上链;或者,区块链节点根据计算结果对相关账户的状态进行更新,该相关账户譬如可以为用户对应的外部账户或者链上合约对应的合约账户,该相关账户的状态更新会导致状态树(statetree)的树根发生取值变化,而该状态树的树根会被包含于最新区块的区块头,从而实现了区块链账本数据的更新,亦即相当于将该计算结果上链。

本说明书中的链下合约,可以实现用户定义的任何计算逻辑。例如,链下合约可以用于验证区块链上存储的加密订单数据的金额是否正确,并将验证结果反馈至链上;再例如,链下合约可以用于根据预设算法对多方数据进行安全计算,即安全多方计算,并将计算结果反馈至链上等,此处不再一一赘述。

如图7所示,假定客户端71希望对已部署的链下合约进行调用。该客户端71可以通过链下渠道向控制节点72发送调用请求,该调用请求采用集群身份公钥进行加密,控制节点72可以基于负载均衡算法将该调用请求分配至集群内的某个链下隐私计算节点,比如节点72n,由该节点72n对调用请求进行响应。节点72n在自身创建的链下tee中通过集群身份私钥解密调用请求,获得调用请求中包含的合约id、函数名和入参数据的信息。合约id譬如可以为链下合约的字节码的哈希值,使得节点72n可以据此找到相应的已部署的链下合约的字节码。链下合约可能包含多个函数,因而函数名可以指明客户端71希望调用的函数;如果链下合约仅包含一个函数,或者客户端71希望调用链下合约中的所有函数,那么调用请求中也可以省去函数名的信息。入参数据的信息可以为入参数据本身,或者入参数据的描述信息,比如该描述信息可以为存储地址等,使得节点72n可以据此获取入参数据,尤其是当客户端71本身并非数据拥有者的情况下,可以省去客户端71与数据拥有者之间的交互,还可以降低调用请求的数据量、加快其传输速度。然后,节点72n可以在链下tee中执行链下合约的字节码,以针对入参数据进行处理,从而得到相应的调用结果。节点72n可以在链下tee中对该调用结果进行加密后,经由控制节点72反馈至客户端71。

客户端71可以通过链上渠道向控制节点72发送调用请求。客户端71可以向区块链网络73提交链下合约调用交易,该链下合约调用交易中包含调用请求,该调用请求由客户端71采用集群身份公钥进行加密。当然,链下合约调用交易本身也可以是加密传输的,这可以参考前文所述的数据加密传输的内容,此处不再赘述。链下合约调用交易可以调用预言机合约,使得预言机合约针对该交易所含的调用请求产生相应的合约事件,该合约事件被预言机服务器74监听到之后,由预言机服务器74获取调用请求并传输至控制节点72。然后,控制节点72将调用请求分配至诸如链下隐私计算节点72n进行响应。以及,控制节点72可以通过预言机机制将调用结果反馈至链上,而节点73n可以主动发起一笔交易,将该调用结果上链,或者节点73n可以将调用结果反馈至客户端71,由客户端71重新发起一笔交易将该调用结果上链。

如果入参数据为区块链数据,客户端71可以向区块链网络73提交加密后的链下合约调用交易,该链下合约调用交易中包含合约id、函数名和入参数据的信息,并且该链下合约调用交易调用了用于获取入参数据的链上合约。节点73n收到加密后的链下合约调用交易后,在链上tee中进行解密,然后通过链上tee内部署的虚拟机执行被调用的链上合约,以获取被作为入参数据的区块链数据,该区块链数据通常处于加密状态,节点73n可以在链上tee内解密为明文,然后将该明文的区块链数据与链下合约调用交易所含的合约id、函数名打包为调用请求,并在链上tee内采用集群身份公钥对该调用请求进行加密,而后基于预言机机制传输至控制节点72,由控制节点72将调用请求分配至诸如链下隐私计算节点72n进行响应。以及,控制节点72可以通过预言机机制将调用结果反馈至链上,而节点73n可以将该调用结果上链。

除了链下隐私计算节点可以存在统一的集群身份之外,可以为链下隐私计算节点上部署的链下合约生成合约身份。当集群内存在多个链下隐私计算节点时,每个链下隐私计算节点可以为自身已部署的链下合约建立合约身份,且不同链下隐私计算节点针对同一链下合约生成的合约身份相同。例如,链下隐私计算节点可以根据统一的集群身份和链下合约的合约id,为链下合约生成相应的合约身份,由于集群身份相同、而不同链下合约的合约id必然不同,因而可以确保:同一链下隐私计算节点上部署的不同链下合约存在不同的合约身份,而不同链下隐私计算节点上部署的同一链下合约存在相同的合约身份。相应地,控制节点72在分配收到的调用请求时,只需要关注于集群内的各个链下隐私计算节点的空闲程度,并基于空闲程度进行任务分配,而无需关注其他信息。

合约身份可由合约身份密钥对所定义。例如,合约身份可以包括合约加密密钥对和合约签名密钥对。那么,客户端71或节点73n除了采用集群身份公钥对调用请求进行加密之外,还可以采用合约加密公钥对调用请求内所含的入参数据的信息进行加密。链下隐私计算节点72n在收到针对某一链下合约的调用请求后,采用该链下合约对应的合约加密私钥对调用请求内加密后的入参数据的信息进行解密,从而确保入参数据的信息只能由被调用的链下合约所获得,而不会被其他链下合约获得。以及,在得到调用结果后,链下隐私计算节点72n可以通过被调用的链下合约的合约签名私钥对调用结果进行签名,而客户端71或节点73n可以通过合约签名公钥进行验签,从而确定该调用结果确实是由被调用的链下合约所产生。

在图7所示实施例中,以链下隐私计算集群为例进行描述。实际上,客户端71也可以直接与单个链下隐私计算节点进行交互,以调用该链下隐私计算节点上部署的链下合约,此处不再赘述。

对应于上述客户端侧的实施例,本说明书还提出了链下隐私节点侧、区块链节点侧、控制节点侧等其他方面的实施例,在客户端侧实施例中所涉及的描述同样可以适用于这些侧的实施例,下文中不再对此进行赘述。

相应地,图8是一示例性实施例提供的一种链下隐私计算节点侧的部署合约的方法的流程图。如图8所示,该方法可以包括以下步骤:

步骤802,链下隐私计算节点接收源自客户端的挑战,向所述客户端提供远程证明报告。

如前所述,远程证明报告由认证服务器对链下隐私计算节点产生的自荐信息进行验证后生成,该自荐信息与链下隐私计算节点上创建的链下可信执行环境相关。

如前所述,链下隐私计算节点可以接收区块链节点通过预言机机制传输的挑战信息,挑战信息由区块链节点从客户端提交的挑战交易中提取得到;或者,链下隐私计算节点可以接收客户端发起的链下挑战。

如前所述,链下隐私计算节点可以接收客户端直接发起的挑战;或者,在链下隐私计算节点属于链下隐私计算集群的情况下,链下隐私计算节点可以接收链下隐私计算集群的控制节点转发的挑战,该挑战由客户端向控制节点发起且挑战目标被客户端设定为所述链下隐私计算节点;或者,链下隐私计算节点可以接收链下隐私计算集群的控制节点转发的挑战,该挑战由客户端向控制节点发起且挑战目标未设定,而链下隐私计算节点由控制节点从链下隐私计算集群中选取。

如前所述,链下隐私计算节点可以响应于上述的挑战而产生自荐信息,而上述的远程证明报告由认证服务器对该自荐信息进行验证后生成;或者,链下隐私计算节点可以响应于其他挑战者的挑战而产生上述的自荐信息,而远程证明报告由认证服务器对该自荐信息进行验证后生成。

步骤804,所述链下隐私计算节点接收所述客户端加密传输的链下合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下发送。

如前所述,远程证明报告可以由认证服务器进行签名,远程证明报告携带自荐信息,该自荐信息包含第一待检验哈希值,该第一待检验哈希值为链下可信执行环境的预设信息的哈希值,该第一待检验哈希值用于与客户端预先获得的针对上述链下可信执行环境的可信哈希值进行比较,且比较结果一致被作为客户端确认该链下隐私计算节点可信的前提条件。

如前所述,链下隐私计算节点可以向客户端提供的节点身份信息,该节点身份信息与代表该链下隐私计算节点的身份的密钥相关;其中,自荐信息内还包含第二待检验哈希值,该第二待检验哈希值为链下隐私计算节点生成自荐信息时的节点身份信息的哈希值,该第二待检验哈希值用于与节点身份信息进行比较,且比较结果一致被作为客户端确认该链下隐私计算节点可信的前提条件。

如前所述,链下隐私计算节点可以向客户端提供的节点身份信息,该节点身份信息与代表链下隐私计算节点的身份的密钥相关,且节点身份信息包含与链下可信执行环境相关的信息;其中,远程证明报告由认证服务器进行签名;远程证明报告携带自荐信息,该自荐信息包含待检验哈希值,该待检验哈希值用于与客户端获得的节点身份信息的哈希值进行比较,且比较结果一致被作为客户端确认链下隐私计算节点可信的前提条件。

如前所述,链下隐私计算节点可以接收区块链节点通过预言机机制传输的字节码密文,该字节码密文由区块链节点在自身创建的链上可信执行环境内对客户端提交的加密后的链下合约部署交易进行解密后得到;或者,链下隐私计算节点可以接收客户端链下加密传输的所述字节码。

如前所述,链下隐私计算节点可以直接从客户端处获得加密传输的字节码;或者,在链下隐私计算节点属于链下隐私计算集群的情况下,链下隐私计算节点可以接收链下隐私计算集群的控制节点转发的字节码密文,该字节码密文由客户端传输至控制节点。

步骤806,所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

如前所述,在区块链节点通过预言机机制对链下合约发起调用的情况下,部署的字节码在链下可信执行环境中执行,且执行结果通过预言机机制反馈至区块链节点。

如前所述,字节码可以由非对称密钥对的公钥进行加密后传输,且非对称密钥对的私钥被链下隐私计算节点所维护。

如前所述,在链下隐私计算节点属于链下隐私计算集群的情况下,非对称密钥对的私钥可以仅被链下隐私计算节点所维护,或者非对称密钥对的私钥可以被链下隐私计算集群内的所有链下隐私计算节点共同维护。

如前所述,链下可信执行环境中可以部署有若干执行引擎。链下隐私计算节点可以接收客户端发送的与字节码相关联的执行引擎指定信息,并根据执行引擎指定信息为字节码设定相应的执行引擎。

如前所述,链下隐私计算节点可以生成部署结果信息,部署结果信息包含链下隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;链下隐私计算节点可以向客户端返回所述部署结果信息,第一哈希值用于与客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为客户端确认链下合约在链下隐私计算节点处部署成功的前提条件。

相应地,图9是一示例性实施例提供的一种区块链节点侧的部署合约的方法的流程图。如图9所示,该方法可以包括以下步骤:

步骤902,区块链节点接收客户端发起的挑战交易,并向所述客户端返回链下隐私计算节点的远程证明报告。

如前所述,远程证明报告由认证服务器对链下隐私计算节点产生的自荐信息进行验证后生成,自荐信息与链下隐私计算节点上创建的链下可信执行环境相关。

如前所述,区块链节点可以将经过加密的挑战交易读入链上可信执行环境中进行解密,得到挑战交易所含的挑战信息;区块链节点可以通过预言机机制将挑战信息传输至链下隐私计算节点,或者传输至链下隐私计算节点所属链下隐私计算集群的控制节点;区块链节点可以接收链下隐私计算节点或控制节点返回的远程证明报告并提供至客户端。

步骤904,所述区块链节点接收所述客户端发起的经过加密的链下合约部署交易,在所述链上可信执行环境中解密得到所述链下合约部署交易所含的字节码密文,所述字节码密文由所述客户端对链下合约的字节码进行加密得到,所述链下合约部署交易由所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下发起。

如前所述,远程证明报告可以由链下隐私计算节点响应于客户端的挑战而触发产生;或者,远程证明报告可以由链下隐私计算节点响应于其他挑战者的挑战而触发产生。

如前所述,远程证明报告可以由认证服务器进行签名,且远程证明报告携带自荐信息,自荐信息包含第一待检验哈希值,第一待检验哈希值为链下可信执行环境的预设信息的哈希值,第一待检验哈希值用于与客户端预先获得的针对链下可信执行环境的可信哈希值进行比较,且比较结果一致被作为客户端确认链下隐私计算节点可信的前提条件。

如前所述,区块链节点可以接收链下隐私计算节点返回的节点身份信息,并提供至客户端,节点身份信息与代表链下隐私计算节点的身份的密钥相关;其中,自荐信息内还包含第二待检验哈希值,第二待检验哈希值为链下隐私计算节点生成自荐信息时的节点身份信息的哈希值,第二待检验哈希值用于与节点身份信息进行比较,且比较结果一致被作为客户端确认链下隐私计算节点可信的前提条件。

如前所述,区块链节点可以接收链下隐私计算节点返回的节点身份信息,并提供至客户端,节点身份信息与代表链下隐私计算节点的身份的密钥相关,且节点身份信息包含与链下可信执行环境相关的信息;其中,远程证明报告由认证服务器进行签名;远程证明报告携带自荐信息,自荐信息包含待检验哈希值,待检验哈希值用于与客户端获得的节点身份信息的哈希值进行比较,且比较结果一致被作为客户端确认链下隐私计算节点可信的前提条件。

步骤906,所述区块链节点通过预言机机制将所述字节码密文传输至所述链下隐私计算节点,由所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码并部署。

如前所述,在区块链节点通过预言机机制对链下合约发起调用的情况下,部署的字节码在链下可信执行环境中执行,且执行结果通过预言机机制反馈至区块链节点。

如前所述,区块链节点可以通过预言机机制直接将字节码密文传输至链下隐私计算节点;或者,在链下隐私计算节点属于链下隐私计算集群的情况下,区块链节点可以通过预言机机制将字节码密文传输至链下隐私计算集群的控制节点,并由控制节点转发至链下隐私计算节点;其中,字节码密文还被控制节点转发至链下隐私计算集群中的其他链下隐私计算节点。

如前所述,字节码可以由非对称密钥对的公钥进行加密后传输,且非对称密钥对的私钥被链下隐私计算节点所维护。

如前所述,在链下隐私计算节点属于链下隐私计算集群的情况下,非对称密钥对的私钥可以仅被链下隐私计算节点所维护,或者非对称密钥对的私钥可以被链下隐私计算集群内的所有链下隐私计算节点共同维护。

如前所述,链下可信执行环境中可以部署有若干执行引擎。区块链节点可以在链上可信执行环境中解密得到链下合约部署交易所含的执行引擎指定信息;区块链节点可以通过预言机机制将执行引擎指定信息传输至链下隐私计算节点,执行引擎指定信息向链下隐私计算节点指示用于执行字节码的执行引擎。

如前所述,区块链节点可以接收链下隐私计算节点返回的部署结果信息,并提供至客户端,部署结果信息包含链下隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;其中,第一哈希值用于与客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为客户端确认链下合约在链下隐私计算节点处部署成功的前提条件。

相应地,图10是一示例性实施例提供的一种控制节点侧的部署合约的方法的流程图。如图10所示,该方法可以包括以下步骤:

步骤1002,链下隐私计算集群的控制节点接收客户端发起的挑战,从所述链下隐私计算集群内选取一链下隐私计算节点,并向所述客户端提供被选取的链下隐私计算节点对应的远程证明报告;其中,所述链下隐私计算集群内的所有链下隐私计算节点的软硬件配置一致。

如前所述,远程证明报告由认证服务器对被选取的链下隐私计算节点产生的自荐信息进行验证后生成,自荐信息与被选取的链下隐私计算节点上创建的链下可信执行环境相关。

如前所述,控制节点可以接收区块链节点通过预言机机制传输的挑战信息,挑战信息由区块链节点从客户端提交的挑战交易中提取得到;或者,控制节点可以接收客户端发起的链下挑战。

如前所述,远程证明报告可以由被选取的链下隐私计算节点响应于客户端发起的挑战而触发产生;或者,远程证明报告可以由被选取的链下隐私计算节点响应于其他挑战者的挑战而触发产生。

如前所述,被选取的链下隐私计算节点可以由客户端指定;或者,被选取的链下隐私计算节点可以由控制节点按照预设方式选取。

步骤1004,所述控制节点接收所述客户端加密传输的链下合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述链下隐私计算集群内的链下隐私计算节点可信的情况下发送。

如前所述,控制节点可以接收区块链节点通过预言机机制传输的字节码密文,字节码密文由区块链节点在自身创建的链上可信执行环境内对客户端提交的加密后的链下合约部署交易进行解密后得到;或者,控制节点可以接收客户端链下加密传输的字节码。

步骤1006,所述控制节点将收到的字节码密文分别转发至所述链下隐私计算集群内的所有链下隐私计算节点,所述字节码密文可由各个链下隐私计算节点分别在自身的链下可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

如前所述,在区块链节点通过预言机机制对链下合约发起调用的情况下,部署的字节码在任一链下隐私计算节点处的链下可信执行环境中执行,且执行结果通过预言机机制反馈至区块链节点。

如前所述,字节码可以由非对称密钥对的公钥进行加密后传输,且非对称密钥对的私钥被链下隐私计算集群内的所有链下隐私计算节点共同维护。

如前所述,链下可信执行环境中部署有若干执行引擎。控制节点可以接收客户端发送的与字节码相关联的执行引擎指定信息,并转发至链下隐私计算集群内的所有链下隐私计算节点,执行引擎指定信息用于指示各个链下隐私计算节点为字节码设定相应的执行引擎。

如前所述,控制节点可以从链下隐私计算集群内的任一链下隐私计算节点处接收部署结果信息,部署结果信息包含任一链下隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;控制节点可以向客户端返回部署结果信息,第一哈希值用于与客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为客户端确认链下合约在链下隐私计算集群内的链下隐私计算节点处部署成功的前提条件。

在本说明书的技术方案中,还可由客户端直接与隐私计算节点进行交互以完成在隐私计算节点上部署智能合约等操作,而无需通过区块链的预言机机制来完成上述操作,同时隐私计算节点对于智能合约的部署结果也无需反馈至区块链。在该情况下,由于不涉及链上和链下的区分,下文将“链下隐私计算节点”称为“隐私计算节点”,将“链下可信执行环境”称为“可信执行环境”,将“目标链下合约”称为“目标智能合约”。但是,技术方案的原理与上述实施例类似,所涉及的实施细节比如隐私计算节点对可信执行环境的创建过程、隐私计算节点对远程证明报告的生成过程、客户端对远程证明报告的验证过程、对字节码的加解密方案、客户端对部署结果的验证等,同样可参考上述实施例,因此下文不再进行详细描述。

图11是一示例性实施例提供的另一种客户端侧的链下合约的部署方法的流程图。如图11所示,该方法可以包括以下步骤:

步骤1102,客户端获取针对隐私计算节点的远程证明报告。

如前所述,所述客户端可以向所述隐私计算节点发起挑战,并接收所述隐私计算节点返回的远程证明报告;或者,在所述隐私计算节点属于隐私计算集群的情况下,所述客户端可以向所述隐私计算集群的控制节点发起挑战,并接收所述控制节点返回的远程证明报告。

如前所述,所述客户端可以向所述控制节点发起挑战且挑战目标被设定为所述隐私计算节点,使所述控制节点返回所述隐私计算节点的远程证明报告;或者,所述客户端可以向所述控制节点发起挑战且挑战目标未设定,使所述控制节点从所述隐私计算集群中选取所述隐私计算节点并返回所述隐私计算节点的远程证明报告。

如前所述,所述远程证明报告可以由所述隐私计算节点响应于所述客户端发起的挑战而触发产生;或者,所述远程证明报告可以由所述隐私计算节点响应于其他挑战者的挑战而触发产生。

如前所述,所述客户端可以根据所述认证服务器的公钥对所述远程证明报告进行签名验证;在签名通过验证且所述远程证明报告所含的远程认证结果为通过认证的情况下,所述客户端从所述远程证明报告携带的所述自荐信息内提取出第一待检验哈希值,所述第一待检验哈希值为所述链下可信执行环境的预设信息的哈希值;所述客户端将预先获得的针对所述链下可信执行环境的可信哈希值与所述第一待检验哈希值进行比较,并将比较结果一致作为确认所述隐私计算节点可信的前提条件。

如前所述,所述客户端可以获取所述隐私计算节点提供的节点身份信息,所述节点身份信息与代表所述隐私计算节点的身份的密钥相关;所述客户端从所述远程证明报告携带的所述自荐信息内提取出第二待检验哈希值,所述第二待检验哈希值为所述隐私计算节点生成所述自荐信息时的节点身份信息的哈希值;所述客户端计算获取的节点身份信息的哈希值,将计算出的哈希值与所述第二待检验哈希值进行比较,并将比较结果一致作为确认所述隐私计算节点可信的前提条件。

如前所述,所述客户端可以获取所述隐私计算节点提供的节点身份信息,所述节点身份信息与代表所述隐私计算节点的身份的密钥相关,且所述节点身份信息包含与所述链下可信执行环境相关的信息;所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证;在签名通过验证且所述远程证明报告所含的远程认证结果为通过认证的情况下,所述客户端从所述远程证明报告携带的所述自荐信息内提取出待检验哈希值,所述待检验哈希值为所述隐私计算节点生成所述自荐信息时的节点身份信息的哈希值;所述客户端计算获取的节点身份信息的哈希值,将计算出的哈希值与所述待检验哈希值进行比较,并将比较结果一致作为确认所述隐私计算节点可信的前提条件。

步骤1104,所述客户端在根据所述远程证明报告确定所述隐私计算节点可信的情况下,将智能合约的字节码加密传输至所述隐私计算节点,由所述隐私计算节点在所述可信执行环境中解密得到所述字节码并部署。

如前所述,所述客户端可以直接将所述字节码加密传输至所述隐私计算节点;或者,在所述隐私计算节点属于隐私计算集群的情况下,所述客户端可以将所述字节码加密传输至所述隐私计算集群的控制节点,并由所述控制节点转发至所述隐私计算节点;其中,所述控制节点还转发至所述隐私计算集群中的其他隐私计算节点。

如前所述,所述字节码可以由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述隐私计算节点所维护。

如前所述,在所述隐私计算节点属于隐私计算集群的情况下,所述非对称密钥对的私钥可以仅被所述隐私计算节点所维护,或者所述非对称密钥对的私钥可以被所述隐私计算集群内的所有隐私计算节点共同维护。

如前所述,所述链下可信执行环境中部署有若干执行引擎;所述客户端可以向所述隐私计算节点发送与所述字节码相关联的执行引擎指定信息,所述执行引擎指定信息向所述隐私计算节点指示用于执行所述字节码的执行引擎。

如前所述,所述客户端可以接收部署结果信息,所述部署结果信息包含所述隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;所述客户端可以将所述第一哈希值与自身持有的字节码的第二哈希值进行比较,并在比较结果一致的情况下确认所述智能合约在所述隐私计算节点处部署成功。

图12是一示例性实施例提供的另一种隐私计算节点侧的智能合约的部署方法的流程图。如图12所示,该方法可以包括以下步骤:

步骤1202,隐私计算节点接收源自客户端的挑战,向所述客户端提供远程证明报告。

如前所述,所述隐私计算节点可以接收所述客户端直接发起的挑战;或者,在所述隐私计算节点属于隐私计算集群的情况下,所述隐私计算节点可以接收所述隐私计算集群的控制节点转发的挑战,所述挑战由所述客户端向所述控制节点发起且挑战目标被所述客户端设定为所述隐私计算节点;或者,所述隐私计算节点可以接收所述隐私计算集群的控制节点转发的挑战,所述挑战由所述客户端向所述控制节点发起且挑战目标未设定,所述隐私计算节点由所述控制节点从所述隐私计算集群中选取。

如前所述,所述隐私计算节点可以响应于所述挑战而产生所述自荐信息,所述远程证明报告由所述认证服务器对所述自荐信息进行验证后生成;或者,所述隐私计算节点可以响应于其他挑战者的挑战而产生所述自荐信息,所述远程证明报告由所述认证服务器对所述自荐信息进行验证后生成。

步骤1204,所述隐私计算节点接收所述客户端加密传输的智能合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述隐私计算节点可信的情况下发送。

如前所述,所述远程证明报告由所述认证服务器进行签名,所述远程证明报告携带所述自荐信息,所述自荐信息包含第一待检验哈希值,所述第一待检验哈希值为所述链下可信执行环境的预设信息的哈希值,所述第一待检验哈希值用于与所述客户端预先获得的针对所述链下可信执行环境的可信哈希值进行比较,且比较结果一致被作为所述客户端确认所述隐私计算节点可信的前提条件。

如前所述,所述隐私计算节点向所述客户端提供的节点身份信息,所述节点身份信息与代表所述隐私计算节点的身份的密钥相关;其中,所述自荐信息内还包含第二待检验哈希值,所述第二待检验哈希值为所述隐私计算节点生成所述自荐信息时的节点身份信息的哈希值,所述第二待检验哈希值用于与所述节点身份信息进行比较,且比较结果一致被作为所述客户端确认所述隐私计算节点可信的前提条件。

如前所述,所述隐私计算节点向所述客户端提供的节点身份信息,所述节点身份信息与代表所述隐私计算节点的身份的密钥相关,且所述节点身份信息包含与所述链下可信执行环境相关的信息;其中,所述远程证明报告由所述认证服务器进行签名;所述远程证明报告携带所述自荐信息,所述自荐信息包含待检验哈希值,所述待检验哈希值用于与所述客户端获得的节点身份信息的哈希值进行比较,且比较结果一致被作为所述客户端确认所述隐私计算节点可信的前提条件。

如前所述,所述隐私计算节点直接从所述客户端处获得加密传输的所述字节码;或者,在所述隐私计算节点属于隐私计算集群的情况下,所述隐私计算节点接收所述隐私计算集群的控制节点转发的字节码密文,所述字节码密文由所述客户端传输至所述控制节点。

步骤1206,所述隐私计算节点在所述可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

如前所述,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述隐私计算节点所维护。

如前所述,在所述隐私计算节点属于隐私计算集群的情况下,所述非对称密钥对的私钥仅被所述隐私计算节点所维护,或者所述非对称密钥对的私钥被所述隐私计算集群内的所有隐私计算节点共同维护。

如前所述,所述链下可信执行环境中部署有若干执行引擎;所述隐私计算节点可以接收所述客户端发送的与所述字节码相关联的执行引擎指定信息;所述隐私计算节点可以根据所述执行引擎指定信息为所述字节码设定相应的执行引擎。

如前所述,所述隐私计算节点可以生成部署结果信息,所述部署结果信息包含所述隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;所述隐私计算节点可以向所述客户端返回所述部署结果信息,所述第一哈希值用于与所述客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为所述客户端确认所述智能合约在所述隐私计算节点处部署成功的前提条件。

图13是一示例性实施例提供的另一种控制节点侧的智能合约的部署方法的流程图。如图13所示,该方法可以包括以下步骤:

步骤1302,隐私计算集群的控制节点接收客户端发起的挑战,从所述隐私计算集群内选取一隐私计算节点,并向所述客户端提供被选取的隐私计算节点对应的远程证明报告。

如前所述,所述远程证明报告由所述被选取的隐私计算节点响应于所述客户端发起的挑战而触发产生;或者,所述远程证明报告由所述被选取的隐私计算节点响应于其他挑战者的挑战而触发产生。

如前所述,所述被选取的隐私计算节点由所述客户端指定;或者,所述被选取的隐私计算节点由所述控制节点按照预设方式选取。

步骤1304,所述控制节点接收所述客户端加密传输的智能合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述隐私计算集群内的隐私计算节点可信的情况下发送。

如前所述,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述隐私计算集群内的所有隐私计算节点共同维护。

如前所述,所述链下可信执行环境中部署有若干执行引擎;所述控制节点可以接收所述客户端发送的与所述字节码相关联的执行引擎指定信息,并转发至所述隐私计算集群内的所有隐私计算节点,所述执行引擎指定信息用于指示各个隐私计算节点为所述字节码设定相应的执行引擎。

步骤1306,所述控制节点将收到的字节码密文分别转发至所述隐私计算集群内的所有隐私计算节点,所述字节码密文可由各个隐私计算节点分别在自身的可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

如前所述,所述控制节点从所述隐私计算集群内的任一隐私计算节点处接收部署结果信息,所述部署结果信息包含所述任一隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;所述控制节点向所述客户端返回所述部署结果信息,所述第一哈希值用于与所述客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为所述客户端确认所述智能合约在所述隐私计算集群内的隐私计算节点处部署成功的前提条件。

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

请参考图15,在客户端侧的软件实施方式中,该部署合约的装置可以包括:

验证单元1501,使客户端获取针对链下隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

部署单元1502,使所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下,将链下合约的字节码加密传输至所述链下隐私计算节点,由所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码并部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码在所述链下可信执行环境中执行,且执行结果通过所述预言机机制反馈至所述区块链节点。

可选的,验证单元1501具体用于:

使所述客户端向所述链下隐私计算节点发起挑战,并接收所述链下隐私计算节点返回的远程证明报告;或者,

在所述链下隐私计算节点属于链下隐私计算集群的情况下,使所述客户端向所述链下隐私计算集群的控制节点发起挑战,并接收所述控制节点返回的远程证明报告。

可选的,验证单元1501具体用于:

使所述客户端向区块链节点提交挑战交易,所述挑战交易所含的挑战信息可由所述区块链节点通过预言机机制传输至所述链下隐私计算节点或所述控制节点;或者,

使所述客户端向所述链下隐私计算节点或所述控制节点发起链下挑战。

可选的,验证单元1501具体用于:

使所述客户端向所述控制节点发起挑战且挑战目标被设定为所述链下隐私计算节点,使所述控制节点返回所述链下隐私计算节点的远程证明报告;或者,

使所述客户端向所述控制节点发起挑战且挑战目标未设定,使所述控制节点从所述链下隐私计算集群中选取所述链下隐私计算节点并返回所述链下隐私计算节点的远程证明报告。

可选的,

所述远程证明报告由所述链下隐私计算节点响应于所述客户端发起的挑战而触发产生;或者,

所述远程证明报告由所述链下隐私计算节点响应于其他挑战者的挑战而触发产生。

可选的,验证单元1501具体用于:

使所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证;

在签名通过验证且所述远程证明报告所含的远程认证结果为通过认证的情况下,使所述客户端从所述远程证明报告携带的所述自荐信息内提取出第一待检验哈希值,所述第一待检验哈希值为所述链下可信执行环境的预设信息的哈希值;

使所述客户端将预先获得的针对所述链下可信执行环境的可信哈希值与所述第一待检验哈希值进行比较,并将比较结果一致作为确认所述链下隐私计算节点可信的前提条件。

可选的,验证单元1501具体用于:

使所述客户端获取所述链下隐私计算节点提供的节点身份信息,所述节点身份信息与代表所述链下隐私计算节点的身份的密钥相关;

使所述客户端从所述远程证明报告携带的所述自荐信息内提取出第二待检验哈希值,所述第二待检验哈希值为所述链下隐私计算节点生成所述自荐信息时的节点身份信息的哈希值;

使所述客户端计算获取的节点身份信息的哈希值,将计算出的哈希值与所述第二待检验哈希值进行比较,并将比较结果一致作为确认所述链下隐私计算节点可信的前提条件。

可选的,验证单元1501具体用于:

使所述客户端获取所述链下隐私计算节点提供的节点身份信息,所述节点身份信息与代表所述链下隐私计算节点的身份的密钥相关,且所述节点身份信息包含与所述链下可信执行环境相关的信息;

使所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证;

在签名通过验证且所述远程证明报告所含的远程认证结果为通过认证的情况下,使所述客户端从所述远程证明报告携带的所述自荐信息内提取出待检验哈希值,所述待检验哈希值为所述链下隐私计算节点生成所述自荐信息时的节点身份信息的哈希值;

使所述客户端计算获取的节点身份信息的哈希值,将计算出的哈希值与所述待检验哈希值进行比较,并将比较结果一致作为确认所述链下隐私计算节点可信的前提条件。

可选的,部署单元1502具体用于:

使所述客户端生成链下合约部署交易,所述链下合约部署交易中包含对所述字节码进行加密得到的字节码密文;以及,所述客户端将所述链下合约部署交易加密后提交至区块链节点,加密后的链下合约部署交易可在所述区块链节点处创建的链上可信执行环境内被解密,并由所述区块链节点通过预言机机制将解密交易得到的字节码密文传输至所述链下隐私计算节点;或者,

使所述客户端在链下将所述字节码加密传输至所述链下隐私计算节点。

可选的,部署单元1502具体用于:

使所述客户端直接将所述字节码加密传输至所述链下隐私计算节点;或者,

在所述链下隐私计算节点属于链下隐私计算集群的情况下,使所述客户端将所述字节码加密传输至所述链下隐私计算集群的控制节点,并由所述控制节点转发至所述链下隐私计算节点;其中,所述控制节点还转发至所述链下隐私计算集群中的其他链下隐私计算节点。

可选的,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述链下隐私计算节点所维护。

可选的,在所述链下隐私计算节点属于链下隐私计算集群的情况下,所述非对称密钥对的私钥仅被所述链下隐私计算节点所维护,或者所述非对称密钥对的私钥被所述链下隐私计算集群内的所有链下隐私计算节点共同维护。

可选的,所述链下可信执行环境中部署有若干执行引擎;所述装置还包括:

引擎指定单元1503,使所述客户端向所述链下隐私计算节点发送与所述字节码相关联的执行引擎指定信息,所述执行引擎指定信息向所述链下隐私计算节点指示用于执行所述字节码的执行引擎。

可选的,还包括:

结果接收单元1504,使所述客户端接收部署结果信息,所述部署结果信息包含所述链下隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;

结果验证单元1505,使所述客户端将所述第一哈希值与自身持有的字节码的第二哈希值进行比较,并在比较结果一致的情况下确认所述链下合约在所述链下隐私计算节点处部署成功。

请参考图16,在链下隐私计算节点侧的软件实施方式中,该部署合约的装置可以包括:

报告提供单元1601,使链下隐私计算节点接收源自客户端的挑战,向所述客户端提供远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

合约接收单元1602,使所述链下隐私计算节点接收所述客户端加密传输的链下合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下发送;

合约部署单元1603,使所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码,并对所述字节码进行部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码可在所述链下可信执行环境中执行,且执行结果可通过所述预言机机制反馈至所述区块链节点。

可选的,报告提供单元1601具体用于:

使所述链下隐私计算节点接收区块链节点通过预言机机制传输的挑战信息,所述挑战信息由所述区块链节点从所述客户端提交的挑战交易中提取得到;或者,

使所述链下隐私计算节点接收所述客户端发起的链下挑战。

可选的,报告提供单元1601具体用于:

使所述链下隐私计算节点接收所述客户端直接发起的挑战;或者,

在所述链下隐私计算节点属于链下隐私计算集群的情况下,使所述链下隐私计算节点接收所述链下隐私计算集群的控制节点转发的挑战,所述挑战由所述客户端向所述控制节点发起且挑战目标被所述客户端设定为所述链下隐私计算节点;或者,

使所述链下隐私计算节点接收所述链下隐私计算集群的控制节点转发的挑战,所述挑战由所述客户端向所述控制节点发起且挑战目标未设定,所述链下隐私计算节点由所述控制节点从所述链下隐私计算集群中选取。

可选的,还包括:

信息产生单元1604,使所述链下隐私计算节点响应于所述挑战而产生所述自荐信息,所述远程证明报告由所述认证服务器对所述自荐信息进行验证后生成;或者,使所述链下隐私计算节点响应于其他挑战者的挑战而产生所述自荐信息,所述远程证明报告由所述认证服务器对所述自荐信息进行验证后生成。

可选的,所述远程证明报告由所述认证服务器进行签名,所述远程证明报告携带所述自荐信息,所述自荐信息包含第一待检验哈希值,所述第一待检验哈希值为所述链下可信执行环境的预设信息的哈希值,所述第一待检验哈希值用于与所述客户端预先获得的针对所述链下可信执行环境的可信哈希值进行比较,且比较结果一致被作为所述客户端确认所述链下隐私计算节点可信的前提条件。

可选的,还包括:

第一身份提供单元1605,使所述链下隐私计算节点向所述客户端提供的节点身份信息,所述节点身份信息与代表所述链下隐私计算节点的身份的密钥相关;

其中,所述自荐信息内还包含第二待检验哈希值,所述第二待检验哈希值为所述链下隐私计算节点生成所述自荐信息时的节点身份信息的哈希值,所述第二待检验哈希值用于与所述节点身份信息进行比较,且比较结果一致被作为所述客户端确认所述链下隐私计算节点可信的前提条件。

可选的,还包括:

第二身份提供单元1606,使所述链下隐私计算节点向所述客户端提供的节点身份信息,所述节点身份信息与代表所述链下隐私计算节点的身份的密钥相关,且所述节点身份信息包含与所述链下可信执行环境相关的信息;

其中,所述远程证明报告由所述认证服务器进行签名;所述远程证明报告携带所述自荐信息,所述自荐信息包含待检验哈希值,所述待检验哈希值用于与所述客户端获得的节点身份信息的哈希值进行比较,且比较结果一致被作为所述客户端确认所述链下隐私计算节点可信的前提条件。

可选的,合约接收单元1602具体用于:

使所述链下隐私计算节点接收区块链节点通过预言机机制传输的字节码密文,所述字节码密文由所述区块链节点在自身创建的链上可信执行环境内对客户端提交的加密后的链下合约部署交易进行解密后得到;或者,

使所述链下隐私计算节点接收所述客户端链下加密传输的所述字节码。

可选的,合约接收单元1602具体用于:

使所述链下隐私计算节点直接从所述客户端处获得加密传输的所述字节码;或者,

在所述链下隐私计算节点属于链下隐私计算集群的情况下,使所述链下隐私计算节点接收所述链下隐私计算集群的控制节点转发的字节码密文,所述字节码密文由所述客户端传输至所述控制节点。

可选的,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述链下隐私计算节点所维护。

可选的,在所述链下隐私计算节点属于链下隐私计算集群的情况下,所述非对称密钥对的私钥仅被所述链下隐私计算节点所维护,或者所述非对称密钥对的私钥被所述链下隐私计算集群内的所有链下隐私计算节点共同维护。

可选的,所述链下可信执行环境中部署有若干执行引擎;所述装置还包括:

信息接收单元1607,使所述链下隐私计算节点接收所述客户端发送的与所述字节码相关联的执行引擎指定信息;

引擎设定单元1608,所述链下隐私计算节点根据所述执行引擎指定信息为所述字节码设定相应的执行引擎。

可选的,还包括:

结果生成单元1609,使所述链下隐私计算节点生成部署结果信息,所述部署结果信息包含所述链下隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;

结果返回单元1610,使所述链下隐私计算节点向所述客户端返回所述部署结果信息,所述第一哈希值用于与所述客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为所述客户端确认所述链下合约在所述链下隐私计算节点处部署成功的前提条件。

请参考图17,在区块链节点侧的软件实施方式中,该部署合约的装置可以包括:

报告传输单元1701,使区块链节点接收客户端发起的挑战交易,并向所述客户端返回链下隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述链下隐私计算节点上创建的链下可信执行环境相关;

合约获取单元1702,使所述区块链节点接收所述客户端发起的经过加密的链下合约部署交易,在所述链上可信执行环境中解密得到所述链下合约部署交易所含的字节码密文,所述字节码密文由所述客户端对链下合约的字节码进行加密得到,所述链下合约部署交易由所述客户端在根据所述远程证明报告确定所述链下隐私计算节点可信的情况下发起;

合约传输单元1703,使所述区块链节点通过预言机机制将所述字节码密文传输至所述链下隐私计算节点,由所述链下隐私计算节点在所述链下可信执行环境中解密得到所述字节码并部署;其中,在所述区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码可在所述链下可信执行环境中执行,且执行结果可通过所述预言机机制反馈至所述区块链节点。

可选的,报告传输单元1701具体用于:

使所述区块链节点将经过加密的所述挑战交易读入所述链上可信执行环境中进行解密,得到所述挑战交易所含的挑战信息;

使所述区块链节点通过预言机机制将所述挑战信息传输至所述链下隐私计算节点,或者传输至所述链下隐私计算节点所属链下隐私计算集群的控制节点;

使所述区块链节点接收所述链下隐私计算节点或所述控制节点返回的远程证明报告并提供至所述客户端。

可选的,合约传输单元1703具体用于:

使所述区块链节点通过预言机机制直接将所述字节码密文传输至链下隐私计算节点;或者,

在所述链下隐私计算节点属于链下隐私计算集群的情况下,使所述区块链节点通过预言机机制将所述字节码密文传输至所述链下隐私计算集群的控制节点,并由所述控制节点转发至所述链下隐私计算节点;其中,所述字节码密文还被所述控制节点转发至所述链下隐私计算集群中的其他链下隐私计算节点。

可选的,

所述远程证明报告由所述链下隐私计算节点响应于所述客户端的挑战而触发产生;或者,

所述远程证明报告由所述链下隐私计算节点响应于其他挑战者的挑战而触发产生。

可选的,所述远程证明报告由所述认证服务器进行签名,且所述远程证明报告携带所述自荐信息,所述自荐信息包含第一待检验哈希值,所述第一待检验哈希值为所述链下可信执行环境的预设信息的哈希值,所述第一待检验哈希值用于与所述客户端预先获得的针对所述链下可信执行环境的可信哈希值进行比较,且比较结果一致被作为所述客户端确认所述链下隐私计算节点可信的前提条件。

可选的,还包括:

第一身份转发单元1704,使所述区块链节点接收所述链下隐私计算节点返回的节点身份信息,并提供至所述客户端,所述节点身份信息与代表所述链下隐私计算节点的身份的密钥相关;

其中,所述自荐信息内还包含第二待检验哈希值,所述第二待检验哈希值为所述链下隐私计算节点生成所述自荐信息时的节点身份信息的哈希值,所述第二待检验哈希值用于与所述节点身份信息进行比较,且比较结果一致被作为所述客户端确认所述链下隐私计算节点可信的前提条件。

可选的,还包括:

第二身份转发单元1705,使所述区块链节点接收所述链下隐私计算节点返回的节点身份信息,并提供至所述客户端,所述节点身份信息与代表所述链下隐私计算节点的身份的密钥相关,且所述节点身份信息包含与所述链下可信执行环境相关的信息;

其中,所述远程证明报告由所述认证服务器进行签名;所述远程证明报告携带所述自荐信息,所述自荐信息包含待检验哈希值,所述待检验哈希值用于与所述客户端获得的节点身份信息的哈希值进行比较,且比较结果一致被作为所述客户端确认所述链下隐私计算节点可信的前提条件。

可选的,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述链下隐私计算节点所维护。

可选的,在所述链下隐私计算节点属于链下隐私计算集群的情况下,所述非对称密钥对的私钥仅被所述链下隐私计算节点所维护,或者所述非对称密钥对的私钥被所述链下隐私计算集群内的所有链下隐私计算节点共同维护。

可选的,所述链下可信执行环境中部署有若干执行引擎;所述装置还包括:

信息解密单元1706,使所述区块链节点在所述链上可信执行环境中解密得到所述链下合约部署交易所含的执行引擎指定信息;

引擎指定单元1707,使所述区块链节点通过预言机机制将所述执行引擎指定信息传输至所述链下隐私计算节点,所述执行引擎指定信息向所述链下隐私计算节点指示用于执行所述字节码的执行引擎。

可选的,还包括:

结果传输单元1708,使所述区块链节点接收所述链下隐私计算节点返回的部署结果信息,并提供至所述客户端,所述部署结果信息包含所述链下隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;

其中,所述第一哈希值用于与所述客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为所述客户端确认所述链下合约在所述链下隐私计算节点处部署成功的前提条件。

请参考图18,在控制节点侧的软件实施方式中,该部署合约的装置可以包括:

报告提供单元1801,使链下隐私计算集群的控制节点接收客户端发起的挑战,从所述链下隐私计算集群内选取一链下隐私计算节点,并向所述客户端提供被选取的链下隐私计算节点对应的远程证明报告,所述远程证明报告由认证服务器对所述被选取的链下隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述被选取的链下隐私计算节点上创建的链下可信执行环境相关;其中,所述链下隐私计算集群内的所有链下隐私计算节点的软硬件配置一致;

合约接收单元1802,使所述控制节点接收所述客户端加密传输的链下合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述链下隐私计算集群内的链下隐私计算节点可信的情况下发送;

合约转发单元1803,使所述控制节点将收到的字节码密文分别转发至所述链下隐私计算集群内的所有链下隐私计算节点,所述字节码密文可由各个链下隐私计算节点分别在自身的链下可信执行环境中解密得到所述字节码,并对所述字节码进行部署;其中,在区块链节点通过预言机机制对所述链下合约发起调用的情况下,部署的所述字节码可在任一链下隐私计算节点处的链下可信执行环境中执行,且执行结果可通过所述预言机机制反馈至所述区块链节点。

可选的,报告提供单元1801具体用于:

使所述控制节点接收区块链节点通过预言机机制传输的挑战信息,所述挑战信息由所述区块链节点从所述客户端提交的挑战交易中提取得到;或者,

使所述控制节点接收所述客户端发起的链下挑战。

可选的,

所述远程证明报告由所述被选取的链下隐私计算节点响应于所述客户端发起的挑战而触发产生;或者,

所述远程证明报告由所述被选取的链下隐私计算节点响应于其他挑战者的挑战而触发产生。

可选的,合约接收单元1802具体用于:

使所述控制节点接收区块链节点通过预言机机制传输的字节码密文,所述字节码密文由所述区块链节点在自身创建的链上可信执行环境内对客户端提交的加密后的链下合约部署交易进行解密后得到;或者,

使所述控制节点接收所述客户端链下加密传输的所述字节码。

可选的,所述被选取的链下隐私计算节点由所述客户端指定;或者,所述被选取的链下隐私计算节点由所述控制节点按照预设方式选取。

可选的,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述链下隐私计算集群内的所有链下隐私计算节点共同维护。

可选的,所述链下可信执行环境中部署有若干执行引擎;所述装置还包括:

引擎指定单元1804,使所述控制节点接收所述客户端发送的与所述字节码相关联的执行引擎指定信息,并转发至所述链下隐私计算集群内的所有链下隐私计算节点,所述执行引擎指定信息用于指示各个链下隐私计算节点为所述字节码设定相应的执行引擎。

可选的,还包括:

结果接收单元1805,使所述控制节点从所述链下隐私计算集群内的任一链下隐私计算节点处接收部署结果信息,所述部署结果信息包含所述任一链下隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;

结果返回单元1806,使所述控制节点向所述客户端返回所述部署结果信息,所述第一哈希值用于与所述客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为所述客户端确认所述链下合约在所述链下隐私计算集群内的链下隐私计算节点处部署成功的前提条件。

请参考图19,在另一客户端侧的软件实施方式中,该部署合约的装置可以包括:

验证单元1901,使客户端获取针对隐私计算节点的远程证明报告,所述远程证明报告由认证服务器对所述隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述隐私计算节点上创建的可信执行环境相关;

部署单元1902,使所述客户端在根据所述远程证明报告确定所述隐私计算节点可信的情况下,将智能合约的字节码加密传输至所述隐私计算节点,由所述隐私计算节点在所述可信执行环境中解密得到所述字节码并部署。

可选的,验证单元1901具体用于:

使所述客户端向所述隐私计算节点发起挑战,并接收所述隐私计算节点返回的远程证明报告;或者,

在所述隐私计算节点属于隐私计算集群的情况下,使所述客户端向所述隐私计算集群的控制节点发起挑战,并接收所述控制节点返回的远程证明报告。

可选的,验证单元1901具体用于:

使所述客户端向所述控制节点发起挑战且挑战目标被设定为所述隐私计算节点,使所述控制节点返回所述隐私计算节点的远程证明报告;或者,

使所述客户端向所述控制节点发起挑战且挑战目标未设定,使所述控制节点从所述隐私计算集群中选取所述隐私计算节点并返回所述隐私计算节点的远程证明报告。

可选的,

所述远程证明报告由所述隐私计算节点响应于所述客户端发起的挑战而触发产生;或者,

所述远程证明报告由所述隐私计算节点响应于其他挑战者的挑战而触发产生。

可选的,验证单元1901具体用于:

使所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证;

在签名通过验证且所述远程证明报告所含的远程认证结果为通过认证的情况下,使所述客户端从所述远程证明报告携带的所述自荐信息内提取出第一待检验哈希值,所述第一待检验哈希值为所述可信执行环境的预设信息的哈希值;

使所述客户端将预先获得的针对所述可信执行环境的可信哈希值与所述第一待检验哈希值进行比较,并将比较结果一致作为确认所述隐私计算节点可信的前提条件。

可选的,验证单元1901具体用于:

使所述客户端获取所述隐私计算节点提供的节点身份信息,所述节点身份信息与代表所述隐私计算节点的身份的密钥相关;

使所述客户端从所述远程证明报告携带的所述自荐信息内提取出第二待检验哈希值,所述第二待检验哈希值为所述隐私计算节点生成所述自荐信息时的节点身份信息的哈希值;

使所述客户端计算获取的节点身份信息的哈希值,将计算出的哈希值与所述第二待检验哈希值进行比较,并将比较结果一致作为确认所述隐私计算节点可信的前提条件。

可选的,验证单元1901具体用于:

使所述客户端获取所述隐私计算节点提供的节点身份信息,所述节点身份信息与代表所述隐私计算节点的身份的密钥相关,且所述节点身份信息包含与所述可信执行环境相关的信息;

使所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证;

在签名通过验证且所述远程证明报告所含的远程认证结果为通过认证的情况下,使所述客户端从所述远程证明报告携带的所述自荐信息内提取出待检验哈希值,所述待检验哈希值为所述隐私计算节点生成所述自荐信息时的节点身份信息的哈希值;

使所述客户端计算获取的节点身份信息的哈希值,将计算出的哈希值与所述待检验哈希值进行比较,并将比较结果一致作为确认所述隐私计算节点可信的前提条件。

可选的,部署单元1902具体用于:

使所述客户端直接将所述字节码加密传输至所述隐私计算节点;或者,

在所述隐私计算节点属于隐私计算集群的情况下,使所述客户端将所述字节码加密传输至所述隐私计算集群的控制节点,并由所述控制节点转发至所述隐私计算节点;其中,所述控制节点还转发至所述隐私计算集群中的其他隐私计算节点。

可选的,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述隐私计算节点所维护。

可选的,在所述隐私计算节点属于链下隐私计算集群的情况下,所述非对称密钥对的私钥仅被所述隐私计算节点所维护,或者所述非对称密钥对的私钥被所述隐私计算集群内的所有隐私计算节点共同维护。

可选的,所述可信执行环境中部署有若干执行引擎;所述装置还包括:

引擎指定单元1903,使所述客户端向所述隐私计算节点发送与所述字节码相关联的执行引擎指定信息,所述执行引擎指定信息向所述隐私计算节点指示用于执行所述字节码的执行引擎。

可选的,还包括:

结果接收单元1904,使所述客户端接收部署结果信息,所述部署结果信息包含所述隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;

结果验证单元1905,使所述客户端将所述第一哈希值与自身持有的字节码的第二哈希值进行比较,并在比较结果一致的情况下确认所述智能合约在所述隐私计算节点处部署成功。

请参考图20,在另一隐私计算节点侧的软件实施方式中,该部署合约的装置可以包括:

报告提供单元2001,使隐私计算节点接收源自客户端的挑战,向所述客户端提供远程证明报告,所述远程证明报告由认证服务器对所述隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述隐私计算节点上创建的可信执行环境相关;

合约接收单元2002,使所述隐私计算节点接收所述客户端加密传输的智能合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述隐私计算节点可信的情况下发送;

合约部署单元2003,使所述隐私计算节点在所述可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

可选的,报告提供单元2001具体用于:

使所述隐私计算节点接收所述客户端直接发起的挑战;或者,

在所述隐私计算节点属于隐私计算集群的情况下,使所述隐私计算节点接收所述隐私计算集群的控制节点转发的挑战,所述挑战由所述客户端向所述控制节点发起且挑战目标被所述客户端设定为所述隐私计算节点;或者,

使所述隐私计算节点接收所述隐私计算集群的控制节点转发的挑战,所述挑战由所述客户端向所述控制节点发起且挑战目标未设定,所述隐私计算节点由所述控制节点从所述隐私计算集群中选取。

可选的,还包括:

信息产生单元2004,使所述隐私计算节点响应于所述挑战而产生所述自荐信息,所述远程证明报告由所述认证服务器对所述自荐信息进行验证后生成;或者,使所述隐私计算节点响应于其他挑战者的挑战而产生所述自荐信息,所述远程证明报告由所述认证服务器对所述自荐信息进行验证后生成。

可选的,所述远程证明报告由所述认证服务器进行签名,所述远程证明报告携带所述自荐信息,所述自荐信息包含第一待检验哈希值,所述第一待检验哈希值为所述可信执行环境的预设信息的哈希值,所述第一待检验哈希值用于与所述客户端预先获得的针对所述可信执行环境的可信哈希值进行比较,且比较结果一致被作为所述客户端确认所述隐私计算节点可信的前提条件。

可选的,还包括:

第一身份提供单元2005,使所述隐私计算节点向所述客户端提供的节点身份信息,所述节点身份信息与代表所述隐私计算节点的身份的密钥相关;

其中,所述自荐信息内还包含第二待检验哈希值,所述第二待检验哈希值为所述隐私计算节点生成所述自荐信息时的节点身份信息的哈希值,所述第二待检验哈希值用于与所述节点身份信息进行比较,且比较结果一致被作为所述客户端确认所述隐私计算节点可信的前提条件。

可选的,还包括:

第二身份提供单元2006,使所述隐私计算节点向所述客户端提供的节点身份信息,所述节点身份信息与代表所述隐私计算节点的身份的密钥相关,且所述节点身份信息包含与所述可信执行环境相关的信息;

其中,所述远程证明报告由所述认证服务器进行签名;所述远程证明报告携带所述自荐信息,所述自荐信息包含待检验哈希值,所述待检验哈希值用于与所述客户端获得的节点身份信息的哈希值进行比较,且比较结果一致被作为所述客户端确认所述隐私计算节点可信的前提条件。

可选的,合约接收单元2002具体用于:

使所述隐私计算节点直接从所述客户端处获得加密传输的所述字节码;或者,

在所述隐私计算节点属于隐私计算集群的情况下,使所述隐私计算节点接收所述隐私计算集群的控制节点转发的字节码密文,所述字节码密文由所述客户端传输至所述控制节点。

可选的,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述隐私计算节点所维护。

可选的,在所述隐私计算节点属于隐私计算集群的情况下,所述非对称密钥对的私钥仅被所述隐私计算节点所维护,或者所述非对称密钥对的私钥被所述隐私计算集群内的所有隐私计算节点共同维护。

可选的,所述可信执行环境中部署有若干执行引擎;所述装置还包括:

信息接收单元2007,使所述隐私计算节点接收所述客户端发送的与所述字节码相关联的执行引擎指定信息;

引擎设定单元2008,使所述隐私计算节点根据所述执行引擎指定信息为所述字节码设定相应的执行引擎。

可选的,还包括:

结果生成单元2009,使所述隐私计算节点生成部署结果信息,所述部署结果信息包含所述隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;

结果返回单元2010,使所述隐私计算节点向所述客户端返回所述部署结果信息,所述第一哈希值用于与所述客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为所述客户端确认所述智能合约在所述隐私计算节点处部署成功的前提条件。

请参考图21,在另一控制节点侧的软件实施方式中,该部署合约的装置可以包括:

报告提供单元2101,使隐私计算集群的控制节点接收客户端发起的挑战,从所述隐私计算集群内选取一隐私计算节点,并向所述客户端提供被选取的隐私计算节点对应的远程证明报告,所述远程证明报告由认证服务器对所述被选取的隐私计算节点产生的自荐信息进行验证后生成,所述自荐信息与所述被选取的隐私计算节点上创建的可信执行环境相关;其中,所述隐私计算集群内的所有隐私计算节点的软硬件配置一致;

合约接收单元2102,使所述控制节点接收所述客户端加密传输的智能合约的字节码,所述字节码由所述客户端在根据所述远程证明报告确定所述隐私计算集群内的隐私计算节点可信的情况下发送;

合约转发单元2103,使所述控制节点将收到的字节码密文分别转发至所述隐私计算集群内的所有隐私计算节点,所述字节码密文可由各个隐私计算节点分别在自身的可信执行环境中解密得到所述字节码,并对所述字节码进行部署。

可选的,

所述远程证明报告由所述被选取的隐私计算节点响应于所述客户端发起的挑战而触发产生;或者,

所述远程证明报告由所述被选取的隐私计算节点响应于其他挑战者的挑战而触发产生。

可选的,所述被选取的隐私计算节点由所述客户端指定;或者,所述被选取的隐私计算节点由所述控制节点按照预设方式选取。

可选的,所述字节码由非对称密钥对的公钥进行加密后传输,且所述非对称密钥对的私钥被所述隐私计算集群内的所有隐私计算节点共同维护。

可选的,所述链下可信执行环境中部署有若干执行引擎;所述装置还包括:

引擎指定单元2104,使所述控制节点接收所述客户端发送的与所述字节码相关联的执行引擎指定信息,并转发至所述隐私计算集群内的所有隐私计算节点,所述执行引擎指定信息用于指示各个隐私计算节点为所述字节码设定相应的执行引擎。

可选的,还包括:

结果接收单元2105,使所述控制节点从所述隐私计算集群内的任一隐私计算节点处接收部署结果信息,所述部署结果信息包含所述任一隐私计算节点对所部署的字节码进行哈希运算得到的第一哈希值;

结果返回单元2106,使所述控制节点向所述客户端返回所述部署结果信息,所述第一哈希值用于与所述客户端持有的字节码的第二哈希值进行比较,且比较结果一致被作为所述客户端确认所述智能合约在所述隐私计算集群内的隐私计算节点处部署成功的前提条件。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

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

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

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

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

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

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

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

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1