区块链中实现隐私保护的方法、节点、系统和存储介质
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链中实现隐私保护的方法、节点、系统和存储介质。
背景技术
区块链技术构建在传输网络(例如点对点网络)之上。传输网络中的网络节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。这些区块链网络中的节点有时需要增加。
目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(Homomorphic encryption)和零知识证明(Zero-knowledge proof)等复杂度高,通用性差,而且还可能带来严重的性能损失。
在解决隐私方面,可信执行环境(Trusted Execution Environment,TEE)是另一种解决方式。TEE可以起到硬件中的黑箱作用,在TEE中执行的代码和数据都无法被操作系统层偷窥,只有通过代码中预先定义的接口才能对其进行操作。在效率方面,由于TEE的黑箱性质,在TEE中进行运算的是明文数据,而不是同态加密中的复杂密码学运算,计算过程没有效率损失,因此与TEE相结合可以在性能损失较小的前提下很大程度上提升区块链的安全性和隐私性。目前工业界十分关注TEE的方案,几乎所有主流的芯片和软件联盟都有自己的TEE解决方案,包括软件方面的TPM(Trusted Platform Module,可信赖平台模块)以及硬件方面的Intel SGX(Software Guard Extensions,软件保护扩展)、ARM Trustzone(信任区)和AMD PSP(Platform Security Processor,平台安全处理器)。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种区块链中实现隐私保护的方法、节点、系统和存储介质。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种区块链中实现隐私保护的方法,包括:
第一区块链节点接收交易;
第一区块链节点识别所述交易为明文交易或隐私交易、所述交易的生成方账户为明文账户或隐私账户;
第一区块链节点在所述交易为隐私账户发起的明文交易时拒绝执行所述交易,否则执行所述交易。
根据本说明书一个或多个实施例的第二方面,提出了一种区块链中实现隐私保护的方法,包括:
客户端接收到本地账户发起的交易生成请求;
所述客户端识别所述本地账户为明文账户或隐私账户、请求生成的交易为明文交易或隐私交易;
所述客户端在隐私账户请求生成明文交易时拒绝所述交易生成请求,否则响应于所述交易生成请求而生成相应的交易。
根据本说明书一个或多个实施例的第三方面,提出了一种区块链中实现隐私保护的节点,包括:
接收单元,用于接收交易;
识别单元,用于识别所述交易为明文交易或隐私交易、所述交易的生成方账户为明文账户或隐私账户;
执行单元,用于在所述交易为隐私账户发起的明文交易时拒绝执行所述交易,否则执行所述交易。
根据本说明书一个或多个实施例的第四方面,提出了一种区块链中实现隐私保护的系统,包括客户端和第一区块链节点,其中:
客户端接收到本地账户发起的交易生成请求后,识别所述本地账户为明文账户或隐私账户、请求生成的交易为明文交易或隐私交易,并在隐私账户请求生成明文交易时拒绝所述交易生成请求,否则响应于所述交易生成请求而生成相应的交易;
第一区块链节点在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;或,第一区块链节点对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后存储至所述外部存储空间。
根据本说明书一个或多个实施例的第五方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面或第二方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种区块链中实现隐私保护的方法的流程图。
图2是一示例性实施例提供的一种交易场景的示意图。
图3是一示例性实施例提供的另一种区块链中实现隐私保护的方法的流程图。
图4是一示例性实施例提供的一种区块链中实现隐私保护的节点的组成图。
图5是一示例性实施例提供的一种区块链中实现隐私保护的系统的组成图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
不论是公有链、私有链还是联盟链,都以交易(transaction)的形式实现相关功能和数据交互,而各个对象分别以对应的账户参与到交易中。以以太坊为例,账户的类型可以分为外部账户和合约账户等。外部账户通常由个人或机构所控制,并生成和发起交易。合约账户对应于区块链上的智能合约,智能合约是公有链、私有链或联盟链类型的区块链上可以被交易触发执行的合约,智能合约通过代码的形式定义。
智能合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码和账户存储将保存在该合约账户中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(Storage)的虚拟账户。而外部账户在生成交易时,通过在交易的to字段添加被调用的智能合约对应的地址,可以对该智能合约进行调用,从而通过执行该智能合约的代码而实现相关功能。智能合约可以通过规定的方式在区块链网络中的每个节点独立地执行,所有执行记录和数据都保存在区块链上,所以当这样的交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。
当然,外部账户在生成交易时并不一定需要对智能合约进行调用,比如该交易可以仅用于实现一般的转账功能。
以下结合图1所示说明本说明书一实现隐私保护的方法实施例的实现过程:
步骤102,第一区块链节点接收交易。
在一实施例中,交易可以由客户端提交至第一区块链节点。例如,用户通过对应的账户在客户端生成该交易后,通过该客户端将交易提交至第一区块链节点。以图2为例,第一区块链节点中包含交易/查询接口,该接口可与客户端对接,使得客户端可以向第一区块链节点提交交易。相应的,在交易完成后,第一区块链节点可以通过该交易/查询接口向客户端返回交易的执行结果,该执行结果可以包括执行成功或执行失败,还可以包括诸如交易日志等详情信息,本说明书并不对此进行限制。
所述交易也可由第二区块链节点转发至第一区块链节点。例如,用户通过对应的账户在客户端生成该交易后,通过该客户端将该交易提交至第二区块链节点;然后,第二区块链节点进一步将该交易转发至第一区块链节点。以图2为例,上述接口可与其他区块链节点对接,比如该其他区块链节点可以包含上述的第二区块链节点,使得第二区块链节点可以向第一区块链节点转发交易。类似地,第二区块链节点也可通过自身的交易/查询接口与客户端对接,以接收客户端提交的交易。
比如在采用工作量证明(Proof of Work,POW)以及股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法的区块链网络中,第二区块链节点在收到客户端提交的该交易后,立即扩散(如广播)至以太坊网络中的其他区块链节点。
再比如在采用实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等机制的区块链网络中,记账节点在本轮记账前已经商定好,使得第二区块链节点在收到客户端提交的该交易后,若自身并非记账节点,则将该交易发送至已确定的记账节点,使得该记账节点在进一步的共识阶段将交易(包括该交易)打包发送至各个验证节点。而当第二区块链节点自身为已确定的记账节点时,其他区块链节点收到客户端提交的交易后,可以将交易转发至该第二区块链节点;然后,第二区块链节点可以在共识阶段将上述交易(或还包括其他交易)打包发送至各个验证节点,包括第一区块链节点。
步骤104,第一区块链节点识别所述交易为明文交易或隐私交易、所述交易的生成方账户为明文账户或隐私账户。
在一实施例中,本说明书基于不同的隐私保护需求,将交易划分为明文类型的明文交易、隐私类型的隐私交易,针对不同类型的交易可以实现差异化的执行方式,下文将对此详述。例如,通过在交易中添加类型字段,使得第一区块链可以据此识别交易类型为明文交易或隐私交易。在相关技术中,例如在以太坊网络中,交易通常包含to、value、data等字段。而本实施例在相关技术的基础上,在交易中增加一类型字段,比如表征为type字段,并基于该类型字段的取值,表明相关交易的类型;例如,当类型字段为第一取值时,表明相关交易为明文交易,当类型字段为第二取值时,表明相关交易为隐私交易。
在一实施例中,明文交易的所有内容均采用明文形式,即该交易的各个字段均采用明文形式,使得第一区块链节点可以直接对该明文交易的各个字段进行读取,以实施相关处理;同时,明文交易以明文形式被打包成块,进而以明文形式记录于区块链中。隐私交易除了类型字段采用明文形式之外,其他字段均采用密文形式,使得一方面第一区块链节点能够在无需解密的情况下,快速识别交易类型,从而针对明文交易和隐私交易实施差异化处理,另一方面通过采用密文形式使其仅能够被持有密钥的对象进行解密和读取,避免交易信息发生泄露,并且隐私交易以密文形式被打包成块,进而以密文形式记录于区块链中。
在一实施例中,本说明书中将外部账户划分为明文类型的明文账户、隐私类型的隐私账户,其中隐私账户的行为会受到特别的安全保护,从而避免造成隐私信息的泄露,下文将对此详述。
在诸如以太坊等公有链中,用户可以自由地创建外部账户,那么用户可以标注自身创建的外部账户为明文类型或隐私类型,而区块链网络中的各个节点可以分别对所有外部账户的类型信息进行预先记录,使得第一区块链节点在收到上述交易时,可以从交易的from字段读取生成方账户的信息,并根据预先记录的类型信息确定该生成方账户为明文账户或隐私账户。
而在联盟链或私有链中,外部账户的创建操作存在一定限制,需要由已创建的外部账户来创建其他的外部账户,而不能随意创建。创建时可以限制明文账户能够创建明文账户或隐私账户,而隐私账户仅能够创建隐私账户。类似地,在联盟链或私有链的区块链网络中,各个节点也应当预先记录所有外部账户的类型信息,使得第一区块链节点在收到上述交易时,可以从交易的from字段读取生成方账户的信息,并根据预先记录的类型信息确定该生成方账户为明文账户或隐私账户。
步骤106,第一区块链节点在所述交易为隐私账户发起的明文交易时拒绝执行所述交易,否则执行所述交易。
在一实施例中,当交易由隐私账户发起时,出于对隐私账户的安全保护,需要限制该交易的类型:当隐私账户发起隐私交易时,由于隐私交易相对倾向于满足高级别的隐私保护需求,其采用加密传输且在可信执行环境中执行,使得隐私交易具有极高的隐私性,因而允许执行该隐私交易;当隐私账户发起明文交易时,由于明文交易相对倾向于满足处理效率需求,其采用明文传输且在可信执行环境之外执行,使得明文交易的隐私性相对不足,因而不允许执行明文交易,从而实现了对隐私账户的安全保护,避免使用隐私账户的用户无意间发起明文交易而造成相关隐私信息的泄露。
在一实施例中,当交易由明文账户发起时,无论该明文账户发起明文交易或隐私交易,第一区块链节点均予以执行,使得明文账户可以根据实际需求选择发起明文类型或隐私类型的交易。
在一实施例中,第一区块链节点兼容相关技术中对于明文交易的处理能力,可以在可信执行环境之外对明文交易进行处理,并将明文执行结果存储至外部存储空间。例如图2所示,第一区块链节点可以划分为常规执行环境和可信执行环境,客户端提交(以客户端提交的交易为例)的交易首先进入常规执行环境中的“交易/查询接口”进行类型识别,将识别出的明文交易留在常规执行环境中进行处理,而将识别出的隐私交易传递至可信执行环境中进行处理。换言之,第一区块链节点既可以兼容相关技术中对于明文交易的处理,又能够对密文形式的隐私交易进行处理,从而在整个区块链网络上对明文交易与隐私交易实现混合处理。
本说明书中的交易可以用于实现相对简单的处理逻辑,比如类似于相关技术中的转账逻辑。
本说明书中的交易还可以用于实现相对复杂的处理逻辑,这里可以借助于上述的智能合约来实现。以以太坊为例,支持用户在以太坊网络中创建和/或调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上的智能合约可以是字节码的形式。
在一实施例中,本说明书的智能合约可以划分为明文类型的明文合约、隐私类型的隐私合约。明文合约的合约代码和合约状态均以明文形式存储于节点处,而隐私合约的合约代码和合约状态均以密文形式存储于节点处,使得隐私合约具有相对更高的私密性。当交易用于创建和/或调用智能合约时,该智能合约可以被认为对应于该交易。
由于第一区块链节点在可信执行环境之外对明文交易进行处理,且直接将处理得到的明文执行结果存储至外部存储空间,因而当明文交易用于创建智能合约时,该智能合约必然以明文形式存储于外部存储空间,因而该智能合约必然为明文合约。同时,当明文交易调用智能合约时,由于仅在可信执行环境内能够对隐私合约进行解密,因而明文交易调用的智能合约仅能够为明文合约。
在一实施例中,当生成方账户生成的交易为隐私交易时,该生成方账户可以为明文账户或隐私账户。第一区块链节点可以在可信执行环境(Trusted ExecutionEnvironment,TEE)中解密所述隐私交易。TEE是基于CPU硬件的安全扩展,且与外部完全隔离的可信执行环境。TEE最早是由Global Platform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。ARM的Trust Zone技术最早实现了真正商用的TEE技术。
伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对TEE提出了更多的需求。TEE的概念也得到了高速的发展和扩充。现在所说的TEE相比与最初提出的概念已经是更加广义的TEE。例如,服务器芯片厂商Intel,AMD等都先后推出了硬件辅助的TEE并丰富了TEE的概念和特性,在工业界得到了广泛的认可。现在提起的TEE通常更多指这类硬件辅助的TEE技术。不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用TEE的第一步就是要确认TEE的真实可信。因此现在的TEE技术都引入了远程证明机制,由硬件厂商(主要是CPU厂商)背书并通过数字签名技术确保用户对TEE状态可验证。同时仅仅是安全的资源隔离也无法满足的安全需求,进一步的数据隐私保护也被提出。包括Intel SGX,AMD SEV在内的商用TEE也都提供了内存加密技术,将可信硬件限定在CPU内部,总线和内存的数据均是密文防止恶意用户进行窥探。例如,英特尔的软件保护扩展(SGX)等TEE技术隔离了代码执行、远程证明、安全配置、数据的安全存储以及用于执行代码的可信路径。在TEE中运行的应用程序受到安全保护,几乎不可能被第三方访问。
以Intel SGX技术为例,SGX提供了围圈(enclave,也称为飞地),即内存中一个加密的可信执行区域,由CPU保护数据不被窃取。以第一区块链节点采用支持SGX的CPU为例,利用新增的处理器指令,在内存中可以分配一部分区域EPC(Enclave Page Cache,围圈页面缓存或飞地页面缓存),通过CPU内的加密引擎MEE(Memory Encryption Engine)对其中的数据进行加密。EPC中加密的内容只有进入CPU后才会被解密成明文。因此,在SGX中,用户可以不信任操作系统、VMM(Virtual Machine Monitor,虚拟机监控器)、甚至BIOS(BasicInput Output System,基本输入输出系统),只需要信任CPU便能确保隐私数据不会泄漏。实际应用中,可以将隐私数据加密后以密文形式传递至围圈中,并通过远程证明将对应的秘钥也传入围圈。然后,在CPU的加密保护下利用数据进行运算,结果会以密文形式返回。这种模式下,既可以利用强大的计算力,又不用担心数据泄漏。
当然,与明文交易相类似的,隐私交易可以创建和/或调用智能合约以实现相对复杂的处理逻辑,或者隐私交易也可以不调用智能合约而实现转账等相对简单的处理逻辑。由于隐私交易在TEE中执行,因而隐私交易对应的智能合约可以为隐私合约,比如隐私交易可以在TEE中创建智能合约,该智能合约的合约代码和合约状态均可以在TEE中被加密,从而创建相应的隐私合约;再比如隐私交易可以调用隐私合约,该隐私合约在TEE中被解密和执行,且执行后发生更新的合约状态可以被更新并重新加密存储;又比如隐私交易可以调用明文合约,该明文合约在TEE中被执行后,发生更新的合约状态仍以明文形式进行存储。
假定上述的隐私交易在某一客户端处生成,该客户端可以首先生成明文交易内容,然后将该明文交易内容用密钥加密。所述加密,可以采用对称加密,也可以采用非对称加密。相应地,第一区块链节点可以用对应的密钥解密所述隐私交易,以获得明文交易内容。如果客户端用对称加密方式,即用对称加密算法的对称密钥对明文交易内容加密,则相应地,第一区块链节点可以用所述对称加密算法的对称密钥解密所述隐私交易。对称加密采用的加密算法,例如是DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。对称加密算法的对称密钥,例如可以是由所述隐私交易的生成方生成,或由客户端和第一区块链节点协商确定,或由密钥管理服务器发送得到。
如果用非对称加密方式,即用非对称加密算法的公钥对明文交易内容加密,则相应地,第一区块链节点可以用所述非对称加密算法的私钥解密所述隐私交易。非对称加密算法,例如是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。非对称加密算法的密钥,例如可以是由第一区块链节点生成一对公钥和私钥,并将公钥预先发送至所述客户端,从而所述客户端可以将明文交易内容用该公钥加密。
非对称加密算法的密钥,也可以由一个密钥管理服务器生成。通过远程证明的方式,密钥管理服务器将私钥发送至第一区块链节点,具体的,可以是传入第一区块链节点的围圈中。第一区块链节点可以包含多个围圈,而上述私钥可以被传入这些围圈中的安全围圈;例如,该安全围圈可以为QE(Quoting Enclave)围圈,而非AE(Application Enclave)围圈。对于非对称加密的公钥,可以由密钥管理服务器发送至所述客户端。因而客户端可以用该公钥加密明文交易内容,相应地,第一区块链节点可以用所述私钥解密所述隐私交易,以得到该隐私交易包含的明文交易内容。
客户端也可以采用对称加密结合非对称加密相结合的方式。例如,客户端采用对称加密算法加密明文交易内容,即采用对称加密算法的对称密钥加密明文交易内容,并用非对称加密算法加密对称加密算法中采用的对称密钥。一般的,采用非对称加密算法的公钥加密对称加密算法中采用的对称密钥。这样,第一区块链节点接收到加密的交易后,可以先采用非对称加密算法的私钥进行解密,得到对称加密算法的对称密钥,进而用对称加密算法的对称密钥解密得到明文交易内容。
例如,密钥管理服务器通过远程证明可以将非对称加密算法的私钥发送至第一区块链节点的围圈,并将非对称加密算法的私钥发送至所述客户端。因而,所述客户端可以采用对称加密算法的对称密钥加密明文交易内容,即采用对称加密算法的对称密钥加密明文交易内容,并用非对称加密算法的公钥加密对称加密算法中采用的对称密钥。进而,所述客户端可以将所述隐私交易和加密私钥(由非对称加密算法的公钥对所述对称加密算法中采用的对称密钥进行加密后得到)发送至第一区块链节点。第一区块链节点接收到所述隐私交易和加密私钥后,可以先用非对称加密算法的私钥对该加密私钥进行解密得到对称加密算法的对称密钥,进而用该对称加密算法的对称密钥解密所述隐私交易,得到明文交易内容。这里的加密方式一般称为数字信封加密。
第一区块链节点对隐私交易进行解密后,得到明文交易内容。明文交易内容可以包含智能合约的代码,以用于在区块链中创建智能合约;明文交易内容可以包含区块链中已创建的某一智能合约的合约地址,以用于调用该智能合约。
无论是用于创建或调用智能合约,第一区块链节点可以通过执行该智能合约的代码,以完成交易。第一区块链节点可以在可信执行环境中执行所述智能合约的代码。当智能合约的代码位于隐私交易中时,第一区块链节点通过对隐私交易进行解密得到上述的明文交易内容,该明文交易内容中包含明文的智能合约的代码;当智能合约预先已创建、隐私交易用于调用该智能合约时,如果该智能合约预先被第一区块链节点进行加密存储,而该第一区块链节点可以通过将密文的智能合约的代码读入可信执行环境中,并解密得到明文的智能合约的代码。智能合约之间可以实现多重嵌套结构;例如智能合约1中的代码调用了智能合约2,而智能合约2中的代码指向了经创建智能合约代码生成的合约地址3,从而当隐私交易调用智能合约1中的代码时,间接调用了所述合约地址3中的智能合约代码。
当隐私交易用于创建智能合约时,该隐私交易中包含智能合约的代码,第一区块链节点可以在可信执行环境中对该隐私交易进行解密得到其所含智能合约的代码,并进而在可信执行环境中执行该明文代码。当隐私交易用于调用隐私类型的智能合约时,第一区块链节点可以在可信执行环境中对该智能合约进行解密得到相应的明文代码,并进而在可信执行环境中执行该明文代码。当隐私交易用于调用明文类型的智能合约时,第一区块链节点直接读取该智能合约的明文代码,并在可信执行环境中执行该明文代码。具体的,第一区块链节点可以利用CPU中新增的处理器指令,在内存中分配一部分区域EPC,通过CPU内的加密引擎MEE对上述的明文代码进行加密存入所述EPC中。EPC中加密的内容进入CPU后被解密成明文。在CPU中,对所述明文代码进行运算,完成执行过程。
SGX技术中,执行所述智能合约的明文代码,可以将EVM加载进所述围圈中。在远程证明过程中,所述密钥管理服务器可以计算本地EVM代码的hash值,并与第一区块链节点中加载的EVM代码的hash值比对,比对结果正确作为通过远程证明的一个必要条件,从而完成对第一区块链节点SGX围圈加载的代码的度量。经过度量,正确的EVM可以在SGX中执行所述智能合约代码。
CPU执行所述明文代码后,生成相应的明文执行结果。一般的,明文执行结果可以包括发生变化的合约状态。将合约状态存入区块链,从区块链节点的角度,是将该合约状态写入数据库,例如本地的数据库。所述数据库,一般存储于存储介质之中,更多见的是持久性存储介质。所述持久性存储介质,可以是磁盘、软盘,也可以是通电后可恢复数据从而可以持久存储的内存之类。
当隐私交易对应的智能合约为隐私合约时,需要对明文执行结果进行加密后存储。例如,写入数据库的操作用代码表示的话,如setstorage(key,ENC(value,secret_key))。setstorage(key,ENC(value,secret_key))中,键(key)可以与传统的键写入方式相同。至于value的写入,可以采用Intel SGX技术,ENC表示enclave,secret_key表示采用SGX技术中写入数据库时采用的密钥。所述密钥可以是对称加密的密钥,例如是seal(SimpleEncrypted Arithmetic Library)密钥。所述seal密钥,例如可以是通过远程证明后由密钥管理服务器发送给第一区块链节点,再例如可以是区块链中的各个节点(如第一区块链节点与其他区块链节点)之间协商得到。所述密钥也可以是非对称加密的密钥。所述密钥可以被存储于第一区块链节点的围圈中。第一区块链节点可以包含多个围圈,而上述私钥可以被传入这些围圈中的安全围圈;例如,该安全围圈可以为QE围圈,而非AE围圈。当隐私交易对应的智能合约为明文合约时,明文执行结果以明文形式进行存储,无需加密。
通过远程证明后由密钥管理服务器发送给第一区块链节点,或者区块链中的各个节点(如第一区块链节点与其他区块链节点)之间协商得到的密钥,可以并非上述的seal密钥,而是root密钥(根密钥),且上述的seal密钥可以为该root密钥的衍生密钥。例如,root密钥可以不可逆地依次衍生出若干版本的衍生密钥,且任意相邻的两个密钥之间由高版本密钥不可逆地衍生出低版本密钥,从而形成链式的密钥衍生结构。比如,如果需要衍生出版本号分别为0~255的256个版本的密钥,可以将root密钥与版本因子0xFF(十进制的取值为255,即需要生成的密钥的版本号;当然,也可以采用其他取值)进行哈希计算,得到版本号为255的密钥key-255;通过将密钥key-255与版本因子0xFE进行哈希计算,得到版本号为254的密钥key-254;……通过将密钥key-1与版本因子0x00进行哈希计算,得到版本号为0的密钥key-0。由于哈希算法的特性,使得高版本密钥与低版本密钥之间的计算不可逆,比如可以由密钥key-1与版本因子0x00计算得到密钥key-0,但是不能够通过密钥key-0与版本因子0x00反推出密钥key-1。
那么,可以指定某一版本的衍生密钥,作为上述的seal密钥对明文执行结果进行加密得到相应的密文执行结果。进一步地,还可以对seal密钥进行版本更新,且基于上文所述的特性,应当从低版本密钥向高版本密钥进行更新,使得即便低版本密钥泄露后,也无法反推出高版本密钥,确保足够的数据安全性。
上述的隐私交易可以存在多个对应的智能合约,而上述的明文执行结果可以包括每一智能合约分别对应的明文合约执行结果(即明文形式的合约执行结果,对应的智能合约可以为明文合约或隐私合约)。那么:如果隐私交易对应的智能合约均为明文合约,密文执行结果可以包括这些明文合约分别对应的明文合约执行结果,这些明文合约执行结果无需用密钥进行加密,而直接以明文形式进行存储;如果隐私交易对应的智能合约均为隐私合约,密文执行结果可以包括这些隐私合约分别对应的密文合约执行结果,密文合约执行结果由第一区块链节点通过密钥对明文合约执行结果进行加密得到;如果隐私交易对应的智能合约同时包括明文合约和隐私合约,那么密文执行结果可以包括明文合约对应的明文合约执行结果和隐私合约对应的密文合约执行结果。其中,隐私交易对应的多个智能合约可以均用于创建智能合约,可以均用于调用智能合约,或者一部分用于创建智能合约且另一部分用于调用智能合约。
可见,在本说明书的实施例中,第一区块链节点可以创建可信执行环境,并确保相关敏感信息(如交易内容、执行结果等)仅在可信执行环境中被解密读取或执行,而一旦离开可信执行环境时均处于加密状态,从而在处理交易的全链路中,可以保证隐私和安全。
第一区块链节点通过运行用于实现某一功能的代码,以实现该功能。因此,对于需要在可信执行环境中实现的功能,同样需要执行相关代码。而对于在可信执行环境中执行的代码,需要符合可信执行环境的相关规范和要求;相应地,对于相关技术中用于实现某一功能的代码,需要结合可信执行环境的规范和要求重新进行代码编写,不仅存在相对更大的开发量,而且容易在重新编写过程中产生漏洞(bug),影响功能实现的可靠性和稳定性。
因此,第一区块链节点将明文执行结果通过密钥加密为密文执行结果,且该密文执行结果只有通过可信执行环境进行解密,可以确保该密文执行结果本身足够安全。在此基础上,第一区块链节点通过在所述可信执行环境之外执行存储功能代码,将所述密文执行结果(当然,如果隐私交易调用了明文合约,那么此处同样可以用于对明文执行结果进行存储;此处以密文执行结果的存储过程为例进行说明)存储至所述可信执行环境之外的外部存储空间,使得该存储功能代码可以为相关技术中用于实现存储功能的代码、不需要结合可信执行环境的规范和要求重新进行代码编写,即可针对该密文执行结果实现安全可靠的存储,不仅可以在不影响安全、可靠程度的基础上,减少相关代码的开发量,而且可以通过减少可信执行环境的相关代码而降低TCB(Trusted Computing Base,可信计算基),使得TEE技术与区块链技术进行结合的过程中,额外造成的安全风险处于可控范围。
在一实施例中,第一区块链节点可以在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中,比如该写缓存可以对应于如图2所示的“缓存”。进一步的,第一区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。其中,所述写缓存功能代码可以以明文形式存储于所述可信执行环境中,可以直接在可信执行环境中执行该明文形式的缓存功能代码;或,所述写缓存功能代码可以以密文形式存储于所述可信执行环境之外,比如存储于上述的外部存储空间(比如图2所示的“打包+存储”,其中“打包”表示第一区块链节点在可信执行环境之外对交易进行打包成块),可以将该密文形式的写缓存功能代码读入可信执行环境、在可信执行环境中进行解密为明文代码,并执行该明文代码。
写缓存是指在将数据写入外部存储空间时,为了避免造成对外部存储空间的“冲击”而提供的“缓冲”机制。例如,可以采用buffer实现上述的写缓存;当然,写缓存也可以采用cache来实现,本说明书并不对此进行限制。实际上,由于可信执行环境为隔离的安全环境,而外部存储空间位于可信执行环境之外,使得通过采用写缓存机制,可以对缓存内的数据进行批量写入外部存储空间,从而减少可信执行环境与外部存储空间之间的交互次数,提升数据存储效率。同时,可信执行环境在不断执行各条明文交易内容的过程中,可能需要调取已生成的数据(如合约状态的取值),如果需调用的数据恰好位于写缓存中,可以直接从写缓存中读取该数据,这样一方面可以减少与外部存储空间之间的交互,另一方面免去了对从外部存储空间所读取数据的解密过程,从而提升在可信执行环境中的数据处理效率。
当然,也可以将写缓存建立于可信执行环境之外,比如第一区块链节点可以在可信执行环境之外执行写缓存功能代码,从而将所述密文执行结果存入所述可信执行环境外的写缓存中,并进一步将所述写缓存中的数据存储至所述外部存储空间。
在一实施例中,第一区块链节点可以根据客户端发起的查询请求,对所述明文执行结果加密后从可信执行环境输出,以返回至所述客户端。
例如,第一区块链节点可以从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境,然后对所述明文执行结果加密后从可信执行环境输出,比如通过图2所示的交易/查询接口向客户端返回加密后的明文执行结果。
再例如,第一区块链节点可以从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由第一区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。换言之,第一区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,可以通过在可信执行环境内执行读缓存功能代码,将该明文执行结果存入可信执行环境内的读缓存中,比如该读缓存可以对应于图2所示的“缓存”;进一步地,针对客户端发起的查询请求,或者对于可信执行环境在执行明文交易内容时所需的数据,可以优先从该读缓存中进行数据读取,若能读取相关数据则无需从外部存储空间中读取,从而减少与外部存储空间的交互次数、免除数据解密过程。
读缓存是指在将数据从外部存储空间读入可信执行环境后,为了减少与外部存储空间的交互次数,可以将已读取的数据以明文形式存储于可信执行环境中的读缓存空间内。例如,可以采用cache实现上述的读缓存;当然,读缓存也可以采用buffer来实现,本说明书并不对此进行限制。
第一区块链节点可以同时支持上述的读缓存机制和写缓存机制。而随着缓存技术的不断发展,同一缓存可以不仅用于实现数据读取或数据写入,甚至可以同时支持数据的读写操作,使得读缓存与写缓存之间的界线有时并不十分清晰,因而图2中仅以“缓存”进行示意,而并未具体区分其具体类型,可以根据实际需求进行配置和调整。
当然,上述可信执行环境中的缓存机制,同样可以应用于常规执行环境中,例如通过图2所示的常规执行环境中的“缓存”来实现,不过此时的数据读写仅涉及到明文读写,不需要实施数据加解密操作,此处不再赘述。
当第一区块链节点通过竞争或协商确定为记账节点时,第一区块链节点可以向区块链中的验证节点发起共识。具体的,第一区块链节点可以确定本轮需要上链的一组交易,这些交易可以均为明文交易、均为隐私交易或者同时明文交易与隐私交易,那么第一区块链节点可以通过执行该组交易中的各条交易,并根据每条交易及其对应的交易执行结果(若明文交易则对应于明文执行结果、隐私交易则对应于密文执行结果)等信息,生成状态树、交易树和收据树,将这三棵树的根节点对应的根哈希记入区块头中;然后,第一区块链节点将上述的一组交易打包(例如由图2所示的“打包+存储”模块实现)并生成新的区块后,将该区块或区块头广播至区块链网络中的验证节点(即区块链网络中除了记账节点之外的区块链节点),发起共识提议。而验证节点通过执行上述的一组交易,对区块头中的根哈希进行验证,并在确定提议通过验证后,将包含这组交易的区块追加到原有的区块链末尾(即上链)、根据这组交易的执行结果对世界状态进行更新。而第一区块链节点可以在确认共识通过后,通过执行所述存储功能代码对明文交易对应的明文执行结果和/或隐私交易对应的密文执行结果进行存储;当然,也可以在未确认共识通过时就存储,而在发现问题后进行回滚。
当第一区块链节点为验证节点、而非记账节点时,第一区块链节点可以收到记账节点发起的共识提议,所述共识提议与明文交易和/或隐私交易相关。例如,记账节点可以为第二区块链节点,而第一区块链节点收到第二区块链节点发起的共识提议,该共识提议包含一组交易,这些交易均为明文交易、均为隐私交易或者同时明文交易与隐私交易,该共识提议还包含上文所述的三棵树的根节点。第一区块链节点可以通过上文所述的过程,执行明文交易得到相应的明文执行结果、执行隐私交易得到相应的密文执行结果,然后生成三棵树的根节点,并通过与共识提议中区块头所含的根节点进行比较,从而在比较结果为一致时确定所述共识提议通过验证,否则确定为未通过验证。在验证通过后,第一区块链节点通过执行所述存储功能代码对明文交易对应的明文执行结果和/或隐私交易对应的密文执行结果进行存储。
需要指出的是:区块链网络中的各个区块链节点,在针对同一隐私交易对应的明文执行结果进行加密时,应确保采用的密钥相同,这样在隐私交易对应的明文执行结果相同的情况下才能够确保所得的密文执行结果相同,从而生成相同的根节点。
上文结合图1-2所示的实施例,描述了由区块链网络中的节点(如第一区块链节点)对交易类型、账户类型进行识别后,避免隐私账户发起的明文交易被执行;而在其他实施例中,可由隐私账户在客户端生成交易的过程中,基于对交易类型的识别和控制,避免隐私账户生成明文交易,以实现对隐私账户的安全保护。
以下结合图3所示说明本说明书另一实现隐私保护的方法实施例的实现过程:
步骤302,客户端接收到本地账户发起的交易生成请求。
在一实施例中,客户端可以承载于用户使用的某一计算设备上,用户可以在该客户端上登录自身控制的账户。当用户控制的账户在客户端上登录后,该账户即为客户端上的本地账户。
在一实施例中,计算设备可以包含显示屏等显示组件,使得客户端可以向用户呈现一交互界面,而用户可以通过该交互界面发起基于本地账户的交易生成请求。
步骤304,所述客户端识别所述本地账户为明文账户或隐私账户、请求生成的交易为明文交易或隐私交易。
在一实施例中,客户端可以定期向区块链网络中的节点同步账户信息,以获得各个账户及其类型信息的集合(如列表或其他形式),使得客户端可以基于该集合对本地账户的类型进行识别,以确定本地账户为明文类型或隐私类型的账户。
在一实施例中,客户端可以向区块链网络中的节点发送询问请求,该询问请求中可以包含本地账户的信息,使得节点对该本地账户的类型进行识别,并将识别结果返回客户端,则客户端可以据此获知本地账户为明文账户或隐私账户。
在一实施例中,客户端在向用户提供的交互界面中,可以提供对于交易类型的选项,而用户可以根据实际需求触发该选项,以设定希望采用的交易类型为明文类型或隐私类型,使得客户端可以据此获知请求生成的交易为明文交易或隐私交易。
在一实施例中,客户端可以检查交易对应的智能合约,如果交易对应的智能合约中包含至少一个隐私合约,那么判定该交易为隐私交易,如果交易对应的智能合约均为明文合约,那么可以判定该交易为明文交易。当然,交易并不一定存在对应的智能合约,那么客户端可以通过其他方式进行判断,比如基于上述的选项等。
步骤306,所述客户端在隐私账户请求生成明文交易时拒绝所述交易生成请求,否则响应于所述交易生成请求而生成相应的交易。
在一实施例中,当交易生成请求由隐私账户发起时,出于对隐私账户的安全保护,需要限制该交易的类型:当隐私账户发起的交易生成请求用于生成隐私交易时,由于隐私交易相对倾向于满足高级别的隐私保护需求,其采用加密传输且在可信执行环境中执行,使得隐私交易具有极高的隐私性,因而允许生成该隐私交易;当隐私账户发起的交易生成请求用于生成明文交易时,由于明文交易相对倾向于满足处理效率需求,其采用明文传输且在可信执行环境之外执行,使得明文交易的隐私性相对不足,因而不允许生成该明文交易,从而实现了对隐私账户的安全保护,避免使用隐私账户的用户无意间发起明文交易而造成相关隐私信息的泄露。
在一实施例中,当交易生成请求由明文账户发起时,无论该明文账户希望生成明文交易或隐私交易,客户端均予以生成相关交易,使得明文账户可以根据实际需求选择发起明文类型或隐私类型的交易。
在一实施例中,当客户端生成明文交易时,该明文交易由明文账户生成,该明文交易可以用于创建和/或调用智能合约。由于第一区块链节点在可信执行环境之外对明文交易进行处理,且直接将处理得到的明文执行结果存储至外部存储空间,因而当明文交易用于创建智能合约时,该智能合约必然以明文形式存储于外部存储空间,因而该智能合约必然为明文合约。同时,当明文交易调用智能合约时,由于仅在可信执行环境内能够对隐私合约进行解密,因而明文交易调用的智能合约仅能够为明文合约。
在一实施例中,当客户端生成隐私交易时,该隐私交易由明文账户或隐私账户生成,该隐私交易用于创建隐私合约、调用明文合约和/或调用隐私合约。由于隐私交易在TEE中执行,因而隐私交易对应的智能合约可以为隐私合约,比如隐私交易可以在TEE中创建智能合约,该智能合约的合约代码和合约状态均可以在TEE中被加密,从而创建相应的隐私合约;再比如隐私交易可以调用隐私合约,该隐私合约在TEE中被解密和执行,且执行后发生更新的合约状态可以被更新并重新加密存储;又比如隐私交易可以调用明文合约,该明文合约在TEE中被执行后,发生更新的合约状态仍以明文形式进行存储。
虽然通过智能合约可以实现相对更加复杂的处理逻辑,但上述的明文交易和隐私交易还可以用于实现诸如转账等相对简单的处理逻辑,此时也可以不调用智能合约来实现。
假定上述的隐私交易在某一客户端处生成,该客户端可以首先生成明文交易内容,然后将该明文交易内容用密钥加密。所述加密,可以采用对称加密,也可以采用非对称加密。相应地,第一区块链节点可以用对应的密钥解密所述隐私交易,以获得明文交易内容。如果客户端用对称加密方式,即用对称加密算法的对称密钥对明文交易内容加密,则相应地,第一区块链节点可以用所述对称加密算法的对称密钥解密所述隐私交易。对称加密采用的加密算法,例如是DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。对称加密算法的对称密钥,例如可以是由所述隐私交易的生成方生成,或由客户端和第一区块链节点协商确定,或由密钥管理服务器发送得到。
如果用非对称加密方式,即用非对称加密算法的私钥对明文交易内容加密,则相应地,第一区块链节点可以用所述非对称加密算法的私钥解密所述隐私交易。非对称加密算法,例如是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。非对称加密算法的密钥,例如可以是由第一区块链节点生成一对公钥和私钥,并将公钥预先发送至所述客户端,从而所述客户端可以将明文交易内容用密钥加密。
非对称加密算法的密钥,也可以由一个密钥管理服务器生成。通过远程证明的方式,密钥管理服务器将私钥发送至第一区块链节点,具体的,可以是传入第一区块链节点的围圈中。第一区块链节点可以包含多个围圈,而上述私钥可以被传入这些围圈中的安全围圈;例如,该安全围圈可以为QE(Quoting Enclave)围圈,而非AE(Application Enclave)围圈。对于非对称加密的公钥,可以由密钥管理服务器发送至所述客户端。因而客户端可以用该公钥加密明文交易内容,相应地,第一区块链节点可以用所述私钥解密所述隐私交易,以得到该隐私交易包含的明文交易内容。
客户端也可以采用对称加密结合非对称加密相结合的方式。例如,客户端采用对称加密算法加密明文交易内容,即采用对称加密算法的对称密钥加密明文交易内容,并用非对称加密算法加密对称加密算法中采用的对称密钥。一般的,采用非对称加密算法的公钥加密对称加密算法中采用的对称密钥。这样,第一区块链节点接收到加密的交易后,可以先采用非对称加密算法的私钥进行解密,得到对称加密算法的对称密钥,进而用对称加密算法的对称密钥解密得到明文交易内容。
例如,密钥管理服务器通过远程证明可以将非对称加密算法的私钥发送至第一区块链节点的围圈,并将非对称加密算法的私钥发送至所述客户端。因而,所述客户端可以采用对称加密算法的对称密钥加密明文交易内容,即采用对称加密算法的对称密钥加密明文交易内容,并用非对称加密算法的公钥加密对称加密算法中采用的对称密钥。进而,所述客户端可以将所述隐私交易和加密私钥(由非对称加密算法的公钥对所述对称加密算法中采用的对称密钥进行加密后得到)发送至第一区块链节点。第一区块链节点接收到所述隐私交易和加密私钥后,可以先用非对称加密算法的私钥对该加密私钥进行解密得到对称加密算法的对称密钥,进而用该对称加密算法的对称密钥解密所述隐私交易,得到明文交易内容。这里的加密方式一般称为数字信封加密。
以下结合图4介绍本说明书一种区块链中实现混合交易的节点实施例,包括:
接收单元401,用于接收交易;
识别单元402,用于识别所述交易为明文交易或隐私交易、所述交易的生成方账户为明文账户或隐私账户;
执行单元403,用于在所述交易为隐私账户发起的明文交易时拒绝执行所述交易,否则执行所述交易。
以下结合图5介绍本说明书一种区块链中实现混合交易的系统实施例,包括客户端501和第一区块链节点502,其中:
客户端501接收到本地账户发起的交易生成请求后,识别所述本地账户为明文账户或隐私账户、请求生成的交易为明文交易或隐私交易,并在隐私账户请求生成明文交易时拒绝所述交易生成请求,否则响应于所述交易生成请求而生成相应的交易;
第一区块链节点502在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;或,第一区块链节点502对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后存储至所述外部存储空间。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。