验证合约的方法及装置与流程

文档序号:20600717发布日期:2020-05-01 21:37阅读:483来源:国知局
验证合约的方法及装置与流程

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



背景技术:

在相关技术中,针对各种场景下的隐私需求,一种方式是通过同态加密(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是一示例性实施例提供的一种隐私计算节点侧的验证合约的装置的框图。

具体实施方式

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

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

区块链一般被划分为三种类型:公有链(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)技术证明上述的计算结果确实是在可信执行环境内按照预期执行,从而在确保可靠性的同时,极大地降低了链上的资源消耗。

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

与上述区块链节点类似,可在链下隐私计算节点上创建链下tee(即链下可信执行环境),该链下tee基于cpu硬件实现的与外部完全隔离的可信执行环境。链下隐私计算节点通过创建链下tee,可以通过该链下tee实现对链下合约的部署操作以及部署后的调用执行操作,并确保操作过程中的数据安全和隐私保护。举例而言,可在链下隐私计算节点上部署链下合约,并在该链下隐私计算节点创建的链下tee内部署wasm虚拟机。那么当用户向链下隐私计算节点发起一基于wasm程序的计算任务时,链下隐私计算节点可将链下合约读入链下tee内并编译成wasm字节码,以wasm虚拟机作为执行引擎,将编译得到的wasm字节码在wasm虚拟机中执行。

可配置单节点形式的链下隐私计算节点来执行计算任务;或者,可通过链下隐私计算集群的形式向用户提供高并发和高可用的隐私计算服务,从而解决节点的负载均衡、故障转移、动态扩展缩容等问题。其中,该链下隐私计算集群可以包含一控制节点和多个链下隐私计算节点,各节点用于部署相同的链下合约(至少一个)以执行计算任务,并由该控制节点对集群内的所有链下隐私计算节点进行统一管理。下面对控制节点管理链下隐私计算节点请求加入集群的过程进行说明。

当任一链下隐私计算节点请求加入链下隐私计算集群时,控制节点可以向该节点发起挑战,并接收该节点返回的远程证明报告。远程证明报告产生于针对链下隐私计算节点上的链下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服务器可以对签名进行验证,并向链下隐私计算节点返回相应的远程证明报告。

控制节点在获得链下隐私计算节点的远程证明报告之后,可以根据该远程证明报告来验证相应的链下隐私计算节点是否可信,具体指验证该链下隐私计算节点上部署的链下tee是否可信,并在确定链下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一致”作为确认链下tee可信的前提条件;换言之,如果待检验mrenclave与可信mrenclave不一致,或者待检验mrsigner与可信mrsigner不一致,控制节点就判定该链下隐私计算节点的链下tee不可信,而如果控制节点设定的所有前提条件都被满足,就可以确认该链下隐私计算节点的链下tee可信。此外,控制节点对于签名验证结果进行验证的操作,与针对待检验mrenclave和待检验mrsigner进行验证的操作之间,并不存在必然的先后顺序,两者之间可以完全独立。

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

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

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

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

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

基于上述验证链下隐私计算节点的方式,控制节点可将验证通过的节点加入链下隐私计算集群,从而建立一包含多个链下隐私计算节点的链下隐私计算集群。而在完成对链下隐私计算集群的建立后,需要为这些链下隐私计算节点生成统一的身份信息,比如称为集群身份密钥。集群身份密钥可以包括集群加密密钥对和集群签名密钥对,上述的各个链下隐私计算节点均需在各自的链下tee内维护集群加密私钥、集群签名私钥。通过为链下隐私计算集群中的各个节点生成统一的身份信息,与链下隐私计算集群对接的外部对象并不需要关注对方为单个链下隐私计算节点或者链下隐私计算集群,只需要将其作为一个对象并与该对象进行交互即可,无需关注于背后的节点或集群的细节。

图1是一示例性实施例提供的一种集群密钥共享方法的流程图。如图1所示,该方法可以包括以下步骤:

步骤102,链下隐私计算集群中的任一节点获取所述链下隐私计算集群中其他节点发送的第一远程证明报告,所述第一远程证明报告由认证服务器对所述其他节点针对创建的第一链下可信执行环境产生的第一自荐信息进行验证后生成。

在本实施例中,针对所述其他节点的第一远程证明报告和产生的第一自荐信息,可参考前述内容中的解释,在此不再赘述。而在获取第一远程证明报告后,所述任一节点可根据第一远程证明报告确定所述其他节点创建的第一链下可信执行环境是否可信。具体而言,可根据认证服务器的公钥对第一远程证明报告进行签名验证,并在签名验证通过且第一远程证明报告包含的远程认证结果为通过认证的情况下,从第一远程证明报告携带的第一自荐信息内提取出第一待检验哈希值,该第一待检验哈希值为第一链下可信执行环境中预设信息的哈希值。在提取出第一待检验哈希值后,将预先获得的针对所述预设信息的第一标准哈希值与所述第一待检验哈希值进行比较,并将比较结果一致作为确认所述第一链下可信执行环境可信的前提条件。类似的,确定第一链下可信执行环境是否可信的操作的具体过程,可参考上述控制节点确定待加入接点的链下可信执行环境是否可信的过程,在此不再赘述。

步骤104,所述任一节点获取对应于所述链下隐私计算集群的集群身份密钥,所述集群身份密钥在所述任一节点创建的第二链下可信执行环境内生成,在区块链节点与所述链下隐私计算集群中的各节点进行交互以部署或调用链下合约的过程中,所述集群身份密钥用于对交互数据进行加密解密和/或签名验签。

在本实施例中,在需要生成集群身份时,控制节点可以将某一链下隐私计算节点选取为主节点、其他的链下隐私计算节点为从节点,由主节点生成代表集群身份的密钥对(集群身份密钥),并进而将该密钥对分享至各个从节点,最终使得所有链下隐私计算节点都维护了统一的、代表集群身份的密钥对。例如,在链下隐私计算集群内的各个节点均已生成自身的节点身份信息之后,控制节点选取上述步骤104中的“任一节点”作为主节点,在自身创建的链下tee内生成对应于链下隐私计算集群的集群身份密钥,进而在需要向其他节点共享集群身份密钥时,获取生成的集群身份密钥实施共享操作。

步骤106,所述任一节点在根据所述第一远程证明报告确定所述第一链下可信执行环境可信的情况下,向所述其他节点发送所述集群身份密钥和第二远程证明报告,在所述第二远程证明报告表明所述第二链下可信执行环境可信的情况下,所述集群身份密钥被所述其他节点认可,所述第二远程证明报告由认证服务器对所述任一节点针对所述第二链下可信执行环境产生的第二自荐信息进行验证后生成。

在本实施例中,所述其他节点在确定出第二远程证明报告表明第二链下可信执行环境可信的情况下认可集群身份密钥,从而在自身的第一链下可信执行环境内维护集群身份密钥。

而所述任一节点在向所述其他节点发送所述集群身份密钥之前,可先对所述其他节点的第一节点身份信息进行验证。进一步的,由于第一节点身份信息中包含所述其他节点的节点身份公钥,可在验证通过的情况下获取第一节点身份信息中包含的节点身份公钥以对集群身份密钥进行加密,使得只有所述其他节点通过自身的节点身份私钥才可对集群身份密钥进行解密,从而保证了所述任一节点向所述其他节点共享集群身份密钥的安全性。具体而言,所述任一节点可获取所述其他节点提供的第一节点身份信息(比如,所述其他节点可将第一节点身份信息与第一远程证明报告关联发送至所述任一节点),并对获取到的第一节点身份信息进行哈希计算以得到第二待校验哈希值,所述第一节点身份信息包含所述其他节点的节点身份公钥和所述其他节点的其他身份信息。同时,所述任一节点获取所述其他节点提供的第二标准哈希值(比如,第二标准哈希值可包含在第一远程证明报告中),所述第二标准哈希值由所述其他节点在所述第一链下可信执行环境内生成自身的节点身份信息后对生成的节点身份信息进行哈希计算得到。进一步的,所述任一节点将第二待校验哈希值与第二标准哈希值进行比较,并在比较结果一致的情况下获取所述其他节点的节点身份信息中包含的节点身份公钥,从而采用所述任一节点的节点身份私钥对所述集群身份密钥进行签名,并采用所述其他节点的节点身份公钥对签名后的集群身份密钥进行加密。所述任一节点在向所述其他节点共享加密后的集群身份密钥时,将自身的第二远程证明报告与加密后的集群身份密钥关联发送至所述其他节点以证明身份。那么,所述其他节点在根据第二远程证明报告确定所述任一节点创建的第二链下可信执行环境可信的情况下,采用所述其他节点的节点身份私钥对接收到的集群身份密钥进行解密,以及采用所述任一节点的节点身份信息中包含的节点身份公钥验证所述集群身份密钥的签名,并在签名验证通过的情况下在所述第一链下可信执行环境内维护所述集群身份密钥。

而针对获取所述任一节点的节点身份公钥的方式,与所述任一节点获取所述其他节点的节点身份公钥的方式类似。具体而言,所述任一节点可向所述其他节点提供第二节点身份信息(比如,所述任一节点可将第二节点身份信息与第二远程证明报告关联发送至所述其他节点),第二节点身份信息包含所述任一节点的节点身份公钥和所述任一节点的其他身份信息。同时,所述任一节点向所述其他节点提供第三标准哈希值(比如,第三标准哈希值可包含在第二远程证明报告中),所述第三标准哈希值由所述任一节点在所述第二链下可信执行环境内生成自身的节点身份信息后对生成的节点身份信息进行哈希计算得到。那么,所述其他节点在对第二节点身份信息进行哈希计算得到的第三待校验哈希值与第三标准哈希值一致的情况下,采用所述其他节点的节点身份私钥对接收到的集群身份密钥进行解密,以及采用所述任一节点的节点身份信息中包含的节点身份公钥验证所述集群身份密钥的签名,并在签名验证通过的情况下在所述第一链下可信执行环境内维护所述集群身份密钥。

由此可见,所述任一节点在向所述其他节点共享集群身份密钥之前,需对所述其他节点进行验证,而所述其他节点在接收到所述任一节点共享的集群身份密钥之后,同样也需要对所述任一节点进行验证,从而保证共享集群身份密钥的安全性。

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

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

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

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

无论是针对单节点形式的链下隐私计算节点,还是链下隐私计算集群的形式,链下合约的部署方均可在链下隐私计算节点中部署链下合约,以供后续调用执行计算任务。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

或者,针对链下隐私计算集群的情况,基于各个链下隐私计算节点在各自的链下tee内均维护有集群身份密钥,可将链下隐私计算集群视为一个整体,由控制节点在选取响应客户端的节点,链下隐私计算集群中各节点在与外界设备(比如区块链节点、客户端等)进行交互的过程中,并非采用自身的节点身份密钥,而是采用集群身份密钥对交互数据进行加密与解密,或者生成与验证签名。其中,采用集群身份密钥进行加密与解密,或者生成与验证签名的方式与上述采用节点身份密钥的过程类似,在此不再赘述。

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

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

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

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

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

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

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

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

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

当链下隐私计算节点属于链下隐私计算集群时,由控制节点对集群内的所有链下隐私计算节点进行统一管理,那么客户端在部署链上合约的过程中,首先将字节码加密传输至控制节点,然后由控制节点转发至集群内的一个或多个链下隐私计算节点,从而将链上合约的字节码部署至集群内的一个或多个链下隐私计算节点。如果部署至多个链下隐私计算节点,那么这些链下隐私计算节点可以同时向外提供针对同一链下合约的调用能力,从而实现并行的链下隐私计算,还可以在多个链下隐私计算节点之间实现负载均衡。

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

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

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

以图1实施例中的所述任一节点为例,部署方在向所述任一节点部署目标链下合约之前,可向所述任一节点发起挑战,那么所述任一节点可响应于部署方发起的挑战,向部署方提供自身的远程证明报告,即第二远程证明报告。其中,部署方可在根据第二远程证明报告确定第二链下可信执行环境(即所述任一节点创建的链下可信执行环境)可信的情况下发送加密后的目标链下合约。比如,可采用集群身份密钥中的集群身份公钥对目标链下合约的字节码进行加密,再将加密后的字节码发送至所述任一节点。所述任一节点在接收到被加密的目标链下合约后,在第二链下可信执行环境中通过集群身份密钥中的集群身份私钥解密目标链下合约并进行部署。而在完成对目标链下合约的部署之后,在区块链节点通过预言机机制对所述目标链下合约发起调用的情况下,所述任一节点可在第二链下可信执行环境中执行目标链下合约,并通过预言机机制将执行结果反馈至区块链节点。

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

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

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

在本说明书的技术方案中,除了链下隐私计算节点可以存在统一的集群身份之外,可以为链下隐私计算节点上部署的链下合约生成合约身份。当集群内存在多个链下隐私计算节点时,每个链下隐私计算节点可以为自身已部署的链下合约建立合约身份,且不同链下隐私计算节点针对同一链下合约生成的合约身份相同。

以上述在各个节点处部署目标链下合约为例,当在链下隐私计算集群中的任一节点中部署目标链下合约时,该任一节点可针对目标链下合约生成合约身份密钥。作为一示例性实施例,该任一节点在创建的链下可信执行环境内采用链下隐私计算集群内各节点之间共用的密钥生成算法,基于链下隐私计算集群内各节点的共用因子和目标链下合约的全局标识信息(隐私计算集群中各节点部署的链下合约相同,且各节点部署的同一链下合约的全局标识信息相同),生成对应于目标链下合约的合约身份密钥。其中,目标链下合约在区块链节点通过预言机机制对部署于该任一节点的目标链下合约发起调用的情况下在该任一节点的链下可信执行环境内执行,且执行结果在该任一节点的链下可信执行环境内被采用合约身份密钥进行签名,经签名后的执行结果可通过预言机机制反馈至区块链节点。可见,各个链下隐私计算节点通过上述方式来为自身已部署的链下合约生成合约身份密钥,可以保证各个节点针对同一链下合约生成的合约身份密钥也相同。同时,相比于由任一节点来统一生成合约身份密钥再向其他节点共享的方式,合约身份密钥由各个节点自身生成的效率更高。需要说明的是,密钥生成算法可根据实际情况灵活选取,比如bcrypt算法、scrypt算法、pbkdf2等。

在一种情况下,共用因子可由控制节点生成,并由控制节点在各个节点加入集群时统一下发,那么加入集群的每个节点均可维护该共用因子。在另一种情况下,共用因子包括对应于隐私计算集群的集群身份密钥,该集群身份密钥用于在区块链节点与所述链下隐私计算集群中的各节点进行交互以部署或调用链下合约的过程中,对交互数据进行加密解密和/或签名验签。

举例而言,合约身份密钥可以包括合约加密密钥对和合约签名密钥对;其中,合约身份公钥包含合约加密密钥对中的公钥和合约签名密钥对中的公钥,合约身份私钥包含合约加密密钥对中的私钥和合约签名密钥对中的私钥。那么,客户端或区块链节点除了采用集群身份公钥对调用请求进行加密之外,还可以采用合约加密公钥对调用请求内所含的入参数据的信息进行加密。链下隐私计算节点在收到针对某一链下合约的调用请求后,采用该链下合约对应的合约加密私钥对调用请求内加密后的入参数据的信息进行解密,从而确保入参数据的信息只能由被调用的链下合约所获得,而不会被其他链下合约获得。以及,在得到目标链下合约的执行结果后,链下隐私计算节点在通过预言机机制将执行结果反馈至区块链节点之前,在自身的链下可信执行环境内采用目标链下合约的合约身份私钥对执行结果进行签名,那么,签名后的执行结果在采用目标链下合约的合约身份公钥对执行结果进行签名验证且通过签名验证的情况下,被判定由目标链下合约生成。换言之,链下隐私计算节点可以通过被调用的链下合约的合约签名私钥对执行结果进行签名,而客户端或节点可以通过合约签名公钥进行验签,从而确定该执行结果确实是由被调用的链下合约所产生

链下隐私计算节点可以选取统一的集群身份密钥和链下合约的合约id,并采用密钥衍生算法对集群身份密钥和合约id进行衍生以得到相应的合约身份密钥,由于集群身份密钥相同、而不同链下合约的合约id必然不同,因而可以确保:同一链下隐私计算节点上部署的不同链下合约存在不同的合约身份,而不同链下隐私计算节点上部署的同一链下合约存在相同的合约身份。相应地,控制节点在分配收到的调用请求时,只需要关注于集群内的各个链下隐私计算节点的空闲程度,并基于空闲程度进行任务分配,而无需关注其他信息。其中,密钥衍生算法可根据实际情况灵活选取,比如可以采用pbkdf2密钥衍生算法,当然本说明书并不对此进行限制。

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

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

用户通过客户端调用目标链下合约之前,可对链下隐私计算节点中部署的目标链下合约发起挑战,以确保链下隐私计算节点中部署的目标链下合约可信,进而按照用户预期执行计算任务。

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

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

在本实施例中,包含单节点和链下隐私计算集群两种形式。其中,针对单节点形式,链下隐私计算节点的身份信息为该链下隐私计算节点的节点身份信息,链下隐私计算节点的身份私钥为该链下隐私计算节点的节点身份私钥,链下隐私计算节点的身份公钥为该链下隐私计算节点的节点身份公钥。针对链下隐私计算集群的形式,在链下隐私计算节点属于链下隐私计算集群的情况下,链下隐私计算节点代表链下隐私计算集群与外部对象交互。因此,链下隐私计算节点的身份信息为该链下隐私计算集群的集群身份信息,链下隐私计算节点的身份公钥为该链下隐私计算集群的集群身份密钥中的集群身份公钥,链下隐私计算节点的身份私钥为集群身份密钥中的集群身份私钥。其中,在区块链节点与链下隐私计算集群中的各节点进行交互以部署或调用链下合约的过程中,集群身份密钥用于对交互数据进行加密解密和/或签名验签。

以第一身份信息为例,针对单节点形式,链下隐私计算节点提供的第一身份信息为该链下隐私计算节点的节点身份信息(不包含节点身份私钥),身份公钥为该链下隐私计算节点的节点身份公钥,其他身份信息(身份信息中除身份公钥以外的其他身份信息)为链下隐私计算节点的其他节点身份信息,即节点身份信息中除节点身份公钥以外的其他节点身份信息。针对链下隐私计算集群的形式,链下隐私计算节点提供的第一身份信息为链下隐私计算集群的集群身份信息,身份公钥为链下隐私计算集群的集群身份公钥,其他身份信息(身份信息中除身份公钥以外的其他身份信息)为上述其他节点身份信息。而针对链下隐私计算节点提供的第二身份信息,在第一身份信息的基础上,还包含链下可信执行环境的预设信息的哈希值,包含的其他内容相同,在此不再赘述。

步骤704,所述客户端在根据所述远程证明报告确定所述链下可信执行环境可信的情况下,获取部署于所述链下隐私计算节点处的目标链下合约的待验证合约信息,所述待验证合约信息被所述链下隐私计算节点在所述链下可信执行环境内采用所述链下隐私计算节点的身份私钥进行签名,所述身份私钥由所述链下隐私计算节点在所述链下可信执行环境内维护。

步骤706,所述客户端采用所述链下隐私计算节点的节点身份公钥对所述待验证合约信息进行签名验证,以及根据所述目标链下合约的合约信息对所述待验证合约信息进行合约信息验证,并在签名验证和合约信息验证通过的情况下,确定所述客户端在通过区块链节点的预言机机制对所述目标链下合约发起调用时,所述目标链下合约由所述链下隐私计算节点在所述链下可信执行环境中执行。

下面结合图8针对单节点形式的挑战过程进行说明。如图8所示,针对单节点的形式,与图3所示实施例类似,客户端81可向链下隐私计算节点82发起链下挑战或者链上挑战。链上挑战的发起过程可以包括三个步骤:步骤①,客户端81向区块链网络83提交一笔用于向目标链下合约发起挑战的交易,比如称之为挑战交易,该挑战交易可由区块链网络83内的某一节点83n接收和执行;步骤②,节点83n调用预先部署的预言机合约,该预言机合约可以将上述挑战交易所含的挑战信息传递至链下的预言机服务器84,比如预言机合约可以产生包含该挑战信息的事件,而预言机服务器84可以通过监听预言机合约产生的事件,从而获取上述的挑战信息;步骤③,预言机服务器84将挑战信息通过链下渠道发送至控制节点82。

通过对链下隐私计算节点82部署的目标链下合约发起挑战,客户端81可获取针对链下隐私计算节点82创建的链下tee的远程证明报告,该远程证明报告由认证服务器对链下隐私计算节点82针对链下tee产生的自荐信息进行验证后生成。在一种情况下,由客户端81向链下隐私计算节点82发起挑战,挑战目标为链下隐私计算节点82部署的目标链下合约,进而接收链下隐私计算节点82响应于该挑战返回的所述远程证明报告和所述待验证合约信息,即链下隐私计算节点82响应于该挑战,将所述远程证明报告和所述待验证合约信息一次性返回至客户端81。在另一种情况下,由客户端81向链下隐私计算节点82发起挑战,挑战目标为链下隐私计算节点82创建的链下tee,进而接收链下隐私计算节点82返回的远程证明报告,并在根据所述远程证明报告确定所述链下tee可信的情况下,向链下隐私计算节点82发送针对部署于链下隐私计算节点82处的目标链下合约的合约信息的获取请求,接收链下隐私计算节点82响应于所述获取请求返回的待验证合约信息。而在根据所述远程证明报告确定所述链下tee不可信的情况下,则无需再向链下隐私计算节点82请求获取目标链下合约的合约信息(即待验证合约信息)。

其中,客户端81可通过链上挑战向挑战目标发起挑战。比如,向区块链节点83n提交针对挑战目标的挑战交易,该挑战交易包含的挑战信息由区块链节点83n通过预言机机制传输至链下隐私计算节点82,所述挑战信息用于向挑战目标发起挑战。或者,客户端81直接向链下隐私计算节点82中的挑战目标发起链下挑战。

在本实施例中,客户端81根据远程证明报告对链下隐私计算节点82的链下tee进行验证的操作可以包括:根据认证服务器的公钥对远程证明报告进行签名验证,并在签名验证通过且远程证明报告包含的远程认证结果为通过认证的情况下,从远程证明报告携带的自荐信息内提取出第一待检验哈希值,第一待检验哈希值为链下tee的预设信息的哈希值,再将预先获得的针对该链下tee的第一标准哈希值与第一待检验哈希值进行比较。其中,将比较结果一致作为确认该链下tee可信的前提条件。需要说明的是,此部分内容可参考前述控制节点验证待加入节点的过程,在此不再赘述。

如图8所示,在一实施例中,链下隐私计算节点82在链下tee内生成自身的节点身份信息后,可对生成的节点身份信息进行哈希计算得到第二标准哈希值;其中,所生成的节点身份信息中包含链下隐私计算节点82的节点身份公钥和链下隐私计算节点82的其他身份信息。那么,客户端81可利用第二标准哈希值验证链下隐私计算节点82提供的第一节点身份信息(即声明的节点身份信息,包含链下隐私计算节点82的节点身份公钥和链下隐私计算节点82的其他身份信息,不一定为真实数据,此时可理解为待验证身份信息),并在验证通过的情况下获取可验证链下隐私计算节点82的节点身份信息中包含的节点身份公钥,从而利用该节点身份公钥完成后续对目标链下合约的验证。比如,客户端对获取到的第一节点身份信息进行哈希计算以得到第二待校验哈希值,并将第二待校验哈希值与链下隐私计算节点82提供的第二标准哈希值进行比较,从而在比较结果一致的情况下判定节点身份信息验证通过。由于节点身份信息由链下隐私计算节点82在链下tee内生成并计算得到第二标准哈希值,那么在根据远程证明报告判定链下tee可信后,若第二待校验哈希值与第二标准哈希值相同,则说明隐私计算节点82提供的第一节点身份信息为在链下tee内生成的节点身份信息,从而其中包含的节点身份公钥为隐私计算节点82实际的节点身份公钥,而隐私计算节点82实际的节点身份公钥可用于验证隐私计算节点82的签名。其中,链下隐私计算节点82可将第二标准哈希值、远程证明报告、第一节点身份信息一同发送至客户端81。需要说明的是,此部分内容可参考前述控制节点验证待加入节点的过程,在此不再赘述。

如图8所示,在另一实施例中,链下隐私计算节点82在链下tee内生成自身的节点身份信息包含链下隐私计算节点82的节点身份公钥、链下隐私计算节点82的其他身份信息和链下tee的预设信息的哈希值,那么链下隐私计算节点82在自身的链下tee内生成节点身份信息后,对生成的节点身份信息进行哈希计算得到第三标准哈希值,那么第三标准哈希值相当于同时实现了上述第一待检验哈希值和第二标准哈希值的作用。具体而言,链下隐私计算节点82可向客户端81提供远程证明报告、第三标准哈希值和第二节点身份信息(此时可理解为待验证身份信息)。其中,第二节点身份信息包含链下隐私计算节点82的节点身份公钥、链下隐私计算节点82的其他身份信息和第四待校验哈希值,第四待校验哈希值为链下tee的预设信息的哈希值;同时,第二节点身份信息为声明的节点身份信息,并不一定为链下隐私计算节点82的真实节点身份信息。那么,客户端81在根据认证服务器的公钥对远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,对获取到的第二节点身份信息进行哈希计算以得到第三待校验哈希值,并将第三待校验哈希值与第三标准哈希值进行比较。当比较结果为一致时,说明隐私计算节点82提供的第二节点身份信息为在链下tee内生成的节点身份信息,也即其中包含的第四待校验哈希值为链下tee的实际预设信息的哈希值。因此,进一步将预先获得的针对所述链下tee预设信息的第四标准哈希值与第四待检验哈希值进行比较,并将比较结果一致作为确认所述链下tee可信的前提条件。同时,第二节点身份信息包含的节点身份公钥可判定为隐私计算节点82实际的节点身份公钥,可用于对待验证合约信息进行签名验证。其中,链下隐私计算节点82可将第三标准哈希值、远程证明报告、第二节点身份信息一同发送至客户端81。需要说明的是,此部分内容可参考前述控制节点验证待加入节点的过程,在此不再赘述。

客户端81在根据远程证明报告确定链下tee可信的情况下,获取部署于链下隐私计算节点82处的目标链下合约的待验证合约信息,待验证合约信息被链下隐私计算节点82在链下tee内采用自身的节点身份私钥进行签名,节点身份私钥由链下隐私计算节点82在链下tee内生成。比如,链下隐私计算节点82可将部署的目标链下合约读入链下tee内并采用自身的节点身份私钥进行签名。

客户端81采用链下隐私计算节点82的节点身份公钥对待验证合约信息进行签名验证,以及根据目标链下合约的合约信息对待验证合约信息进行合约信息验证。其中,节点身份公钥处于公开状态,比如链下隐私计算节点82向外公开发布节点身份公钥以由客户端81获取。或者,客户端81通过上述验证链下隐私计算节点82的节点身份信息的方式获取。同时,目标链下合约的合约信息也可处于公开状态,比如目标链下合约的部署方向外公开发布合约信息以由客户端81获取。其中,合约信息可以包括链下合约的名称、描述、版本号、字节码哈希值、合约身份公钥等信息,本说明书并不对此进行限制。

在签名验证和合约信息验证通过的情况下,客户端81可确定客户端81在通过区块链节点的预言机机制对目标链下合约发起调用时,该目标链下合约由链下隐私计算节点82在链下tee可信执行环境中执行。本说明书中验证链下合约的过程为先验证链下隐私计算节点82的链下tee可信,那么在验证链下隐私计算节点82的链下tee可信的情况下,若验证签名得到链下隐私计算节点82提供的待验证合约信息确实由链下隐私计算节点82的节点身份私钥(维护在链下tee内)签名,则可确定出当前挑战的链下合约为运行在链下隐私计算节点82的链下tee内的目标链下合约,即确保链下隐私计算节点82中部署的目标链下合约可信,可按照用户预期执行计算任务。

下面结合图9针对集群形式的挑战过程进行说明。如图9所示,针对链下隐私计算集群的形式,与图4所示实施例类似,客户端91可向控制节点92发起链下挑战或者链上挑战。链上挑战的发起过程可以包括三个步骤:步骤①,客户端91向区块链网络93提交一笔用于向目标链下合约发起挑战的交易,比如称之为挑战交易,该挑战交易可由区块链网络93内的某一节点93n接收和执行;步骤②,节点93n调用预先部署的预言机合约,该预言机合约可以将上述挑战交易所含的挑战信息传递至链下的预言机服务器94,比如预言机合约可以产生包含该挑战信息的事件,而预言机服务器94可以通过监听预言机合约产生的事件,从而获取上述的挑战信息;步骤③,预言机服务器94将挑战信息通过链下渠道发送至控制节点92。

链下隐私计算集群作为一个整体向外提供执行计算任务的功能。其中,集群内各个节点均部署有相同的链下合约,那么各个节点均可以代表集群来执行计算任务,比如,计算任务可由控制节点来分配。因此,各个节点在代表集群与外部进行数据交互时,使用代表集群身份的集群身份密钥来对与外部交互的数据进行解密或签名,而非使用节点自身的节点身份密钥。相应的,外部对象在通过客户端与集群进行交互时,将集群视为一个整体而无需关心集群内部的结构,因此采用集群身份密钥进行加密或验证签名。

如图9所示,用户在通过客户端91调用集群中的目标链下合约之前,可通过客户端91对集群中部署的目标链下合约发起挑战。控制节点92在接收到挑战后,可选取集群中的任意节点来响应该挑战。比如,可选取上述用于生成集群身份密钥的主节点,或者选取集群中的从节点,本说明书并不对选取响应挑战的节点的方式进行限制。以节点92n响应挑战为例进行说明。控制节点92选取节点92n来代表集群响应挑战,向挑战方提供代表集群的集群远程证明报告。其中,集群远程证明报告由认证服务器对节点92n针对自身的链下tee产生的自荐信息进行验证后生成,即集群远程证明报告为对应于节点92n的链下tee的远程证明报告。具体而言,集群远程证明报告携带的自荐信息内包含第一待检验哈希值,该第一待检验哈希值为节点92n的链下tee的预设信息的哈希值,该第一待检验哈希值用于挑战方在根据认证服务器的公钥对集群远程证明报告进行签名验证并签名验证通过,且集群远程证明报告包含的远程认证结果为通过认证的情况下,与预先获得的针对链下tee的第一标准哈希值(比如,为链下tee的上述预设信息的可信哈希值)进行比较,且比较结果一致被作为挑战方确认链下tee可信的前提条件。其中,挑战方根据集群远程证明报告验证链下tee的过程可参考前述控制节点验证待加入节点的链下tee的内容,在此不再赘述。实际上,挑战方根据集群远程证明报告验证的链下tee为节点92n的链下tee。

如图9所示,在一实施例中,节点92n在链下tee内生成自身的节点身份信息时,还可在链下tee内生成代表集群的集群身份信息,并对生成的集群身份信息进行哈希计算得到第二标准哈希值;其中,所生成的集群身份信息中包含集群身份公钥和节点92n的节点身份信息中除节点身份公钥以外的其他身份信息。换言之,基于通过节点92n来代表集群,节点92n的节点身份信息与集群身份信息之间的差异在于:节点身份信息中记录的公钥为节点身份公钥,集群身份信息中记录的公钥为集群身份公钥;持此之外,其他身份信息相同。那么,客户端91可利用第二标准哈希值验证节点92n提供的第一集群身份信息(即声明的集群身份信息,包含集群身份公钥和节点92n的其他身份信息,不一定为真实数据,此时可理解为待验证身份信息),并在验证通过的情况下获取集群身份信息中包含的集群身份公钥,从而利用该集群身份公钥完成后续对目标链下合约的验证。比如,客户端对获取到的第一集群身份信息进行哈希计算以得到第二待校验哈希值,并将第二待校验哈希值与节点92n提供的第二标准哈希值进行比较,从而在比较结果一致的情况下判定集群身份验证通过。由于集群身份信息由节点92n在链下tee内生成并计算得到第二标准哈希值,那么在根据远程证明报告判定链下tee可信后,若第二待校验哈希值与第二标准哈希值相同,则说明隐私计算节点92提供的第一集群身份信息为在链下tee内生成的集群身份信息,从而其中包含的集群身份公钥为隐私计算节点92实际维护的对应于集群的集群身份公钥,而隐私计算节点92实际维护的集群身份公钥可用于验证隐私计算节点92的签名。其中,节点92n可通过控制节点92将第二标准哈希值、远程证明报告、第一集群身份信息一同发送至客户端91。需要说明的是,此部分内容可参考前述控制节点验证待加入节点的过程,在此不再赘述。

如图9所示,在另一实施例中,节点92n在链下tee内生成的集群身份信息可包含集群身份公钥、节点92n的节点身份信息中除节点身份公钥以外的其他身份信息和链下tee的预设信息的哈希值,那么节点92n在自身的链下tee内生成集群身份信息后,对生成的集群身份信息进行哈希计算得到第三标准哈希值,那么第三标准哈希值相当于同时实现了上述第一待检验哈希值和第二标准哈希值的作用。具体而言,节点92n可向客户端91提供远程证明报告、第三标准哈希值和第二集群身份信息(此时可理解为待验证身份信息)。其中,第二集群身份信息包含集群身份公钥、节点92n的其他身份信息和第四待校验哈希值,第四待校验哈希值为链下tee的预设信息的哈希值;同时,第二集群身份信息为声明的集群身份信息,并不一定为节点92n提供的真实集群身份信息。那么,客户端91在根据认证服务器的公钥对远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,对获取到的第二集群身份信息进行哈希计算以得到第三待校验哈希值,并将第三待校验哈希值与第三标准哈希值进行比较。当比较结果为一致时,说明隐私计算节点92提供的第二集群身份信息为在链下tee内生成的集群身份信息,也即其中包含的第四待校验哈希值为链下tee的实际预设信息的哈希值。因此,进一步将预先获得的针对所述链下tee预设信息的第四标准哈希值与第四待检验哈希值进行比较,并将比较结果一致作为确认所述链下tee可信的前提条件。同时,第二集群身份信息包含的集群身份公钥可判定为隐私计算节点92实际维护的集群身份公钥,可用于对待验证合约信息进行签名验证。其中,节点92n可通过控制节点92将第三标准哈希值、远程证明报告、第二集群身份信息一同发送至客户端91。需要说明的是,此部分内容可参考前述控制节点验证待加入节点的过程,在此不再赘述。

与上述图8所示的实施例类似,集群远程证明报告和待验证合约信息由节点92n发送至控制节点92,再由控制节点92转发至客户端91。控制节点92可一并向客户端91提供集群远程证明报告和待验证合约信息,也可先提供集群远程证明报告,并在客户端91根据集群远程证明报告验证通过后再向节点92n获取待验证合约信息以向客户端91提供待验证合约信息。其中,待验证合约信息为部署在节点92n处的目标链下合约的合约信息,并由节点92n在节点92n的链下tee内采用集群身份私钥(维护在节点92n的链下tee内)进行签名。比如,节点92n将部署在节点92n处的目标链下合约读入链下tee内,并采用集群身份私钥进行签名。

客户端91在根据集群远程证明报告确定链下tee可信(即节点92n的链下tee,由节点92n代表集群,用户感知不到集群内的其他节点)的情况下,采用集群身份公钥对待验证合约信息进行签名验证,以及根据目标链下合约的合约信息对待验证合约信息进行合约信息验证。其中,集群身份公钥处于公开状态,比如控制节点91向外公开发布集群身份公钥以由客户端91获取。或者,客户端91通过上述验证集群身份信息的方式获取。同时,目标链下合约的合约信息也可处于公开状态,比如目标链下合约的部署方向外公开发布合约信息以由客户端91获取。其中,合约信息可以包括链下合约的名称、描述、版本号、字节码哈希值、合约身份公钥等信息,本说明书并不对此进行限制。

与上述单节点形式中验证目标链下合约的原理类似,在签名验证和合约信息验证通过的情况下,客户端91可确定客户端91在通过区块链节点的预言机机制对目标链下合约发起调用时,该目标链下合约由节点92n在链下tee可信执行环境中执行,即确保节点92n中部署的目标链下合约可信,可按照用户预期执行计算任务。

需要说明的是,在链下隐私计算集群的形式中,各类远程证明报告可以具有一定的时限性,比如30分钟或其他时长,超时的远程证明报告被判定为失效。比如,共享集群身份密钥过程中涉及的远程证明报告均由节点实时向认证服务器控制节点获取,而集群远程证明报告可由控制节点在本地缓存并设定老化时长。

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

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

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

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

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

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

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

需要说明的是,本说明书中加密与解密,生成签名与验证签名,可采用同一组密钥对,或者分别配置一组加密密钥对和一组签名密钥对。其中,在一组密钥对中,对应于不同的加密算法,可能同时存在多个公钥和相应的私钥。下面以节点身份密钥为例进行说明,集群身份密钥和合约身份密钥与此类似。

在一种情况下,节点身份密钥为一组密钥对,包含节点身份公钥和节点身份私钥。其中,节点身份公钥可用于对数据进行加密,那么可采用节点身份私钥对该数据进行解密;节点身份私钥可用于对数据进行签名,那么可采用节点身份公钥对该数据进行签名验证。在另一种情况下,可配置两组密钥对,分别为节点加密密钥对和节点签名密钥对。其中,节点加密密钥对用于对数据进行加密与解密,节点签名密钥对用于对数据进行签名与验证签名。

对应于上述客户端侧的实施例,本说明书还提出了链下隐私计算节点侧的实施例,在客户端侧实施例中所涉及的描述同样可以适用于链下隐私计算节点侧的实施例,下文中不再对此进行赘述。

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

步骤1102,链下隐私计算节点向客户端提供针对所述链下隐私计算节点创建的链下可信执行环境的远程证明报告,所述远程证明报告由认证服务器对所述链下隐私计算节点针对所述链下可信执行环境产生的自荐信息进行验证后生成。

如前所述,所述链下隐私计算节点向客户端提供针对所述链下隐私计算节点创建的链下可信执行环境的远程证明报告的操作可以包括:接收所述客户端向所述链下隐私计算节点发起的挑战,向所述客户端返回所述远程证明报告;或者,在所述链下隐私计算节点属于链下隐私计算集群的情况下,在所述链下隐私计算集群的控制节点接收到所述客户端发起的挑战后,向所述控制节点发送所述远程证明报告,所述远程证明报告由所述控制节点返回至所述客户端。

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

步骤1104,所述链下隐私计算节点向所述客户端提供部署于所述链下隐私计算节点处的目标链下合约的待验证合约信息,所述待验证合约信息被所述链下隐私计算节点在所述链下可信执行环境内采用所述链下隐私计算节点的身份私钥进行签名,所述身份私钥由所述链下隐私计算节点在所述链下可信执行环境内维护。

所述待验证合约信息由所述客户端在根据所述远程证明报告确定所述链下可信执行环境可信的情况下,采用所述链下隐私计算节点的身份公钥对所述待验证合约信息进行签名验证,以及根据所述目标链下合约的合约信息对所述待验证合约信息进行合约信息验证,并在签名验证和合约信息验证通过的情况下,确定所述客户端在通过区块链节点的预言机机制对所述目标链下合约发起调用时,所述目标链下合约由所述链下隐私计算节点在所述链下可信执行环境中执行。

在一实施例中,所述链下隐私计算节点向所述客户端提供第一身份信息,所述第一身份信息包含所述链下隐私计算节点的身份公钥和所述链下隐私计算节点的其他身份信息,所述第一身份信息被所述客户端进行哈希计算以得到第二待校验哈希值;

所述链下隐私计算节点向所述客户端提供第二标准哈希值,所述第二标准哈希值由所述链下隐私计算节点在所述链下可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

所述第二标准哈希值用于与所述第二待校验哈希值进行比较,且所述客户端在比较结果一致的情况下获取所述隐私计算节点的第一身份信息中包含的所述身份公钥。

在另一实施例中,所述链下隐私计算节点向所述客户端提供自身的第二身份信息,所述第二身份信息包含所述链下隐私计算节点的身份公钥、所述链下隐私计算节点的其他身份信息和第四待校验哈希值,所述第四待校验哈希值为所述链下可信执行环境的预设信息的哈希值;

所述链下隐私计算节点向所述客户端提供第三标准哈希值,所述第三标准哈希值由所述链下隐私计算节点在所述链下可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

所述第二身份信息在所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,被所述客户端进行哈希计算以得到第三待校验哈希值;其中,确认所述链下可信执行环境可信的前提条件包含在所述第三待校验哈希值与所述第三标准哈希值一致的情况下,所述第四待校验哈希值与所述客户端预先获得的针对所述链下可信执行环境的第四标准哈希值一致;所述第二身份信息包含的所述身份公钥用于对所述待验证合约信息进行签名验证。

如前所述,所述链下隐私计算节点的身份信息为所述链下隐私计算节点的节点身份信息,所述身份私钥为所述链下隐私计算节点的节点身份私钥,所述身份公钥为所述链下隐私计算节点的节点身份公钥;或者,在所述链下隐私计算节点属于链下隐私计算集群的情况下,所述身份信息为所述链下隐私计算集群的集群身份信息,所述身份公钥为所述链下隐私计算集群的集群身份密钥中的集群身份公钥,所述身份私钥为所述集群身份密钥中的集群身份私钥;其中,在区块链节点与所述链下隐私计算集群中的各节点进行交互以部署或调用链下合约的过程中,所述集群身份密钥用于对交互数据进行加密解密和/或签名验签。

如前所述,所述链下隐私计算节点响应于区块链节点通过预言机机制对部署的所述目标链下合约发起的调用,执行所述目标链下合约;所述区块链节点对所述目标链下合约发起的调用由所述客户端提交的针对所述目标链下合约的调用交易触发。

如前所述,所述链下隐私计算节点通过所述预言机机制向区块链节点反馈执行结果,所述执行结果由所述目标链下合约响应于所述区块链节点的调用生成,并在所述链下可信执行环境内被通过所述目标链下合约的合约身份私钥进行签名;其中,在采用所述目标链下合约的合约身份公钥对所述执行结果进行签名验证且通过签名验证的情况下,所述执行结果被判定为由所述目标链下合约生成。

如前所述,所述合约信息包含所述目标链下合约的合约身份公钥,在所述客户端通过区块链节点的预言机机制对所述目标链下合约发起调用的情况下,所述合约身份公钥用于对调用所述目标链下合约时所采用的入参数据进行加密,加密后的入参数据由所述目标链下合约的合约身份私钥解密。

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

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

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

步骤1204,所述客户端在根据所述远程证明报告确定所述可信执行环境可信的情况下,获取部署于所述隐私计算节点处的目标智能合约的待验证合约信息,所述待验证合约信息被所述隐私计算节点在所述可信执行环境内采用所述隐私计算节点的身份私钥进行签名,所述身份私钥由所述隐私计算节点在所述可信执行环境内维护。

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

步骤1206,所述客户端采用所述隐私计算节点的身份公钥对所述待验证合约信息进行签名验证,以及根据所述目标智能合约的合约信息对所述待验证合约信息进行合约信息验证,并在签名验证和合约信息验证通过的情况下,确定所述客户端在对所述目标智能合约发起调用时,所述目标智能合约由所述隐私计算节点在所述可信执行环境中执行。

如前所述,所述客户端获取所述隐私计算节点提供的第一身份信息,并对获取到的第一身份信息进行哈希计算以得到第二待校验哈希值,所述第一身份信息包含所述隐私计算节点的身份公钥和所述隐私计算节点的其他身份信息;所述客户端获取所述隐私计算节点提供的第二标准哈希值,所述第二标准哈希值由所述隐私计算节点在所述可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;所述客户端将所述第二待校验哈希值与所述第二标准哈希值进行比较,并在比较结果一致的情况下获取所述隐私计算节点的第一身份信息中包含的所述身份公钥。

如前所述,所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,获取所述隐私计算节点提供的第二身份信息,并对获取到的第二身份信息进行哈希计算以得到第三待校验哈希值,所述第二身份信息包含所述隐私计算节点的身份公钥、所述隐私计算节点的其他身份信息和第四待校验哈希值,所述第四待校验哈希值为所述可信执行环境的预设信息的哈希值;获取所述隐私计算节点提供的第三标准哈希值,并将所述第三待校验哈希值与第三标准哈希值进行比较,所述第三标准哈希值由所述隐私计算节点在所述可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;在所述第三待校验哈希值与所述第三标准哈希值一致的情况下,将预先获得的针对所述可信执行环境的第四标准哈希值与所述第四待检验哈希值进行比较,并将比较结果一致作为确认所述可信执行环境可信的前提条件;其中,所述第二身份信息包含的所述身份公钥用于对所述待验证合约信息进行签名验证。

如前所述,所述隐私计算节点的身份信息为所述隐私计算节点的节点身份信息,所述身份私钥为所述隐私计算节点的节点身份私钥,所述身份公钥为所述隐私计算节点的节点身份公钥;或者,

在所述隐私计算节点属于链下隐私计算集群的情况下,所述身份信息为所述链下隐私计算集群的集群身份信息,所述身份公钥为所述链下隐私计算集群的集群身份密钥中的集群身份公钥,所述身份私钥为所述集群身份密钥中的集群身份私钥;其中,在所述客户端与所述链下隐私计算集群中的各节点进行交互以部署或调用智能合约的过程中,所述集群身份密钥用于对交互数据进行加密解密和/或签名验签。

如前所述,所述客户端获取所述隐私计算节点反馈的执行结果,所述执行结果由所述目标智能合约响应于所述客户端的调用生成,并在所述可信执行环境内被通过所述目标智能合约的合约身份私钥进行签名;所述客户端在采用所述目标智能合约的合约身份公钥对所述执行结果进行签名验证且通过签名验证的情况下,判定所述执行结果由所述目标智能合约生成。

如前所述,所述合约信息包含所述目标智能合约的合约身份公钥,在所述客户端对所述目标智能合约发起调用的情况下,所述合约身份公钥用于对调用所述目标智能合约时所采用的入参数据进行加密,加密后的入参数据由所述目标智能合约的合约身份私钥解密。

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

步骤1302,隐私计算节点向客户端提供针对所述隐私计算节点创建的可信执行环境的远程证明报告,所述远程证明报告由认证服务器对所述隐私计算节点针对所述可信执行环境产生的自荐信息进行验证后生成。

如前所述,所述远程证明报告携带的所述自荐信息内包含第一待检验哈希值,所述第一待检验哈希值为所述可信执行环境的预设信息的哈希值,所述第一待检验哈希值用于所述客户端在根据所述认证服务器的公钥对所述远程证明报告进行签名验证并签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,与预先获得的针对所述可信执行环境的第一标准哈希值进行比较,且比较结果一致被作为所述客户端确认所述可信执行环境可信的前提条件。

步骤1304,所述隐私计算节点向所述客户端提供部署于所述隐私计算节点处的目标智能合约的待验证合约信息,所述待验证合约信息被所述隐私计算节点在所述可信执行环境内采用所述隐私计算节点的身份私钥进行签名,所述身份私钥由所述隐私计算节点在所述可信执行环境内维护。

如前所述,所述待验证合约信息由所述客户端在根据所述远程证明报告确定所述可信执行环境可信的情况下,采用所述隐私计算节点的身份公钥对所述待验证合约信息进行签名验证,以及根据所述目标智能合约的合约信息对所述待验证合约信息进行合约信息验证,并在签名验证和合约信息验证通过的情况下,确定所述客户端在对所述目标智能合约发起调用时,所述目标智能合约由所述隐私计算节点在所述可信执行环境中执行。

如前所述,所述隐私计算节点向所述客户端提供第一身份信息,所述第一身份信息包含所述隐私计算节点的身份公钥和所述隐私计算节点的其他身份信息,所述第一身份信息被所述客户端进行哈希计算以得到第二待校验哈希值;所述隐私计算节点向所述客户端提供第二标准哈希值,所述第二标准哈希值由所述隐私计算节点在所述可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;所述第二标准哈希值用于与所述第二待校验哈希值进行比较,且所述客户端在比较结果一致的情况下获取所述隐私计算节点的第一身份信息中包含的所述身份公钥。

如前所述,所述隐私计算节点向所述客户端提供自身的第二身份信息,所述第二身份信息包含所述隐私计算节点的身份公钥、所述隐私计算节点的其他身份信息和第四待校验哈希值,所述第四待校验哈希值为所述可信执行环境的预设信息的哈希值;所述隐私计算节点向所述客户端提供第三标准哈希值,所述第三标准哈希值由所述隐私计算节点在所述可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;所述第二身份信息在所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,被所述客户端进行哈希计算以得到第三待校验哈希值;其中,确认所述可信执行环境可信的前提条件包含在所述第三待校验哈希值与所述第三标准哈希值一致的情况下,所述第四待校验哈希值与所述客户端预先获得的针对所述可信执行环境的第四标准哈希值一致;所述第二身份信息包含的所述身份公钥用于对所述待验证合约信息进行签名验证。

如前所述,所述隐私计算节点的身份信息为所述隐私计算节点的节点身份信息,所述身份私钥为所述隐私计算节点的节点身份私钥,所述身份公钥为所述隐私计算节点的节点身份公钥;或者,

在所述隐私计算节点属于链下隐私计算集群的情况下,所述身份信息为所述链下隐私计算集群的集群身份信息,所述身份公钥为所述链下隐私计算集群的集群身份密钥中的集群身份公钥,所述身份私钥为所述集群身份密钥中的集群身份私钥;其中,在所述客户端与所述链下隐私计算集群中的各节点进行交互以部署或调用智能合约的过程中,所述集群身份密钥用于对交互数据进行加密解密和/或签名验签。

如前所述,所述隐私计算节点向所述客户端反馈执行结果,所述执行结果由所述目标智能合约响应于所述区块链节点的调用生成,并在所述可信执行环境内被通过所述目标智能合约的合约身份私钥进行签名;其中,在采用所述目标智能合约的合约身份公钥对所述执行结果进行签名验证且通过签名验证的情况下,所述执行结果被判定为由所述目标智能合约生成。

如前所述,所述合约信息包含所述目标智能合约的合约身份公钥,在所述客户端对所述目标智能合约发起调用的情况下,所述合约身份公钥用于对调用所述目标智能合约时所采用的入参数据进行加密,加密后的入参数据由所述目标智能合约的合约身份私钥解密。与上述方法实施例相对应,本说明书还提供了一种验证合约的装置的实施例。

本说明书验证合约的装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。

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

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

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

合约信息获取单元1502,使所述客户端在根据所述远程证明报告确定所述链下可信执行环境可信的情况下,获取部署于所述链下隐私计算节点处的目标链下合约的待验证合约信息,所述待验证合约信息被所述链下隐私计算节点在所述链下可信执行环境内采用所述链下隐私计算节点的身份私钥进行签名,所述身份私钥由所述链下隐私计算节点在所述链下可信执行环境内维护;

验证单元1503,使所述客户端采用所述链下隐私计算节点的身份公钥对所述待验证合约信息进行签名验证,以及根据所述目标链下合约的合约信息对所述待验证合约信息进行合约信息验证,并在签名验证和合约信息验证通过的情况下,确定所述客户端在通过区块链节点的预言机机制对所述目标链下合约发起调用时,所述目标链下合约由所述链下隐私计算节点在所述链下可信执行环境中执行。

可选的,所述报告获取单元1501还用于:

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

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

可选的,所述报告获取单元1501进一步用于:

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

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

可选的,所述报告获取单元1501进一步用于:

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

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

可选的,所述合约信息获取单元1501还用于:

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

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

将预先获得的针对所述链下可信执行环境的第一标准哈希值与所述第一待检验哈希值进行比较,并将比较结果一致作为确认所述链下可信执行环境可信的前提条件。

可选的,所述合约信息获取单元1501还用于:

使所述客户端获取所述链下隐私计算节点提供的第一身份信息,并对获取到的第一身份信息进行哈希计算以得到第二待校验哈希值,所述第一身份信息包含所述链下隐私计算节点的身份公钥和所述链下隐私计算节点的其他身份信息;

使所述客户端获取所述链下隐私计算节点提供的第二标准哈希值,所述第二标准哈希值由所述链下隐私计算节点在所述链下可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

使所述客户端将所述第二待校验哈希值与所述第二标准哈希值进行比较,并在比较结果一致的情况下获取所述隐私计算节点的第一身份信息中包含的所述身份公钥。

可选的,所述合约信息获取单元1501还用于:

使所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,获取所述链下隐私计算节点提供的第二身份信息,并对获取到的第二身份信息进行哈希计算以得到第三待校验哈希值,所述第二身份信息包含所述链下隐私计算节点的身份公钥、所述链下隐私计算节点的其他身份信息和第四待校验哈希值,所述第四待校验哈希值为所述链下可信执行环境的预设信息的哈希值;

使所述客户端获取所述链下隐私计算节点提供的第三标准哈希值,并将所述第三待校验哈希值与第三标准哈希值进行比较,所述第三标准哈希值由所述链下隐私计算节点在所述链下可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

使所述客户端在所述第三待校验哈希值与所述第三标准哈希值一致的情况下,将预先获得的针对所述链下可信执行环境的第四标准哈希值与所述第四待检验哈希值进行比较,并将比较结果一致作为确认所述链下可信执行环境可信的前提条件;其中,所述第二身份信息包含的所述身份公钥用于对所述待验证合约信息进行签名验证。

可选的,所述链下隐私计算节点的身份信息为所述链下隐私计算节点的节点身份信息,所述身份私钥为所述链下隐私计算节点的节点身份私钥,所述身份公钥为所述链下隐私计算节点的节点身份公钥;或者,

在所述链下隐私计算节点属于链下隐私计算集群的情况下,所述身份信息为所述链下隐私计算集群的集群身份信息,所述身份公钥为所述链下隐私计算集群的集群身份密钥中的集群身份公钥,所述身份私钥为所述集群身份密钥中的集群身份私钥;其中,在区块链节点与所述链下隐私计算集群中的各节点进行交互以部署或调用链下合约的过程中,所述集群身份密钥用于对交互数据进行加密解密和/或签名验签。

可选的,还包括:

调用单元1504,使所述客户端向区块链节点提交针对所述目标链下合约的调用交易,所述调用交易用于指示所述区块链节点通过预言机机制对所述链下隐私计算节点部署的所述目标链下合约发起调用。

可选的,还包括:

结果获取单元1505,使所述客户端获取所述链下隐私计算节点通过所述预言机机制反馈至所述区块链节点的执行结果,所述执行结果由所述目标链下合约响应于所述区块链节点的调用生成,并在所述链下可信执行环境内被通过所述目标链下合约的合约身份私钥进行签名;

判定单元1506,使所述客户端在采用所述目标链下合约的合约身份公钥对所述执行结果进行签名验证且通过签名验证的情况下,判定所述执行结果由所述目标链下合约生成。

可选的,所述合约信息包含所述目标链下合约的合约身份公钥,在所述客户端通过区块链节点的预言机机制对所述目标链下合约发起调用的情况下,所述合约身份公钥用于对调用所述目标链下合约时所采用的入参数据进行加密,加密后的入参数据由所述目标链下合约的合约身份私钥解密。

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

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

信息提供单元1602,使所述链下隐私计算节点向所述客户端提供部署于所述链下隐私计算节点处的目标链下合约的待验证合约信息,所述待验证合约信息被所述链下隐私计算节点在所述链下可信执行环境内采用所述链下隐私计算节点的身份私钥进行签名,所述身份私钥由所述链下隐私计算节点在所述链下可信执行环境内维护;

所述待验证合约信息由所述客户端在根据所述远程证明报告确定所述链下可信执行环境可信的情况下,采用所述链下隐私计算节点的身份公钥对所述待验证合约信息进行签名验证,以及根据所述目标链下合约的合约信息对所述待验证合约信息进行合约信息验证,并在签名验证和合约信息验证通过的情况下,确定所述客户端在通过区块链节点的预言机机制对所述目标链下合约发起调用时,所述目标链下合约由所述链下隐私计算节点在所述链下可信执行环境中执行。

可选的,所述报告提供单元1601还用于:

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

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

可选的,所述远程证明报告携带的所述自荐信息内包含第一待检验哈希值,所述第一待检验哈希值为所述链下可信执行环境的预设信息的哈希值,所述第一待检验哈希值用于所述客户端在根据所述认证服务器的公钥对所述远程证明报告进行签名验证并签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,与预先获得的针对所述链下可信执行环境的第一标准哈希值进行比较,且比较结果一致被作为所述客户端确认所述链下可信执行环境可信的前提条件。

可选的,所述信息提供单元1602还用于:

使所述链下隐私计算节点向所述客户端提供第一身份信息,所述第一身份信息包含所述链下隐私计算节点的身份公钥和所述链下隐私计算节点的其他身份信息,所述第一身份信息被所述客户端进行哈希计算以得到第二待校验哈希值;

使所述链下隐私计算节点向所述客户端提供第二标准哈希值,所述第二标准哈希值由所述链下隐私计算节点在所述链下可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

所述第二标准哈希值用于与所述第二待校验哈希值进行比较,且所述客户端在比较结果一致的情况下获取所述隐私计算节点的第一身份信息中包含的所述身份公钥。

可选的,所述信息提供单元1602还用于:

使所述链下隐私计算节点向所述客户端提供自身的第二身份信息,所述第二身份信息包含所述链下隐私计算节点的身份公钥、所述链下隐私计算节点的其他身份信息和第四待校验哈希值,所述第四待校验哈希值为所述链下可信执行环境的预设信息的哈希值;

使所述链下隐私计算节点向所述客户端提供第三标准哈希值,所述第三标准哈希值由所述链下隐私计算节点在所述链下可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

所述第二身份信息在所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,被所述客户端进行哈希计算以得到第三待校验哈希值;其中,确认所述链下可信执行环境可信的前提条件包含在所述第三待校验哈希值与所述第三标准哈希值一致的情况下,所述第四待校验哈希值与所述客户端预先获得的针对所述链下可信执行环境的第四标准哈希值一致;所述第二身份信息包含的所述身份公钥用于对所述待验证合约信息进行签名验证。

可选的,所述链下隐私计算节点的身份信息为所述链下隐私计算节点的节点身份信息,所述身份私钥为所述链下隐私计算节点的节点身份私钥,所述身份公钥为所述链下隐私计算节点的节点身份公钥;或者,

在所述链下隐私计算节点属于链下隐私计算集群的情况下,所述身份信息为所述链下隐私计算集群的集群身份信息,所述身份公钥为所述链下隐私计算集群的集群身份密钥中的集群身份公钥,所述身份私钥为所述集群身份密钥中的集群身份私钥;其中,在区块链节点与所述链下隐私计算集群中的各节点进行交互以部署或调用链下合约的过程中,所述集群身份密钥用于对交互数据进行加密解密和/或签名验签。

可选的,还包括:

执行单元1603,使所述链下隐私计算节点响应于区块链节点通过预言机机制对部署的所述目标链下合约发起的调用,执行所述目标链下合约;所述区块链节点对所述目标链下合约发起的调用由所述客户端提交的针对所述目标链下合约的调用交易触发。

可选的,还包括:

反馈单元1604,使所述链下隐私计算节点通过所述预言机机制向区块链节点反馈执行结果,所述执行结果由所述目标链下合约响应于所述区块链节点的调用生成,并在所述链下可信执行环境内被通过所述目标链下合约的合约身份私钥进行签名;

其中,在采用所述目标链下合约的合约身份公钥对所述执行结果进行签名验证且通过签名验证的情况下,所述执行结果被判定为由所述目标链下合约生成。

可选的,所述合约信息包含所述目标链下合约的合约身份公钥,在所述客户端通过区块链节点的预言机机制对所述目标链下合约发起调用的情况下,所述合约身份公钥用于对调用所述目标链下合约时所采用的入参数据进行加密,加密后的入参数据由所述目标链下合约的合约身份私钥解密。

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

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

合约信息获取单元1702,使所述客户端在根据所述远程证明报告确定所述可信执行环境可信的情况下,获取部署于所述隐私计算节点处的目标智能合约的待验证合约信息,所述待验证合约信息被所述隐私计算节点在所述可信执行环境内采用所述隐私计算节点的身份私钥进行签名,所述身份私钥由所述隐私计算节点在所述可信执行环境内维护;

验证单元1703,使所述客户端采用所述隐私计算节点的身份公钥对所述待验证合约信息进行签名验证,以及根据所述目标智能合约的合约信息对所述待验证合约信息进行合约信息验证,并在签名验证和合约信息验证通过的情况下,确定所述客户端在对所述目标智能合约发起调用时,所述目标智能合约由所述隐私计算节点在所述可信执行环境中执行。

可选的,合约信息获取单元1702具体用于:

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

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

将预先获得的针对所述可信执行环境的第一标准哈希值与所述第一待检验哈希值进行比较,并将比较结果一致作为确认所述可信执行环境可信的前提条件。

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

所述客户端获取所述隐私计算节点提供的第一身份信息,并对获取到的第一身份信息进行哈希计算以得到第二待校验哈希值,所述第一身份信息包含所述隐私计算节点的身份公钥和所述隐私计算节点的其他身份信息;

所述客户端获取所述隐私计算节点提供的第二标准哈希值,所述第二标准哈希值由所述隐私计算节点在所述可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

所述客户端将所述第二待校验哈希值与所述第二标准哈希值进行比较,并在比较结果一致的情况下获取所述隐私计算节点的第一身份信息中包含的所述身份公钥。

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

根据所述认证服务器的公钥对所述远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,获取所述隐私计算节点提供的第二身份信息,并对获取到的第二身份信息进行哈希计算以得到第三待校验哈希值,所述第二身份信息包含所述隐私计算节点的身份公钥、所述隐私计算节点的其他身份信息和第四待校验哈希值,所述第四待校验哈希值为所述可信执行环境的预设信息的哈希值;

获取所述隐私计算节点提供的第三标准哈希值,并将所述第三待校验哈希值与第三标准哈希值进行比较,所述第三标准哈希值由所述隐私计算节点在所述可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

在所述第三待校验哈希值与所述第三标准哈希值一致的情况下,将预先获得的针对所述可信执行环境的第四标准哈希值与所述第四待检验哈希值进行比较,并将比较结果一致作为确认所述可信执行环境可信的前提条件;其中,所述第二身份信息包含的所述身份公钥用于对所述待验证合约信息进行签名验证。

可选的,所述隐私计算节点的身份信息为所述隐私计算节点的节点身份信息,所述身份私钥为所述隐私计算节点的节点身份私钥,所述身份公钥为所述隐私计算节点的节点身份公钥;或者,

在所述隐私计算节点属于链下隐私计算集群的情况下,所述身份信息为所述链下隐私计算集群的集群身份信息,所述身份公钥为所述链下隐私计算集群的集群身份密钥中的集群身份公钥,所述身份私钥为所述集群身份密钥中的集群身份私钥;其中,在所述客户端与所述链下隐私计算集群中的各节点进行交互以部署或调用智能合约的过程中,所述集群身份密钥用于对交互数据进行加密解密和/或签名验签。

可选的,验证单元1703还用于:

所述客户端获取所述隐私计算节点反馈的执行结果,所述执行结果由所述目标智能合约响应于所述客户端的调用生成,并在所述可信执行环境内被通过所述目标智能合约的合约身份私钥进行签名;

所述客户端在采用所述目标智能合约的合约身份公钥对所述执行结果进行签名验证且通过签名验证的情况下,判定所述执行结果由所述目标智能合约生成。

可选的,所述合约信息包含所述目标智能合约的合约身份公钥,在所述客户端对所述目标智能合约发起调用的情况下,所述合约身份公钥用于对调用所述目标智能合约时所采用的入参数据进行加密,加密后的入参数据由所述目标智能合约的合约身份私钥解密。

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

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

合约信息提供单元1802,使所述隐私计算节点向所述客户端提供部署于所述隐私计算节点处的目标智能合约的待验证合约信息,所述待验证合约信息被所述隐私计算节点在所述可信执行环境内采用所述隐私计算节点的身份私钥进行签名,所述身份私钥由所述隐私计算节点在所述可信执行环境内维护;

其中,所述待验证合约信息由所述客户端在根据所述远程证明报告确定所述可信执行环境可信的情况下,采用所述隐私计算节点的身份公钥对所述待验证合约信息进行签名验证,以及根据所述目标智能合约的合约信息对所述待验证合约信息进行合约信息验证,并在签名验证和合约信息验证通过的情况下,确定所述客户端在对所述目标智能合约发起调用时,所述目标智能合约由所述隐私计算节点在所述可信执行环境中执行。

可选的,所述远程证明报告携带的所述自荐信息内包含第一待检验哈希值,所述第一待检验哈希值为所述可信执行环境的预设信息的哈希值,所述第一待检验哈希值用于所述客户端在根据所述认证服务器的公钥对所述远程证明报告进行签名验证并签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,与预先获得的针对所述可信执行环境的第一标准哈希值进行比较,且比较结果一致被作为所述客户端确认所述可信执行环境可信的前提条件。

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

所述隐私计算节点向所述客户端提供第一身份信息,所述第一身份信息包含所述隐私计算节点的身份公钥和所述隐私计算节点的其他身份信息,所述第一身份信息被所述客户端进行哈希计算以得到第二待校验哈希值;

所述隐私计算节点向所述客户端提供第二标准哈希值,所述第二标准哈希值由所述隐私计算节点在所述可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

所述第二标准哈希值用于与所述第二待校验哈希值进行比较,且所述客户端在比较结果一致的情况下获取所述隐私计算节点的第一身份信息中包含的所述身份公钥。

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

所述隐私计算节点向所述客户端提供自身的第二身份信息,所述第二身份信息包含所述隐私计算节点的身份公钥、所述隐私计算节点的其他身份信息和第四待校验哈希值,所述第四待校验哈希值为所述可信执行环境的预设信息的哈希值;

所述隐私计算节点向所述客户端提供第三标准哈希值,所述第三标准哈希值由所述隐私计算节点在所述可信执行环境内生成自身的身份信息后对生成的身份信息进行哈希计算得到;

所述第二身份信息在所述客户端根据所述认证服务器的公钥对所述远程证明报告进行签名验证并在签名验证通过且所述远程证明报告包含的远程认证结果为通过认证的情况下,被所述客户端进行哈希计算以得到第三待校验哈希值;其中,确认所述可信执行环境可信的前提条件包含在所述第三待校验哈希值与所述第三标准哈希值一致的情况下,所述第四待校验哈希值与所述客户端预先获得的针对所述可信执行环境的第四标准哈希值一致;所述第二身份信息包含的所述身份公钥用于对所述待验证合约信息进行签名验证。

可选的,所述隐私计算节点的身份信息为所述隐私计算节点的节点身份信息,所述身份私钥为所述隐私计算节点的节点身份私钥,所述身份公钥为所述隐私计算节点的节点身份公钥;或者,

在所述隐私计算节点属于链下隐私计算集群的情况下,所述身份信息为所述链下隐私计算集群的集群身份信息,所述身份公钥为所述链下隐私计算集群的集群身份密钥中的集群身份公钥,所述身份私钥为所述集群身份密钥中的集群身份私钥;其中,在所述客户端与所述链下隐私计算集群中的各节点进行交互以部署或调用智能合约的过程中,所述集群身份密钥用于对交互数据进行加密解密和/或签名验签。

可选的,合约信息提供单元1802还用于:

使所述隐私计算节点向所述客户端反馈执行结果,所述执行结果由所述目标智能合约响应于所述区块链节点的调用生成,并在所述可信执行环境内被通过所述目标智能合约的合约身份私钥进行签名;

其中,在采用所述目标智能合约的合约身份公钥对所述执行结果进行签名验证且通过签名验证的情况下,所述执行结果被判定为由所述目标智能合约生成。

可选的,所述合约信息包含所述目标智能合约的合约身份公钥,在所述客户端对所述目标智能合约发起调用的情况下,所述合约身份公钥用于对调用所述目标智能合约时所采用的入参数据进行加密,加密后的入参数据由所述目标智能合约的合约身份私钥解密。

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

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

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

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

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

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

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

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

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

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