区块链中实现混合交易的方法、节点和存储介质转让专利

申请号 : CN201910100731.6

文献号 : CN110020856B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 闫莺魏长征

申请人 : 阿里巴巴集团控股有限公司

摘要 :

本说明书的实施例提供一种区块链中实现混合交易的方法、节点和存储介质,该方法可以包括:第一区块链节点接收交易,所述交易包含明文的类型字段;第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;第一区块链节点在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;第一区块链节点对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。

权利要求 :

1.一种区块链中实现混合交易的方法,包括:

第一区块链节点在可信执行环境之外的常规执行环境中接收交易,所述交易包含明文的类型字段;

第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;

第一区块链节点通过所述常规执行环境中部署的虚拟机执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;

第一区块链节点将所述隐私交易传入可信执行环境中,对所述隐私交易进行解密,以获得相应的明文交易内容;通过可信执行环境中部署的虚拟机执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。

2.根据权利要求1所述的方法,

所述交易由客户端提交至第一区块链节点;或,

所述交易由第二区块链节点转发至第一区块链节点。

3.根据权利要求1所述的方法,还包括:

第一区块链节点向区块链中的验证节点发起共识,所述共识与下述至少之一相关:明文交易及其对应的明文执行结果、隐私交易及其对应的密文执行结果,使验证节点验证共识通过后存储明文交易对应的明文执行结果和/或隐私交易对应的密文执行结果。

4.根据权利要求1所述的方法,还包括:

第一区块链节点收到记账节点发起的共识提议,所述共识提议与明文交易和/或隐私交易相关;

第一区块链节点根据明文交易对应的明文执行结果和/或隐私交易对应的密文执行结果对所述共识提议进行验证;其中,在验证通过后,第一区块链节点通过执行所述存储功能代码对明文交易对应的明文执行结果和/或隐私交易对应的密文执行结果进行存储。

5.根据权利要求1所述的方法,

所述隐私交易由对称加密算法的私钥进行加密,第一区块链节点用所述对称加密算法的私钥对所述隐私交易进行解密得到的明文交易内容;或,所述隐私交易由非对称加密算法的公钥进行加密,第一区块链节点用所述非对称加密算法的私钥对所述隐私交易进行解密得到所述明文交易内容。

6.根据权利要求1所述的方法,所述隐私交易由对称加密算法的私钥进行加密,且所述对称加密算法的私钥被非对称加密算法的公钥进行加密;

第一区块链节点用所述非对称加密算法的私钥解密得到所述对称加密算法的私钥,并用所述对称加密算法的私钥对所述隐私交易进行解密得到所述明文交易内容。

7.根据权利要求5或6所述的方法,所述对称加密算法的私钥,由所述隐私交易的生成方与第一区块链节点协商得到,或由密钥管理服务器发送得到。

8.根据权利要求6所述的方法,密钥管理服务器通过远程证明将所述非对称加密算法的私钥发送至第一区块链节点的围圈,将所述非对称加密算法的公钥发送至所述隐私交易的生成方。

9.根据权利要求1所述的方法,所述密文交易存在多个对应的智能合约,且所述密文交易中存在为每一智能合约分别标注的处理类型;所述明文执行结果包括每一智能合约分别对应的明文合约执行结果;

当所述密文交易对应的第一智能合约被标注为隐私处理类型时,第一智能合约对应的明文合约执行结果被第一区块链节点通过密钥加密为密文合约执行结果,所述密文执行结果包含所述密文合约执行结果;

当所述密文交易对应的第二智能合约被标注为明文处理类型时,所述密文执行结果包含所述第二智能合约对应的明文合约执行结果。

10.根据权利要求9所述的方法,所述密文交易用于创建智能合约和/或调用智能合约。

11.根据权利要求1所述的方法,对所述明文执行结果进行加密的密钥包括对称加密算法的密钥或非对称加密算法的密钥。

12.根据权利要求11所述的方法,所述对称加密算法的密钥包括seal密钥。

13.根据权利要求12所述的方法,

所述seal密钥在第一区块链节点的SGX通过远程证明后由密钥管理服务器发送;或,所述seal密钥由第一区块链节点与其他区块链节点之间协商得到。

14.根据权利要求1所述的方法,对所述明文执行结果进行加密的密钥存储于第一区块链节点的围圈中。

15.根据权利要求1所述的方法,还包括:

第一区块链节点在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中;

其中,第一区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。

16.根据权利要求15所述的方法,所述缓存功能代码以明文形式存储于所述可信执行环境中;或,所述写缓存功能代码以密文形式存储于所述可信执行环境之外。

17.根据权利要求1所述的方法,还包括:

第一区块链节点在可信执行环境之外执行写缓存功能代码,以将所述密文执行结果存入所述可信执行环境外的写缓存中;

其中,第一区块链节点进一步将所述写缓存中的数据存储至所述外部存储空间。

18.根据权利要求1所述的方法,还包括:

第一区块链节点根据客户端发起的查询请求,对所述明文执行结果加密后从可信执行环境输出,以返回至所述客户端。

19.根据权利要求18所述的方法,所述对所述明文执行结果加密后从可信执行环境输出,包括:第一区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境;对所述明文执行结果加密后从可信执行环境输出;或,第一区块链节点从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由第一区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。

20.一种区块链中实现混合交易的方法,包括:

第一区块链节点在可信执行环境之外的常规执行环境中接收交易,所述交易包含明文的类型字段;

第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;

第一区块链节点通过所述常规执行环境中部署的虚拟机执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;所述第一区块链节点还包含部署于可信执行环境中的虚拟机,以用于处理所述隐私交易。

21.根据权利要求20所述的方法,还包括:

第一区块链节点对所述隐私交易进行解密,以获得相应的明文交易内容;

第一区块链节点在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;

第一区块链节点在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。

22.根据权利要求21所述的方法,还包括:

第一区块链节点在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中;

其中,第一区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。

23.根据权利要求22所述的方法,所述缓存功能代码以明文形式存储于所述可信执行环境中;或,所述写缓存功能代码以密文形式存储于所述可信执行环境之外。

24.根据权利要求21所述的方法,还包括:

第一区块链节点在可信执行环境之外执行写缓存功能代码,以将所述密文执行结果存入所述可信执行环境外的写缓存中;

其中,第一区块链节点进一步将所述写缓存中的数据存储至所述外部存储空间。

25.根据权利要求21所述的方法,还包括:

第一区块链节点根据客户端发起的查询请求,对所述明文执行结果加密后从可信执行环境输出,以返回至所述客户端。

26.根据权利要求25所述的方法,所述对所述明文执行结果加密后从可信执行环境输出,包括:第一区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境;对所述明文执行结果加密后从可信执行环境输出;或,第一区块链节点从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由第一区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。

27.一种区块链中实现混合交易的方法,包括:

第一区块链节点在可信执行环境之外的常规执行环境中接收交易,所述交易包含明文的类型字段;

第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;

第一区块链节点将所述隐私交易传入可信执行环境中,对所述隐私交易进行解密,以获得相应的明文交易内容;通过可信执行环境中部署的虚拟机执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间;所述第一区块链节点还包含部署于可信执行环境中的虚拟机,以用于处理所述隐私交易。

28.根据权利要求27所述的方法,还包括:

第一区块链节点在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述外部存储空间。

29.根据权利要求27所述的方法,还包括:

第一区块链节点在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中;

其中,第一区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。

30.根据权利要求29所述的方法,所述缓存功能代码以明文形式存储于所述可信执行环境中;或,所述写缓存功能代码以密文形式存储于所述可信执行环境之外。

31.根据权利要求27所述的方法,还包括:

第一区块链节点在可信执行环境之外执行写缓存功能代码,以将所述密文执行结果存入所述可信执行环境外的写缓存中;

其中,第一区块链节点进一步将所述写缓存中的数据存储至所述外部存储空间。

32.根据权利要求27所述的方法,还包括:

第一区块链节点根据客户端发起的查询请求,对所述明文执行结果加密后从可信执行环境输出,以返回至所述客户端。

33.根据权利要求32所述的方法,所述对所述明文执行结果加密后从可信执行环境输出,包括:第一区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境;对所述明文执行结果加密后从可信执行环境输出;或,第一区块链节点从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由第一区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。

34.一种区块链中实现混合交易的节点,包括:

接收单元,用于在可信执行环境之外的常规执行环境中接收交易,所述交易包含明文的类型字段;

识别单元,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;

明文交易处理单元,用于通过所述常规执行环境中部署的虚拟机执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;

隐私交易处理单元,用于将所述隐私交易传入可信执行环境中,对所述隐私交易进行解密,以获得相应的明文交易内容;通过可信执行环境中部署的虚拟机执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。

35.一种区块链中实现混合交易的节点,包括:

接收单元,用于在可信执行环境之外的常规执行环境中接收交易,所述交易包含明文的类型字段;

识别单元,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;

明文交易处理单元,用于第一区块链节点通过所述常规执行环境中部署的虚拟机执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;

所述第一区块链节点还包含部署于可信执行环境中的虚拟机,以用于处理所述隐私交易。

36.根据权利要求35所述的节点,还包括:

解密单元,用于对所述隐私交易进行解密,以获得相应的明文交易内容;

执行单元,用于在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;

存储单元,用于在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。

37.一种区块链中实现混合交易的节点,包括:

接收单元,用于在可信执行环境之外的常规执行环境中接收交易,所述交易包含明文的类型字段;

识别单元,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;

解密单元,用于将所述隐私交易传入可信执行环境中,对所述隐私交易进行解密,以获得相应的明文交易内容;

执行单元,用于第一区块链节点通过可信执行环境中部署的虚拟机执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;所述第一区块链节点还包含部署于可信执行环境中的虚拟机,以用于处理所述隐私交易;

存储单元,用于在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。

38.根据权利要求37所述的节点,还包括:

明文交易处理单元,用于在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述外部存储空间。

39.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-33中任一项所述方法的步骤。

说明书 :

区块链中实现混合交易的方法、节点和存储介质

技术领域

[0001] 本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链中实现混合交易的方法、节点和存储介质。

背景技术

[0002] 区块链技术构建在传输网络(例如点对点网络)之上。传输网络中的网络节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。这些区块链网络中的节点有时需要增加。
[0003] 目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(Homomorphic encryption)和零知识证明(Zero-knowledge proof)等复杂度高,通用性差,而且还可能带来严重的性能损失。
[0004] 在解决隐私方面,可信执行环境(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,平台安全处理器)。

发明内容

[0005] 有鉴于此,本说明书一个或多个实施例提供一种区块链中实现混合交易的方法、节点和存储介质。
[0006] 为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
[0007] 根据本说明书一个或多个实施例的第一方面,提出了一种区块链中实现混合交易的方法,包括:
[0008] 第一区块链节点接收交易,所述交易包含明文的类型字段;
[0009] 第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0010] 第一区块链节点在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;
[0011] 第一区块链节点对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。
[0012] 根据本说明书一个或多个实施例的第二方面,提出了一种区块链中实现混合交易的方法,包括:
[0013] 第一区块链节点接收交易,所述交易包含明文的类型字段;
[0014] 第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0015] 第一区块链节点在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间。
[0016] 根据本说明书一个或多个实施例的第三方面,提出了一种区块链中实现混合交易的方法,包括:
[0017] 第一区块链节点接收交易,所述交易包含明文的类型字段;
[0018] 第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0019] 第一区块链节点对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。
[0020] 根据本说明书一个或多个实施例的第四方面,提出了一种区块链中实现混合交易的节点,包括:
[0021] 接收单元,用于接收交易,所述交易包含明文的类型字段;
[0022] 识别单元,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0023] 明文交易处理单元,用于在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;
[0024] 隐私交易处理单元,用于对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。
[0025] 根据本说明书一个或多个实施例的第五方面,提出了一种区块链中实现混合交易的节点,包括:
[0026] 接收单元,用于接收交易,所述交易包含明文的类型字段;
[0027] 识别单元,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0028] 明文交易处理单元,用于在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间。
[0029] 根据本说明书一个或多个实施例的第六方面,提出了一种区块链中实现混合交易的节点,包括:
[0030] 接收单元,用于接收交易,所述交易包含明文的类型字段;
[0031] 识别单元,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0032] 解密单元,用于对所述隐私交易进行解密,以获得相应的明文交易内容;
[0033] 执行单元,用于在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;
[0034] 存储单元,用于在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。
[0035] 根据本说明书一个或多个实施例的第七方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面、第二方面或第三方面所述方法的步骤。

附图说明

[0036] 图1是一示例性实施例提供的一种区块链中实现混合交易的方法的流程图。
[0037] 图2是一示例性实施例提供的一种混合交易的示意图。
[0038] 图3是一示例性实施例提供的一种创建智能合约的示意图。
[0039] 图4是一示例性实施例提供的一种调用智能合约的示意图。
[0040] 图5是一示例性实施例提供的一种创建和调用智能合约的示意图。
[0041] 图6是一示例性实施例提供的另一种区块链中实现混合交易的方法的流程图。
[0042] 图7是一示例性实施例提供的又一种区块链中实现混合交易的方法的流程图。
[0043] 图8是一示例性实施例提供的一种区块链中实现隐私保护的节点的组成图。
[0044] 图9是一示例性实施例提供的另一种区块链中实现混合交易的节点的组成图。
[0045] 图10是一示例性实施例提供的又一种区块链中实现混合交易的节点的组成图。

具体实施方式

[0046] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
[0047] 需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
[0048] 区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
[0049] 以下结合图1所示说明本说明书一区块链中实现混合交易的方法实施例的实现过程:
[0050] 步骤102,第一区块链节点接收交易,所述交易包含明文的类型字段。
[0051] 在一实施例中,交易可以由客户端提交至第一区块链节点。例如,用户在客户端生成该交易后,通过该客户端将交易提交至第一区块链节点。以图2为例,第一区块链节点中包含交易/查询接口,该接口可与客户端对接,使得客户端可以向第一区块链节点提交交易。
[0052] 所述交易也可由第二区块链节点转发至第一区块链节点。例如,用户在客户端生成该交易后,通过该客户端将该交易提交至第二区块链节点;然后,第二区块链节点进一步将该交易转发至第一区块链节点。以图2为例,上述接口可与其他区块链节点对接,比如该其他区块链节点可以包含上述的第二区块链节点,使得第二区块链节点可以向第一区块链节点转发交易。类似地,第二区块链节点也可通过自身的交易/查询接口与客户端对接,以接收客户端提交的交易。
[0053] 比如在采用工作量证明(Proof of Work,POW)以及股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法的区块链网络中,第二区块链节点在收到客户端提交的该交易后,立即扩散(如广播)至以太坊网络中的其他区块链节点。
[0054] 再比如在采用实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等机制的区块链网络中,记账节点在本轮记账前已经商定好,使得第二区块链节点在收到客户端提交的该交易后,若自身并非记账节点,则将该交易发送至已确定的记账节点,使得该记账节点在进一步的共识阶段将交易(包括该交易)打包发送至各个验证节点。而当第二区块链节点自身为已确定的记账节点时,其他区块链节点收到客户端提交的交易后,可以将交易转发至该第二区块链节点;然后,第二区块链节点可以在共识阶段将上述交易(或还包括其他交易)打包发送至各个验证节点,包括第一区块链节点。
[0055] 步骤104,第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易。
[0056] 在一实施例中,通过在交易中添加类型字段,使得第一区块链可以据此识别交易类型为明文交易或隐私交易。在相关技术中,例如在以太坊网络中,交易通常包含to、value、data等字段。而本实施例在相关技术的基础上,在交易中增加一类型字段,比如表征为type字段,并基于该类型字段的取值,表明相关交易的类型;例如,当类型字段为第一取值时,表明相关交易为明文交易,当类型字段为第二取值时,表明相关交易为隐私交易。
[0057] 在一实施例中,明文交易的所有内容均采用明文形式,即该交易的各个字段均采用明文形式,使得第一区块链节点可以直接对该明文交易的各个字段进行读取,以实施相关处理。隐私交易除了类型字段采用明文形式之外,其他字段均采用密文形式,使得一方面第一区块链节点能够在无需解密的情况下,快速识别交易类型,从而针对明文交易和隐私交易实施差异化处理,另一方面通过采用密文形式使其仅能够被持有密钥的对象进行解密和读取,避免交易信息发生泄露。
[0058] 步骤106A,第一区块链节点在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间。
[0059] 在一实施例中,第一区块链节点兼容相关技术中对于明文交易的处理能力,可以在可信执行环境之外对明文交易进行处理,并将明文执行结果存储至外部存储空间。例如图2所示,第一区块链节点可以划分为常规执行环境和可信执行环境,客户端提交(以客户端提交的交易为例)的交易首先进入常规执行环境中的“交易/查询接口”进行类型识别,将识别出的明文交易留在常规执行环境中进行处理,而将识别出的隐私交易传递至可信执行环境中进行处理。换言之,第一区块链节点既可以兼容相关技术中对于明文交易的处理,又能够对密文形式的隐私交易进行处理,从而在整个区块链网络上对明文交易与隐私交易实现混合处理。
[0060] 本说明书中的交易可以用于实现相对简单的处理逻辑,比如类似于相关技术中的转账逻辑。
[0061] 本说明书中的交易还可以用于实现相对复杂的处理逻辑,这里可以借助于智能合约来实现。不论是公有链、私有链还是联盟链,都可能提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。当然,上述的明文交易内容并不一定与智能合约相关,比如该明文交易内容仅包含转账信息等,但通过采用与智能合约相关的明文交易内容,可以实现相对更加复杂的处理逻辑。
[0062] 以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上的智能合约可以是字节码的形式。
[0063] 例如图3所示,Bob将一个包含创建智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。交易的data字段保存的可以是字节码,交易的to字段为一个空的账户。节点间通过共识机制达成一致后,这个合约成功创建,后续用户可以调用这个合约。
[0064] 合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码和账户存储将保存在该合约账户中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(Storage)的虚拟账户。
[0065] 前述提到,包含创建智能合约的交易的data字段保存的可以是该智能合约的字节码。字节码由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码,而是选择一门高级语言编写智能合约代码。高级语言编写的智能合约代码,经过编译器编译,生成字节码,进而该字节码可以部署到区块链上。以太坊支持的高级语言很多,如Solidity、Serpent、LLL语言等。
[0066] 此外,如图4所示,仍以以太坊为例,Bob将一个包含调用智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中4中交易的from字段是发起调用智能合约的账户的地址,to字段中的“0x692a70d2…”代表了被调用的智能合约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的调用智能合约的方法和参数。调用智能合约后,balance的值可能改变。后续,某个客户端可以通过某一区块链节点查看balance的当前值。
[0067] 智能合约可以通过规定的方式在区块链网络中的每个节点独立地执行,所有执行记录和数据都保存在区块链上,所以当这样的交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。
[0068] 创建智能合约和调用智能合约的示意图如图5所示。以太坊中要创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,智能合约代码分布式地运行在以太坊网络中每个节点的虚拟机中。
[0069] 步骤106B,第一区块链节点对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。
[0070] 在一实施例中,第一区块链节点可以在可信执行环境(Trusted Execution Environment,TEE)中解密所述隐私交易。TEE是基于CPU硬件的安全扩展,且与外部完全隔离的可信执行环境。TEE最早是由Global Platform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。ARM的Trust Zone技术最早实现了真正商用的TEE技术。
[0071] 伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对TEE提出了更多的需求。TEE的概念也得到了高速的发展和扩充。现在所说的TEE相比与最初提出的概念已经是更加广义的TEE。例如,服务器芯片厂商Intel,AMD等都先后推出了硬件辅助的TEE并丰富了TEE的概念和特性,在工业界得到了广泛的认可。现在提起的TEE通常更多指这类硬件辅助的TEE技术。不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用TEE的第一步就是要确认TEE的真实可信。因此现在的TEE技术都引入了远程证明机制,由硬件厂商(主要是CPU厂商)背书并通过数字签名技术确保用户对TEE状态可验证。同时仅仅是安全的资源隔离也无法满足的安全需求,进一步的数据隐私保护也被提出。包括Intel SGX,AMD SEV在内的商用TEE也都提供了内存加密技术,将可信硬件限定在CPU内部,总线和内存的数据均是密文防止恶意用户进行窥探。例如,英特尔的软件保护扩展(SGX)等TEE技术隔离了代码执行、远程证明、安全配置、数据的安全存储以及用于执行代码的可信路径。在TEE中运行的应用程序受到安全保护,几乎不可能被第三方访问。
[0072] 以Intel SGX技术为例,SGX提供了围圈(enclave,也称为飞地),即内存中一个加密的可信执行区域,由CPU保护数据不被窃取。以第一区块链节点采用支持SGX的CPU为例,利用新增的处理器指令,在内存中可以分配一部分区域EPC(Enclave Page Cache,围圈页面缓存或飞地页面缓存),通过CPU内的加密引擎MEE(Memory Encryption Engine)对其中的数据进行加密。EPC中加密的内容只有进入CPU后才会被解密成明文。因此,在SGX中,用户可以不信任操作系统、VMM(Virtual Machine Monitor,虚拟机监控器)、甚至BIOS(Basic Input Output System,基本输入输出系统),只需要信任CPU便能确保隐私数据不会泄漏。实际应用中,可以将隐私数据加密后以密文形式传递至围圈中,并通过远程证明将对应的秘钥也传入围圈。然后,在CPU的加密保护下利用数据进行运算,结果会以密文形式返回。这种模式下,既可以利用强大的计算力,又不用担心数据泄漏。
[0073] 假定上述的隐私交易由用户在某一客户端处生成,该客户端可以首先生成明文交易内容,然后将该明文交易内容用密钥加密。所述加密,可以采用对称加密,也可以采用非对称加密。相应地,第一区块链节点可以用对应的密钥解密所述隐私交易,以获得明文交易内容。如果客户端用对称加密方式,即用对称加密算法的私钥对明文交易内容加密,则相应地,第一区块链节点可以用所述对称加密算法的私钥解密所述隐私交易。对称加密采用的加密算法,例如是DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。对称加密算法的密钥,例如可以是由客户端和第一区块链节点协商确定。
[0074] 如果用非对称加密方式,即用非对称加密算法的私钥对明文交易内容加密,则相应地,第一区块链节点可以用所述非对称加密算法的私钥解密所述隐私交易。非对称加密算法,例如是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。非对称加密算法的密钥,例如可以是由第一区块链节点生成一对公钥和私钥,并将公钥在步骤402之前发送至所述客户端,从而步骤402中所述客户端可以将明文交易内容用密钥加密。
[0075] 非对称加密算法的密钥,也可以由一个密钥管理服务器生成。通过远程证明的方式,密钥管理服务器将私钥发送至第一区块链节点,具体的,可以是传入第一区块链节点的围圈中。第一区块链节点可以包含多个围圈,而上述私钥可以被传入这些围圈中的安全围圈;例如,该安全围圈可以为QE(Quoting Enclave)围圈,而非AE(Application Enclave)围圈。对于非对称加密的公钥,可以由密钥管理服务器发送至所述客户端。因而在步骤402中,所述客户端可以用该公钥加密明文交易内容,相应地,第一区块链节点可以用所述私钥解密所述隐私交易,以得到该隐私交易包含的明文交易内容。
[0076] 客户端也可以采用对称加密结合非对称加密相结合的方式。例如,客户端采用对称加密算法加密明文交易内容,即采用对称加密算法的私钥加密明文交易内容,并用非对称加密算法加密对称加密算法中采用的私钥。一般的,采用非对称加密算法的公钥加密对称加密算法中采用的私钥。这样,第一区块链节点接收到加密的交易后,可以先采用非对称加密算法的私钥进行解密,得到对称加密算法的私钥,进而用对称加密算法的私钥解密得到明文交易内容。
[0077] 例如,密钥管理服务器通过远程证明可以将非对称加密算法的私钥发送至第一区块链节点的围圈,并将非对称加密算法的私钥发送至所述客户端。因而,所述客户端可以采用对称加密算法的私钥加密明文交易内容,即采用对称加密算法的私钥加密明文交易内容,并用非对称加密算法的公钥加密对称加密算法中采用的私钥。进而,所述客户端可以将所述隐私交易和加密私钥(由非对称加密算法的公钥对所述对称加密算法中采用的私钥进行加密后得到)发送至第一区块链节点。第一区块链节点接收到所述隐私交易和加密私钥后,可以先用非对称加密算法的私钥对该加密私钥进行解密得到对称加密算法的私钥,进而用该对称加密算法的私钥解密所述隐私交易,得到明文交易内容。这里的加密方式一般称为数字信封加密。
[0078] 第一区块链节点对隐私交易进行解密后,得到明文交易内容。明文交易内容可以包含智能合约的代码,以用于在区块链中创建智能合约;明文交易内容可以包含区块链中已创建的某一智能合约的合约地址,以用于调用该智能合约。
[0079] 无论是用于创建或调用智能合约,第一区块链节点可以通过执行该智能合约的代码,以完成交易。第一区块链节点可以在可信执行环境中执行所述智能合约的代码。当智能合约的代码位于隐私交易中时,第一区块链节点通过对隐私交易进行解密得到上述的明文交易内容,该明文交易内容中包含明文的智能合约的代码;当智能合约预先已创建、隐私交易用于调用该智能合约时,如果该智能合约预先被第一区块链节点进行加密存储,而该第一区块链节点可以通过将密文的智能合约的代码读入可信执行环境中,并解密得到明文的智能合约的代码。智能合约之间可以实现多重嵌套结构;例如智能合约1中的代码调用了智能合约2,而智能合约2中的代码指向了经创建智能合约代码生成的合约地址3,从而当隐私交易调用智能合约1中的代码时,间接调用了所述合约地址3中的智能合约代码。
[0080] 在一实施例中,所述密文交易可以存在多个对应的智能合约,且所述密文交易中存在为每一智能合约分别标注的处理类型,使得第一区块链节点可以针对该密文交易中不同处理类型的智能合约采用差异化的处理操作;其中,上文所述的明文执行结果包括每一智能合约分别对应的明文合约执行结果。例如,智能合约的代码中可以包括一类型字段,第一区块链节点可以基于每一智能合约的代码中所含类型字段的取值,确定该智能合约为隐私处理类型或是明文处理类型;再例如,隐私处理类型的智能合约中可以包含隐私标识符、明文处理类型的智能合约可以不包含该隐私标识符;又例如,明文处理类型的智能合约可以包含明文标识符、隐私处理类型的智能合约可以不包含该明文标识符;相应地,第一区块链节点可以基于上述差异,区分不同处理类型的智能合约。
[0081] 假定所述密文交易存在对应的第一智能合约,该第一智能合约被标注为隐私处理类型,第一区块链节点可以在可信执行环境中执行该第一智能合约、得到相应的明文合约执行结果,并进一步通过密钥对该第一智能合约对应的明文合约执行结果进行加密为密文合约执行结果,则上述的密文执行结果包含该密文合约执行结果,该密文合约执行结果可以在外部存储空间中实现密文存储。
[0082] 假定所述密文交易存在对应的第二智能合约,该第二智能合约被标注为明文处理类型,第一区块链节点可以在可信执行环境中执行该第二智能合约、得到相应的明文合约执行结果,但无需进一步实施加密操作,上述的密文执行结果可以包含该明文合约执行结果,该明文合约执行结果可以在外部存储空间中实现明文存储。
[0083] 可见,当所述密文交易包含的各个智能合约均为隐私处理类型时,密文执行结果包含这些智能合约分别对应的密文合约执行结果;当所述密文交易同时包含隐私处理类型和明文处理类型的智能合约时,密文执行结果包含这些智能合约分别对应的密文合约执行结果和明文合约执行结果。
[0084] 所述密文交易可以用于创建智能合约和/或调用智能合约。
[0085] 当所述密文交易用于创建智能合约时,交易中的to字段为空,而data字段中可以分别包含多个需要创建的智能合约的代码,而代码中可以标注对应智能合约的处理类型。那么,对于隐私处理类型的智能合约,第一区块链节点可以创建为隐私类型的智能合约,该智能合约的代码以密文形式存储于外部存储空间。对于明文处理类型的智能合约,第一区块链节点可以创建为明文类型的智能合约,该智能合约的代码以明文形式存储于外部存储空间。
[0086] 当所述密文交易用于调用智能合约时,交易中可以包含n个to字段,以分别对应于n个不同的合约调用,比如to1字段为智能合约1的地址、以针对该智能合约1进行调用,to2字段为智能合约2的地址、以针对该智能合约2进行调用等。那么,针对每一合约调用,可以分别在data字段注明对应的处理类型:当智能合约1被标注为隐私处理类型时,无论该智能合约1本身为隐私类型或明文类型的智能合约,第一区块链节点在执行该智能合约1、使得相应的合约状态发生变化后,均对该合约状态进行加密后存储至外部存储空间;当智能合约2被标注为明文处理类型时,该智能合约2一般应当为明文类型的智能合约(当然,并不排除智能合约2为隐私类型的智能合约的情况),第一区块链节点在执行该智能合约2、使得相应的合约状态发生变化后,均对该合约状态进行明文存储至外部存储空间。
[0087] 当然,在密文交易用于调用智能合约时,如果多个合约调用均对同一智能合约进行调用,交易中可以仅包含一个to字段,该to字段的取值为被调用的智能合约的地址,而data字段可以包含针对该同一智能合约所需实施的多次调用的信息。比如被调用的智能合约用于在指定时刻实施转账操作,那么所述密文交易可以在to字段写入该智能合约的地址,在data字段分别写入各个调用的信息,比如每一调用希望发生的时刻、转账对象和转账金额等,并分别标注希望采用的处理类型;例如,当调用1希望在时刻t1向账户U1转入金额M1、标注为隐私处理类型时,第一区块链节点可以调用该智能合约以完成转账,并将合约状态加密后存储至外部存储空间,而当调用2希望在时刻t2向账户U2转入金额M2、标注为明文处理类型时,第一区块链节点可以调用该智能合约以完成转账,并将合约状态明文存储至外部存储空间。
[0088] 当所述密文交易用于创建和调用智能合约时,所有的创建智能合约可以对应于一个空的to字段,而各个调用智能合约可以根据情况使用一个或多个to字段,这可以参考上述调用智能合约时的相关情况。相应地,data字段可以包含需创建的智能合约的代码、该代码中可以标注相关智能合约的处理类型,以及data字段可以包含针对被调用的智能合约而标注的处理类型。第一区块链节点根据标注的处理类型,可以相应地创建和调用智能合约,可以分别参考上述创建智能合约和调用智能合约的实施例。
[0089] 具体的,第一区块链节点可以利用CPU中新增的处理器指令,在内存中可以分配一部分区域EPC,通过CPU内的加密引擎MEE对上述的明文代码进行加密存入所述EPC中。EPC中加密的内容进入CPU后被解密成明文。在CPU中,对所述明文的代码进行运算,完成执行过程。
[0090] SGX技术中,执行所述智能合约的代码,可以将EVM加载进所述围圈中。在远程证明过程中,所述密钥管理服务器可以计算本地EVM代码的hash值,并与第一区块链节点中加载的EVM代码的hash值比对,比对结果正确作为通过远程证明的一个必要条件,从而完成对第一区块链节点SGX围圈加载的代码的度量。经过度量,正确的EVM可以在SGX中执行所述智能合约代码。
[0091] 一般的,CPU执行所述明文代码后,所述合约状态会发生变化。将合约状态存入区块链,从区块链节点的角度,是将该合约状态写入数据库,例如本地的数据库。所述数据库,一般存储于存储介质之中,更多见的是持久性存储介质。所述持久性存储介质,可以是磁盘、软盘,也可以是通电后可恢复数据从而可以持久存储的内存之类。
[0092] 写入数据库的操作,用代码表示的话,如setstorage(key,ENC(value,secret_key))。setstorage(key,ENC(value,secret_key))中,键(key)可以与传统的键写入方式相同。至于value的写入,可以采用Intel SGX技术,ENC表示enclave,secret_key表示采用SGX技术中写入数据库时采用的密钥。所述密钥可以是对称加密的密钥,例如是seal(Simple Encrypted Arithmetic Library)密钥。所述seal密钥,例如可以是通过远程证明后由密钥管理服务器发送给第一区块链节点,再例如可以是区块链中的各个节点(如第一区块链节点与其他区块链节点)之间协商得到。所述密钥也可以是非对称加密的密钥。所述密钥可以被存储于第一区块链节点的围圈中。第一区块链节点可以包含多个围圈,而上述私钥可以被传入这些围圈中的安全围圈;例如,该安全围圈可以为QE围圈,而非AE围圈。
[0093] 可见,在本说明书的实施例中,第一区块链节点可以创建可信执行环境,并确保相关敏感信息(如交易内容、执行结果等)仅在可信执行环境中被解密读取或执行,而一旦离开可信执行环境时均处于加密状态,从而在处理交易的全链路中,可以保证隐私和安全。
[0094] 第一区块链节点通过运行用于实现某一功能的代码,以实现该功能。因此,对于需要在可信执行环境中实现的功能,同样需要执行相关代码。而对于在可信执行环境中执行的代码,需要符合可信执行环境的相关规范和要求;相应地,对于相关技术中用于实现某一功能的代码,需要结合可信执行环境的规范和要求重新进行代码编写,不仅存在相对更大的开发量,而且容易在重新编写过程中产生漏洞(bug),影响功能实现的可靠性和稳定性。
[0095] 因此,第一区块链节点通过将明文执行结果通过密钥加密为密文执行结果,且该密文执行结果只有通过可信执行环境进行解密,可以确保该密文执行结果本身足够安全。在此基础上,第一区块链节点通过在所述可信执行环境之外执行存储功能代码,将所述密文执行结果存储至所述可信执行环境之外的外部存储空间,使得该存储功能代码可以为相关技术中用于实现存储功能的代码、不需要结合可信执行环境的规范和要求重新进行代码编写,即可针对该密文执行结果实现安全可靠的存储,不仅可以在不影响安全、可靠程度的基础上,减少相关代码的开发量,而且可以通过减少可信执行环境的相关代码而降低TCB(Trusted Computing Base,可信计算基),使得TEE技术与区块链技术进行结合的过程中,额外造成的安全风险处于可控范围。
[0096] 在一实施例中,第一区块链节点可以在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中,比如该写缓存可以对应于如图2所示的“缓存”。进一步的,第一区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。其中,所述写缓存功能代码可以以明文形式存储于所述可信执行环境中,可以直接在可信执行环境中执行该明文形式的缓存功能代码;或,所述写缓存功能代码可以以密文形式存储于所述可信执行环境之外,比如存储于上述的外部存储空间(比如图2所示的“打包+存储”),可以将该密文形式的写缓存功能代码读入可信执行环境、在可信执行环境中进行解密为明文代码,并执行该明文代码。
[0097] 写缓存是指在将数据写入外部存储空间时,为了避免造成对外部存储空间的“冲击”而提供的“缓冲”机制。例如,可以采用buffer实现上述的写缓存;当然,写缓存也可以采用cache来实现,本说明书并不对此进行限制。实际上,由于可信执行环境为隔离的安全环境,而外部存储空间位于可信执行环境之外,使得通过采用写缓存机制,可以对缓存内的数据进行批量写入外部存储空间,从而减少可信执行环境与外部存储空间之间的交互次数,提升数据存储效率。同时,可信执行环境在不断执行各条明文交易内容的过程中,可能需要调取已生成的数据(如合约状态的取值),如果需调用的数据恰好位于写缓存中,可以直接从写缓存中读取该数据,这样一方面可以减少与外部存储空间之间的交互,另一方面免去了对从外部存储空间所读取数据的解密过程,从而提升在可信执行环境中的数据处理效率。
[0098] 当然,也可以将写缓存建立于可信执行环境之外,比如第一区块链节点可以在可信执行环境之外执行写缓存功能代码,从而将所述密文执行结果存入所述可信执行环境外的写缓存中,并进一步将所述写缓存中的数据存储至所述外部存储空间。
[0099] 在一实施例中,第一区块链节点可以根据客户端发起的查询请求,对所述明文执行结果加密后从可信执行环境输出,以返回至所述客户端。
[0100] 例如,第一区块链节点可以从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境,然后对所述明文执行结果加密后从可信执行环境输出,比如通过图2所示的交易/查询接口向客户端返回加密后的明文执行结果。
[0101] 再例如,第一区块链节点可以从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由第一区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。换言之,第一区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,可以通过在可信执行环境内执行读缓存功能代码,将该明文执行结果存入可信执行环境内的读缓存中,比如该读缓存可以对应于图2所示的“缓存”;进一步地,针对客户端发起的查询请求,或者对于可信执行环境在执行明文交易内容时所需的数据,可以优先从该读缓存中进行数据读取,若能读取相关数据则无需从外部存储空间中读取,从而减少与外部存储空间的交互次数、免除数据解密过程。
[0102] 读缓存是指在将数据从外部存储空间读入可信执行环境后,为了减少与外部存储空间的交互次数,可以将已读取的数据以明文形式存储于可信执行环境中的读缓存空间内。例如,可以采用cache实现上述的读缓存;当然,读缓存也可以采用buffer来实现,本说明书并不对此进行限制。
[0103] 第一区块链节点可以同时支持上述的读缓存机制和写缓存机制。而随着缓存技术的不断发展,同一缓存可以不仅用于实现数据读取或数据写入,甚至可以同时支持数据的读写操作,使得读缓存与写缓存之间的界线有时并不十分清晰,因而图2中仅以“缓存”进行示意,而并未具体区分其具体类型,可以根据实际需求进行配置和调整。
[0104] 当然,上述可信执行环境中的缓存机制,同样可以应用于常规执行环境中,例如通过图2所示的常规执行环境中的“缓存”来实现,不过此时的数据读写仅涉及到明文读写,不需要实施数据加解密操作,此处不再赘述。
[0105] 当第一区块链节点通过竞争或协商确定为记账节点时,第一区块链节点可以向区块链中的验证节点发起共识。具体的,第一区块链节点可以确定本轮需要上链的一组交易,这些交易可以均为明文交易、均为隐私交易或者同时明文交易与隐私交易,那么第一区块链节点可以通过执行该组交易中的各条交易,并根据每条交易及其对应的交易执行结果(若明文交易则对应于明文执行结果、隐私交易则对应于密文执行结果)等信息,生成状态树、交易树和收据树,将这三棵树的根节点对应的根哈希记入区块头中;然后,第一区块链节点将上述的一组交易打包(例如由图2所示的“打包+存储”模块实现)并生成新的区块后,将该区块或区块头广播至区块链网络中的验证节点(即区块链网络中除了记账节点之外的区块链节点),发起共识提议。而验证节点通过执行上述的一组交易,对区块头中的根哈希进行验证,并在确定提议通过验证后,将包含这组交易的区块追加到原有的区块链末尾(即上链)、根据这组交易的执行结果对世界状态进行更新。而第一区块链节点可以在确认共识通过后,通过执行所述存储功能代码对明文交易对应的明文执行结果和/或隐私交易对应的密文执行结果进行存储;当然,也可以在未确认共识通过时就存储,而在发现问题后进行回滚。
[0106] 当第一区块链节点为验证节点、而非记账节点时,第一区块链节点可以收到记账节点发起的共识提议,所述共识提议与明文交易和/或隐私交易相关。例如,记账节点可以为第二区块链节点,而第一区块链节点收到第二区块链节点发起的共识提议,该共识提议包含一组交易,这些交易均为明文交易、均为隐私交易或者同时明文交易与隐私交易,该共识提议还包含上文所述的三棵树的根节点。第一区块链节点可以通过上文所述的过程,执行明文交易得到相应的明文执行结果、执行隐私交易得到相应的密文执行结果,然后生成三棵树的根节点,并通过与共识提议中区块头所含的根节点进行比较,从而在比较结果为一致时确定所述共识提议通过验证,否则确定为未通过验证。在验证通过后,第一区块链节点通过执行所述存储功能代码对明文交易对应的明文执行结果和/或隐私交易对应的密文执行结果进行存储。
[0107] 需要指出的是:区块链网络中的各个区块链节点,在针对同一隐私交易对应的明文执行结果进行加密时,应确保采用的密钥相同,这样在隐私交易对应的明文执行结果相同的情况下才能够确保所得的密文执行结果相同,从而生成相同的根节点。
[0108] 以下结合图6所示说明本说明书另一区块链中实现混合交易的方法实施例的实现过程:
[0109] 步骤602,第一区块链节点接收交易,所述交易包含明文的类型字段。
[0110] 如图1中的步骤102所述,交易可以由客户端提交至第一区块链节点。所述交易也可由第二区块链节点转发至第一区块链节点。
[0111] 例如,用户在客户端生成该交易后,通过该客户端将交易提交至第一区块链节点。以图2为例,第一区块链节点中包含交易/查询接口,该接口可与客户端对接,使得客户端可以向第一区块链节点提交交易。
[0112] 再例如,用户在客户端生成该交易后,通过该客户端将该交易提交至第二区块链节点;然后,第二区块链节点进一步将该交易转发至第一区块链节点。以图2为例,上述接口可与其他区块链节点对接,比如该其他区块链节点可以包含上述的第二区块链节点,使得第二区块链节点可以向第一区块链节点转发交易。类似地,第二区块链节点也可通过自身的交易/查询接口与客户端对接,以接收客户端提交的交易。
[0113] 步骤604,第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易。
[0114] 如图1中的步骤104所述,通过在交易中添加类型字段,使得第一区块链可以据此识别交易类型为明文交易或隐私交易。本实施例在相关技术的基础上,在交易中增加一类型字段,比如表征为type字段,并基于该类型字段的取值,表明相关交易的类型;例如,当类型字段为第一取值时,表明相关交易为明文交易,当类型字段为第二取值时,表明相关交易为隐私交易。
[0115] 在一实施例中,明文交易的所有内容均采用明文形式,即该交易的各个字段均采用明文形式,使得第一区块链节点可以直接对该明文交易的各个字段进行读取,以实施相关处理。隐私交易除了类型字段采用明文形式之外,其他字段均采用密文形式,使得一方面第一区块链节点能够在无需解密的情况下,快速识别交易类型,从而针对明文交易和隐私交易实施差异化处理,另一方面通过采用密文形式使其仅能够被持有密钥的对象进行解密和读取,避免交易信息发生泄露。
[0116] 步骤606,第一区块链节点在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间。
[0117] 如图1中的步骤106A所述,第一区块链节点兼容相关技术中对于明文交易的处理能力,可以在可信执行环境之外对明文交易进行处理,并将明文执行结果存储至外部存储空间。例如图2所示,第一区块链节点可以划分为常规执行环境和可信执行环境,客户端提交(以客户端提交的交易为例)的交易首先进入常规执行环境中的“交易/查询接口”进行类型识别,将识别出的明文交易留在常规执行环境中进行处理,而将识别出的隐私交易传递至可信执行环境中进行处理。换言之,第一区块链节点既可以兼容相关技术中对于明文交易的处理,又能够对密文形式的隐私交易进行处理,从而在整个区块链网络上对明文交易与隐私交易实现混合处理。
[0118] 本说明书中的交易可以用于实现相对简单的处理逻辑,比如类似于相关技术中的转账逻辑。本说明书中的交易还可以用于实现相对复杂的处理逻辑,这里可以借助于智能合约来实现。
[0119] 进一步的,如图1中的步骤106B所述,第一区块链节点对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。
[0120] 关于对隐私交易的加解密的相关信息、对明文执行结果与密文执行结构之间的加解密、基于可信执行环境与外部存储空间之间的缓存机制、共识过程等,均可以参考步骤106B的相关描述,此处不再赘述。
[0121] 以下结合图7所示说明本说明书又一区块链中实现混合交易的方法实施例的实现过程:
[0122] 步骤702,第一区块链节点接收交易,所述交易包含明文的类型字段。
[0123] 如图1中的步骤102所述,交易可以由客户端提交至第一区块链节点。所述交易也可由第二区块链节点转发至第一区块链节点。
[0124] 例如,用户在客户端生成该交易后,通过该客户端将交易提交至第一区块链节点。以图2为例,第一区块链节点中包含交易/查询接口,该接口可与客户端对接,使得客户端可以向第一区块链节点提交交易。
[0125] 再例如,用户在客户端生成该交易后,通过该客户端将该交易提交至第二区块链节点;然后,第二区块链节点进一步将该交易转发至第一区块链节点。以图2为例,上述接口可与其他区块链节点对接,比如该其他区块链节点可以包含上述的第二区块链节点,使得第二区块链节点可以向第一区块链节点转发交易。类似地,第二区块链节点也可通过自身的交易/查询接口与客户端对接,以接收客户端提交的交易。
[0126] 步骤704,第一区块链节点根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易。
[0127] 如图1中的步骤104所述,通过在交易中添加类型字段,使得第一区块链可以据此识别交易类型为明文交易或隐私交易。本实施例在相关技术的基础上,在交易中增加一类型字段,比如表征为type字段,并基于该类型字段的取值,表明相关交易的类型;例如,当类型字段为第一取值时,表明相关交易为明文交易,当类型字段为第二取值时,表明相关交易为隐私交易。
[0128] 在一实施例中,明文交易的所有内容均采用明文形式,即该交易的各个字段均采用明文形式,使得第一区块链节点可以直接对该明文交易的各个字段进行读取,以实施相关处理。隐私交易除了类型字段采用明文形式之外,其他字段均采用密文形式,使得一方面第一区块链节点能够在无需解密的情况下,快速识别交易类型,从而针对明文交易和隐私交易实施差异化处理,另一方面通过采用密文形式使其仅能够被持有密钥的对象进行解密和读取,避免交易信息发生泄露。
[0129] 步骤706,第一区块链节点对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。
[0130] 在步骤706中,关于对隐私交易的加解密的相关信息、对明文执行结果与密文执行结构之间的加解密、基于可信执行环境与外部存储空间之间的缓存机制、共识过程等,均可以参考步骤106B的相关描述,此处不再赘述。
[0131] 进一步的,如图1中的步骤106A所述,第一区块链节点在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间。即第一区块链节点兼容相关技术中对于明文交易的处理能力,可以在可信执行环境之外对明文交易进行处理,并将明文执行结果存储至外部存储空间。例如图2所示,第一区块链节点可以划分为常规执行环境和可信执行环境,客户端提交(以客户端提交的交易为例)的交易首先进入常规执行环境中的“交易/查询接口”进行类型识别,将识别出的明文交易留在常规执行环境中进行处理,而将识别出的隐私交易传递至可信执行环境中进行处理。换言之,第一区块链节点既可以兼容相关技术中对于明文交易的处理,又能够对密文形式的隐私交易进行处理,从而在整个区块链网络上对明文交易与隐私交易实现混合处理。
[0132] 本说明书中的交易可以用于实现相对简单的处理逻辑,比如类似于相关技术中的转账逻辑。本说明书中的交易还可以用于实现相对复杂的处理逻辑,这里可以借助于智能合约来实现。
[0133] 以下结合图8介绍本说明书一种区块链中实现混合交易的节点实施例,包括:
[0134] 接收单元801,用于接收交易,所述交易包含明文的类型字段;
[0135] 识别单元802,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0136] 明文交易处理单元803,用于在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间;
[0137] 隐私交易处理单元804,用于对所述隐私交易进行解密,以获得相应的明文交易内容;在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。
[0138] 以下结合图9介绍本说明书一种区块链中实现混合交易的节点实施例,包括:
[0139] 接收单元901,用于接收交易,所述交易包含明文的类型字段;
[0140] 识别单元902,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0141] 明文交易处理单元903,用于在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述可信执行环境之外的外部存储空间。
[0142] 可选的,还包括:
[0143] 解密单元904,用于对所述隐私交易进行解密,以获得相应的明文交易内容;
[0144] 执行单元905,用于在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;
[0145] 存储单元906,用于在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述外部存储空间。
[0146] 以下结合图10介绍本说明书一种区块链中实现混合交易的节点实施例,包括:
[0147] 接收单元1001,用于接收交易,所述交易包含明文的类型字段;
[0148] 识别单元1002,用于根据所述交易所含类型字段的取值,识别所述交易为明文交易或隐私交易;
[0149] 解密单元1003,用于对所述隐私交易进行解密,以获得相应的明文交易内容;
[0150] 执行单元1004,用于在可信执行环境中执行所述明文交易内容,并将得到的明文执行结果加密为密文执行结果后从所述可信执行环境中输出;
[0151] 存储单元1005,用于在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。
[0152] 可选的,还包括:
[0153] 明文交易处理单元1006,用于在可信执行环境之外执行所述明文交易,并将得到的明文执行结果存储至所述外部存储空间。
[0154] 在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby Hardware Description Language)等,目前最普遍使用的是VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
[0155] 控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
[0156] 上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0157] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0158] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0159] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0160] 本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0161] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0162] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0163] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0164] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0165] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0166] 上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0167] 在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0168] 应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0169] 以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。