基于智能合约的隐私数据查询方法及装置转让专利

申请号 : CN201911085017.0

文献号 : CN110580417B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘琦闫莺宋旭阳

申请人 : 支付宝(杭州)信息技术有限公司

摘要 :

本说明书一个或多个实施例提供一种基于智能合约的隐私数据查询方法及装置;该方法应用于区块链节点,可以包括:当接收到查询方发起的针对目标隐私数据的查询交易时,读取所述查询交易中包含的与所述目标隐私数据相关的历史交易的交易标识和所述历史交易调用的业务合约的合约地址;根据所述合约地址获取所述业务合约,并执行所述业务合约中定义的权限控制代码,以确定所述查询方针对所述目标隐私数据的查询权限;当确定出的查询权限为允许查询时,获取所述目标隐私数据并将获取到的目标隐私数据读入可信执行环境进行解密,以由所述查询方获取。

权利要求 :

1.一种基于智能合约的隐私数据查询方法,应用于区块链节点;所述方法包括:当接收到查询方发起的针对目标隐私数据的查询交易时,读取所述查询交易中包含的与所述目标隐私数据相关的历史交易的交易标识和所述历史交易调用的业务合约的合约地址;其中,所述历史交易通过调用所述业务合约以执行所述业务合约中定义的业务代码;

根据所述合约地址获取所述业务合约,并执行所述业务合约中定义的权限控制代码,以确定所述查询方针对所述目标隐私数据的查询权限;

在确定查询权限为允许查询后,根据所述交易标识获取所述历史交易,根据获取到的历史交易确定出所述历史交易实际调用的业务合约的合约地址;当确定出的合约地址与所述查询交易中包含的所述历史交易调用的业务合约的合约地址不一致时,禁止执行获取所述目标隐私数据的操作;

当确定出的合约地址与所述查询交易中包含的所述历史交易调用的业务合约的合约地址一致时,根据所述交易标识获取所述目标隐私数据并将获取到的目标隐私数据读入可信执行环境进行解密,以由所述查询方获取。

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

当接收到的任一交易用于调用分发合约时,将所述任一交易作为所述查询交易;

执行所述分发合约中定义的分发代码,以根据所述合约地址调用所述业务合约执行所述权限控制代码。

3.根据权利要求1所述的方法,所述目标隐私数据包括以下至少之一:所述历史交易、对应于所述历史交易的交易收据、所述历史交易的发起方的账户属性信息、所述业务合约的账户属性信息、所述业务合约的合约代码、所述业务合约的合约状态数据。

4.根据权利要求3所述的方法,所述目标隐私数据包括所述历史交易和/或所述交易收据;所述将获取到的目标隐私数据读入可信执行环境进行解密,包括:获取所述历史交易的发起方使用的对称密钥;

在所述可信执行环境内通过所述对称密钥对所述目标隐私数据进行解密。

5.根据权利要求4所述的方法,所述获取所述历史交易的发起方使用的对称密钥,包括:获取用于加密所述历史交易的对称密钥,所述对称密钥被所述历史交易的发起方使用的公钥加密;

在所述可信执行环境内通过与所述历史交易的发起方使用的公钥对应的私钥,对所述对称密钥进行解密以得到解密后的对称密钥。

6.根据权利要求5所述的方法,所述历史交易的发起方使用的公钥由密钥管理服务器通过远程证明发送至所述历史交易的发起方,所述区块链节点的可信执行环境由SGX架构建立,与所述公钥对应的私钥由所述密钥管理服务器通过远程证明发送至所述区块链节点的围圈。

7.根据权利要求3所述的方法,所述目标隐私数据包括所述历史交易的发起方的账户属性信息、所述业务合约的账户属性信息、所述业务合约的合约代码、所述业务合约的合约状态数据中至少之一;所述将获取到的目标隐私数据读入可信执行环境进行解密,包括:在所述可信执行环境内通过所述区块链节点的对称密钥对所述目标隐私数据进行解密。

8.根据权利要求7所述的方法,所述区块链节点的可信执行环境由SGX架构建立,所述对称密钥在所述区块链节点的SGX架构通过远程证明后由密钥管理服务器发送,或者由所述区块链节点与其他区块链节点之间进行协商得到。

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

所述执行所述业务合约中定义的权限控制代码,以确定所述查询方针对所述目标隐私数据的查询权限,包括:执行所述业务合约中定义的权限控制代码,以根据所述查询方的身份信息确定所述查询方针对所述目标隐私数据的查询权限;

或者,所述查询交易中还包含所述历史交易的发起方的身份信息;所述执行所述业务合约中定义的权限控制代码,以确定所述查询方针对所述目标隐私数据的查询权限,包括:执行所述业务合约中定义的权限控制代码,以根据所述查询方的身份信息和所述历史交易的发起方的身份信息确定所述查询方针对所述目标隐私数据的查询权限;或者,执行所述业务合约中定义的权限控制代码,以根据所述历史交易的发起方的身份信息确定所述查询方针对所述目标隐私数据的查询权限。

10.根据权利要求9所述的方法,在确定查询权限为允许查询后,所述方法还包括:根据所述交易标识获取所述历史交易;

根据获取到的历史交易确定出所述历史交易的发起方的身份信息;

当确定出的身份信息与所述查询交易中包含的所述历史交易的发起方的身份信息不一致时,禁止执行获取所述目标隐私数据的操作。

11.根据权利要求1所述的方法,加密所述查询交易的对称密钥被所述查询方使用的公钥加密;

在接收到所述查询交易后,所述方法还包括:在所述可信执行环境内通过与所述查询方使用的公钥对应的私钥对加密所述查询交易的对称密钥解密,通过解密得到的对称密钥对所述查询交易进行解密,以获取所述查询交易包含的交易内容;

在对目标隐私数据进行解密后,所述方法还包括:通过所述查询方的对称密钥对解密后的目标隐私数据进行加密。

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

当确定出的查询权限为禁止查询时,生成用于表示所述查询方禁止查询所述目标隐私数据的合约收据以由所述查询方查看。

13.一种基于智能合约的隐私数据查询装置,应用于区块链节点;所述装置包括:交易读取单元,当接收到查询方发起的针对目标隐私数据的查询交易时,读取所述查询交易中包含的与所述目标隐私数据相关的历史交易的交易标识和所述历史交易调用的业务合约的合约地址;其中,所述历史交易通过调用所述业务合约以执行所述业务合约中定义的业务代码;

权限查询单元,根据所述合约地址获取所述业务合约,并执行所述业务合约中定义的权限控制代码,以确定所述查询方针对所述目标隐私数据的查询权限;

数据获取单元,在确定查询权限为允许查询后,根据所述交易标识获取所述历史交易,根据获取到的历史交易确定出所述历史交易实际调用的业务合约的合约地址;当确定出的合约地址与所述查询交易中包含的所述历史交易调用的业务合约的合约地址不一致时,禁止执行获取所述目标隐私数据的操作;当确定出的合约地址与所述查询交易中包含的所述历史交易调用的业务合约的合约地址一致时,根据所述交易标识获取所述目标隐私数据并将获取到的目标隐私数据读入可信执行环境进行解密,以由所述查询方获取。

14.根据权利要求13所述的装置,还包括:

交易识别单元,当接收到的任一交易用于调用分发合约时,将所述任一交易作为所述查询交易;

合约调用单元,执行所述分发合约中定义的分发代码,以根据所述合约地址调用所述业务合约执行所述权限控制代码。

15.根据权利要求13所述的装置,所述目标隐私数据包括以下至少之一:所述历史交易、对应于所述历史交易的交易收据、所述历史交易的发起方的账户属性信息、所述业务合约的账户属性信息、所述业务合约的合约代码、所述业务合约的合约状态数据。

16.根据权利要求15所述的装置,所述目标隐私数据包括所述历史交易和/或所述交易收据;所述数据获取单元具体用于:获取所述历史交易的发起方使用的对称密钥;

在所述可信执行环境内通过所述对称密钥对所述目标隐私数据进行解密。

17.根据权利要求16所述的装置,所述数据获取单元进一步用于:获取用于加密所述历史交易的对称密钥,所述对称密钥被所述历史交易的发起方使用的公钥加密;

在所述可信执行环境内通过与所述历史交易的发起方使用的公钥对应的私钥,对所述对称密钥进行解密以得到解密后的对称密钥。

18.根据权利要求17所述的装置,所述历史交易的发起方使用的公钥由密钥管理服务器通过远程证明发送至所述历史交易的发起方,所述区块链节点的可信执行环境由SGX架构建立,与所述公钥对应的私钥由所述密钥管理服务器通过远程证明发送至所述区块链节点的围圈。

19.根据权利要求15所述的装置,所述目标隐私数据包括所述历史交易的发起方的账户属性信息、所述业务合约的账户属性信息、所述业务合约的合约代码、所述业务合约的合约状态数据中至少之一;所述数据获取单元具体用于:在所述可信执行环境内通过所述区块链节点的对称密钥对所述目标隐私数据进行解密。

20.根据权利要求19所述的装置,所述区块链节点的可信执行环境由SGX架构建立,所述对称密钥在所述区块链节点的SGX架构通过远程证明后由密钥管理服务器发送,或者由所述区块链节点与其他区块链节点之间进行协商得到。

21.根据权利要求13所述的装置,

所述权限查询单元具体用于:执行所述业务合约中定义的权限控制代码,以根据所述查询方的身份信息确定所述查询方针对所述目标隐私数据的查询权限;

或者,所述查询交易中还包含所述历史交易的发起方的身份信息;所述权限查询单元具体用于:执行所述业务合约中定义的权限控制代码,以根据所述查询方的身份信息和所述历史交易的发起方的身份信息确定所述查询方针对所述目标隐私数据的查询权限;或者,执行所述业务合约中定义的权限控制代码,以根据所述历史交易的发起方的身份信息确定所述查询方针对所述目标隐私数据的查询权限。

22.根据权利要求21所述的装置,在确定查询权限为允许查询后,所述装置还包括:第一获取单元,根据所述交易标识获取所述历史交易;

第一校验单元,根据获取到的历史交易确定出所述历史交易的发起方的身份信息;

第一禁止单元,当确定出的身份信息与所述查询交易中包含的所述历史交易的身份信息不一致时,禁止执行获取所述目标隐私数据的操作。

23.根据权利要求13所述的装置,加密所述查询交易的对称密钥被所述查询方使用的公钥加密;

在接收到所述查询交易后,所述装置还包括:交易解密单元,在所述可信执行环境内通过与所述查询方使用的公钥对应的私钥对加密所述查询交易的对称密钥解密,通过解密得到的对称密钥对所述查询交易进行解密,以获取所述查询交易包含的交易内容;

在对目标隐私数据进行解密后,所述装置还包括:数据加密单元,通过所述查询方的对称密钥对解密后的目标隐私数据进行加密。

24.根据权利要求13所述的装置,还包括:

隐私处理单元,当确定出的查询权限为禁止查询时,生成用于表示所述查询方禁止查询所述目标隐私数据的合约收据以由所述查询方查看。

25.一种电子设备,包括:

处理器;

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

其中,所述处理器通过运行所述可执行指令以实现如权利要求1-12中任一项所述的方法。

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

说明书 :

基于智能合约的隐私数据查询方法及装置

技术领域

[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] 图1是一示例性实施例提供的一种创建智能合约的示意图。
[0021] 图2是一示例性实施例提供的一种调用智能合约的示意图。
[0022] 图3是一示例性实施例提供的一种调用业务合约的示意图。
[0023] 图4是一示例性实施例提供的一种基于智能合约的隐私数据查询方法的流程图。
[0024] 图5是一示例性实施例提供的另一种基于智能合约的隐私数据查询方法的流程图。
[0025] 图6是一示例性实施例提供的一种设备的结构示意图。
[0026] 图7是一示例性实施例提供的一种基于智能合约的隐私数据查询装置的框图。

具体实施方式

[0027] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
[0028] 需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
[0029] 区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
[0030] 不论是公有链、私有链还是联盟链,都可能提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
[0031] 以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上的智能合约可以是字节码的形式。
[0032] 例如图1所示,Bob将一个包含创建智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中1中的“0x6f8ae93…”代表了这个合约的地址,交易的data字段保存的可以是字节码,交易的to字段为空。节点间通过共识机制达成一致后,这个合约成功创建,并且可以在后续过程中被调用。合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码将保存在该合约账户中。智能合约的行为由合约代码控制。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(Storage)的虚拟账户。
[0033] 如图2所示,仍以以太坊为例,Bob将一个用于调用智能合约的交易发送到以太坊网络后,某一节点的EVM可以执行这个交易并生成对应的合约实例。图中2中交易的from字段是交易发起方(即Bob)的账户的地址,to字段中的“0x6f8ae93…”代表了被调用的智能合约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的调用智能合约的方法和参数。智能合约以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。
[0034] 区块链网络中的节点在执行Bob发起的交易后,会生成相应的收据(receipt)数据,以用于记录该交易相关的收据信息。这样,可以通过查询交易的收据来获得该交易执行结果的相关信息。以以太坊为例,节点执行交易所得的收据数据可以包括如下内容:
[0035] Result字段,表示交易的执行结果;
[0036] Gas used字段,表示交易消耗的gas值;
[0037] Logs字段,表示交易产生的日志,日志可以进一步包括From字段、To字段、Topic字段和Log data字段等,其中From字段表示调用的发起方的账户地址、To字段表示被调用对象(如智能合约)的账户地址、Topic字段表示日志的主题、Log data字段表示日志数据;
[0038] Output字段,表示交易的输出。
[0039] 一般的,交易执行后生成的收据数据以明文形式进行存储,任何人都可以看到收据数据所含的上述各个收据字段的内容,无隐私保护的设置和能力。而在一些区块链与TEE相结合的解决方案中,为了实现隐私保护,收据数据的全部内容均被当作需要隐私保护的数据存储在区块链上。所述区块链,是存储在节点的数据库中特定逻辑组织而成的数据集合。所述数据库,如后所述,其物理载体可以是存储介质,例如持久性存储介质。实际上,收据数据中可能只有部分内容是敏感的,而其它内容并不敏感,只需要针对敏感的内容进行隐私保护、其他内容可以公开,甚至在一些情况下可能需要对部分内容实施检索以驱动相关操作的实施,那么针对这部分内容实施隐私保护将影响检索操作的实施。
[0040] 其中,保护用户隐私的过程可如图3所示:
[0041] 步骤302,用户A创建一笔调用业务合约的交易,并将创建好的交易发送至区块链节点。
[0042] 用户A可通过创建一笔交易(包含所调用智能合约的账户地址)来调用部署于区块链上的智能合约(即业务合约),以使得区块链节点执行业务合约来完成相应的业务。出于隐私保护,用户A可采用数字信封加密的方式对创建好的交易进行加密,该数字信封加密结合对称加密算法和非对称加密算法。具体而言,采用对称加密算法加密交易内容(即采用自身使用的对称密钥对交易内容进行加密),再采用非对称加密算法的公钥对该对称密钥进行加密。
[0043] 步骤304,区块链节点执行业务合约。
[0044] 区块链节点在接收到被加密的交易后,将该交易读入TEE内部,先采用该非对称加密算法的私钥进行解密得到对称密钥,再采用解密得到的对称密钥对交易进行解密得到交易内容,进而在TEE内部执行业务合约的业务代码。
[0045] 步骤306,区块链节点存储与交易相关的隐私数据。
[0046] 一方面,区块链节点在接收到交易后,(通过共识之后)会将交易(被采用数字信封的形式进行加密)发布至区块链上进行存证。另一方面,区块链节点在执行交易后,还会将执行交易得到的相关数据进行加密存储(发布至区块链上进行存证,或者存储在本地);其中,针对对应于交易的交易收据,可采用用户A使用的对称密钥进行加密,针对响应于交易执行业务合约而得到的合约状态数据,可采用TEE内部的特定对称密钥进行加密。另外,针对用户A的账户属性信息、业务合约的账户属性信息、业务合约的合约代码等数据,也可采用TEE内部的特定对称密钥进行加密。而上述这些区块链节点加密的数据,均属于用户A在区块链上的隐私数据。
[0047] 在上述隐私保护的场景下,用户可能需要将自身利用区块链所实现业务相关的隐私数据分享给一些特定的用户查看,也即这些特定的用户可查看与该用户发起的历史交易相关的隐私数据。那么,可针对用户的隐私数据设定查询权限,以供允许查询的其他用户进行查看。以下结合图4-5对本说明书的隐私数据的查询方案进行说明。
[0048] 请参见图4,图4是一示例性实施例提供的一种基于智能合约的隐私数据查询方法的流程图。如图4所示,该方法应用于区块链节点,可以包括以下步骤:
[0049] 步骤402,当接收到查询方发起的针对目标隐私数据的查询交易时,读取所述查询交易中包含的与所述目标隐私数据相关的历史交易的交易标识和所述历史交易调用的业务合约的合约地址。
[0050] 在本实施例中,在开发业务合约时,除了在业务合约中定义业务代码之外,还需要在业务合约中定义与调用该业务合约的交易相关的隐私数据的权限控制代码,以用于判定针对该隐私数据的查询方是否被允许查询。通过上述在业务合约中定义权限控制代码的方式,可将隐私数据与控制该隐私数据的查询权限的权限控制代码建立关联关系,从而使得各个业务合约可以控制与调用自身的交易相关的隐私数据。
[0051] 可由区块链用户、区块链成员、区块链管理员等角色来完成对业务合约的开发和部署。以联盟链为例,由具备记账权限的区块链成员(或者区块链用户、管理员)来设定权限控制规则,并将权限控制规则以权限控制代码的形式定义在业务合约(还定义了业务代码)中。在完成对业务合约的开发后,该区块链成员可以通过联盟链中的任一节点设备将该业务合约发布至联盟链,并在该业务合约由该联盟链中的部分指定的成员节点设备(比如,联盟链中指定的若干个具有记账权限的权威节点设备)完成共识后,收录至该联盟链的分布式数据库(即分布式账本)。基于上述部署业务合约的方式,业务合约的部署方(即具备记账权限的普通用户或者普通成员)可控制是否允许其他人来查询与发送至该业务合约的交易(即调用该业务合约的交易)相关的隐私数据。
[0052] 其中,区块链中支持的共识算法可以包括:
[0053] 第一类共识算法,即节点设备需要争夺每一轮的记账周期的记账权的共识算法;例如,工作量证明(Proof of Work, POW)、股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法;
[0054] 第二类共识算法,即预先为每一轮记账周期选举记账节点(不需要争夺记账权)的共识算法;例如,实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等共识算法。
[0055] 在采用第一类共识算法的区块链网络中,争夺记账权的节点设备,都可以在接收到交易后执行该笔交易。争夺记账权的节点设备中可能有一个节点设备在本轮争夺记账权的过程中胜出,成为记账节点。记账节点可以将收到的交易与其它交易一起打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识。
[0056] 在采用第二类共识算法的区块链网络中,具有记账权的节点设备在本轮记账前已经商定好。因此,节点设备在接收到交易后,如果自身不是本轮的记账节点,则可以将该交易发送至记账节点。对于本轮的记账节点,在将该交易与其它交易一起打包以生成最新区块的过程中或者之前,可以执行该交易。记账节点在生成最新区块后,可以将该最新区块或者该最新区块的区块头发送至其它节点设备进行共识。
[0057] 如上所述,无论区块链采用以上示出的哪种共识算法,本轮的记账节点都可以将接收到的交易打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识验证。如果其它节点设备接收到最新区块或者该最新区块的区块头后,经验证没有问题,可以将该最新区块追加到原有的区块链末尾,从而完成区块链的记账过程。其它节点验证记账节点发来的新的区块或区块头的过程中,也可以执行该区块中包含的交易。
[0058] 基于上述部署用于控制查询权限的业务合约的方式,各个业务合约仅控制与调用自身的交易相关的隐私数据的查询权限。因此,当用户(作为查询方)发起一笔针对与历史交易(由其他任一用户发起)相关的目标隐私数据的查询交易时,区块链节点需确定出控制目标隐私数据的查询权限的业务合约,进而才可调用该业务合约来实现权限控制。
[0059] 而针对区块链节点调用业务合约来实现权限控制的方式,可预先在区块链上部署分发合约以用于识别区块链节点接收到的交易是否为查询交易,以及在接收到的交易为查询交易时,进一步调用相应的业务合约来执行权限控制代码(可理解为将查询交易分发给相应的业务合约)。具体而言,可在分发合约中定义分发代码,该分发代码用于调用业务合约执行定义在该业务合约中的权限控制代码。因此,查询方创建的查询交易为用于调用分发合约的交易;同时,该查询交易中可记录历史交易调用的业务合约的合约地址。那么,当区块链节点接收到的任一交易用于调用分发合约时,可将该任一交易作为查询交易,并调用分发合约以执行分发合约中定义的分发代码,以根据查询交易中包含的合约地址进一步调用相应的业务合约(即该历史交易调用的业务合约)执行权限控制代码。以以太坊为例,查询方创建的查询交易中to字段的内容为分发合约的合约地址,同时查询交易中还记录有历史交易中to字段的内容,即历史交易调用的业务合约的合约地址。
[0060] 基于分发合约起到“分发查询交易”的作用,可将分发合约设计为系统级别的智能合约。因此,可由区块链的管理员来完成对分发合约的开发和部署。同样以联盟链为例,由具备管理权限的管理员来开发分发逻辑(根据查询交易中记录的历史交易调用的业务合约的合约地址,调用该业务合约),并将分发逻辑以分发代码的形式定义在分发合约中。在完成对分发合约的开发后,管理员可将该分发合约发布至联盟链上进行部署(与上述部署智能合约的过程类似)。
[0061] 其中,在一种情况下,可通过区块链的创世块来部署分发合约,即在搭建区块链的时候部署分发合约,将分发合约的合约代码记录在创世块中。在另一种情况下,可在搭建好区块链的后续过程中部署分发合约;比如,在后续使用过程中管理员想增加权限查询功能。那么,管理员可发起一笔创建分发合约的交易,从而将分发合约部署到区块链上。其中,该交易的to字段是一个空字符串,在data字段中指定了初始化合约的二进制代码,在之后合约被调用时,该代码的执行结果将作为合约代码。
[0062] 在本说明书的技术方案中,除上述通过部署分发合约来调用业务合约以实现权限控制之外,还可将上述分发逻辑以分发代码的形式固化到链代码中,跟随链代码一起发布,从而不需要管理员后续再部署,并且合约代码固化在链代码中,使得合约代码可控,有效提高了安全性。换言之,将查询交易分发至相应业务合约的操作,由区块链节点自身来完成,而无需通过调用智能合约来完成。
[0063] 需要说明的是,接入区块链的用户在区块链上发起的请求的类型,具体可以是指传统的区块链中所采用的交易(transaction)。当然,接入区块链的用户在区块链上发起的请求的类型,具体也可以是交易以外的,其它形式的具有标准的数据结构的指令、消息等,本说明书一个或多个实施例并不进行特别限定。在以下的各实施例中,将以接入区块链的用户在区块链上发起的请求为交易为例进行说明。
[0064] 步骤404,根据所述合约地址获取所述业务合约,并执行所述业务合约中定义的权限控制代码,以确定所述查询方针对所述目标隐私数据的查询权限。
[0065] 在本实施例中,业务合约中以权限控制代码形式定义的权限控制规则,可根据实际需求灵活设定;当然,本说明书一个或多个实施例并不对权限控制规则的具体内容进行限制。在一种情况下,可将查询方的身份信息作为权限控制的依据。相应的,查询方在创建查询交易时,查询交易中应包含查询方的身份信息。例如,查询方的身份信息为查询方的账户ID(即账户地址),该账户ID可记录于查询交易的from字段中。进一步的,权限控制规则可以设定为当查询方的身份信息符合特定的条件时,允许该查询方查询相应的隐私数据。比如,当查询方属于预先指定的查询用户集合时,可确定该查询方的查询权限为允许查询,或者当查询方的信用评分超过预设信用阈值时,可确定该查询方的查询权限为允许查询等等。因此,在确定查询方的查询权限时,可执行业务合约中定义的权限控制代码,以根据查询方的身份信息确定查询方针对目标隐私数据的查询权限。
[0066] 在另一种情况下,可将查询方的身份信息和历史交易的发起方的身份信息共同作为权限控制的依据,相应的,查询方在创建查询交易时,查询交易中还应包含历史交易的发起方的身份信息。那么,权限控制规则可以设定为当查询方的身份信息和发起方的身份信息符合特定的条件时,允许该查询方查询相应的隐私数据。比如,在权限控制规则中记录查询组和被查询组,属于查询组的成员允许查看被查询组成员的隐私数据;或者,权限控制规则中直接记录各个用户可以查看哪些其他用户的对应关系;或者当查询方和发起方属于同一团队时,可确定该查询方的查询权限为允许查询等等。因此,在确定查询方的查询权限时,可执行业务合约中定义的权限控制代码,以根据查询方的身份信息和发起方的身份信息确定查询方针对目标隐私数据的查询权限。
[0067] 在又一种情况下,可将历史交易的发起方的身份信息作为权限控制的依据,相应的,查询方在创建查询交易时,查询交易中应包含历史交易的发起方的身份信息。那么,权限控制规则可以设定为当发起方的身份信息符合特定的条件时,允许该查询方查询相应的隐私数据。比如,当发起方属于预先指定的可被查询用户集合时,可确定查询方的查询权限为允许查询,或者当发起方的信用评分超过预设信用阈值时,可确定查询方的查询权限为允许查询等等。因此,在确定查询方的查询权限时,可执行业务合约中定义的权限控制代码,以根据发起方的身份信息确定查询方针对目标隐私数据的查询权限。
[0068] 当权限控制的依据包括历史交易的发起方的身份信息时,由于查询交易中包含的发起方的身份信息仅仅是查询方声明的身份信息,而该身份信息并不一定是历史交易的发起方实际的身份信息,即存在查询方伪造发起方身份信息的风险。因此,在确定出查询方的查询权限为允许查询后,区块链节点可根据查询交易中包含的历史交易的交易标识(即交易ID,通常为交易的hash值)获取该历史交易,从而根据获取到的历史交易确定出该历史交易的发起方的身份信息(即发起方实际的身份信息)。当确定出的身份信息与查询交易中包含的发起方的身份信息不一致时,禁止执行获取目标隐私数据的操作,从而可有效排除查询方通过伪造发起方身份信息来盗取用户隐私数据的情况。
[0069] 同理,查询交易由查询方创建,该查询交易中包含的历史交易调用的业务合约的合约地址由查询方来声明,那么该合约地址也并不一定是历史交易实际调用的业务合约的合约地址,即存在查询方伪造合约地址的风险。因此,在确定出查询方的查询权限为允许查询后,区块链节点可根据查询交易中包含的历史交易的交易标识(即交易ID,通常为交易的hash值)获取该历史交易,从而根据获取到的历史交易确定出该历史交易实际调用的业务合约的合约地址。当确定出的合约地址与查询交易中包含的历史交易调用的业务合约的合约地址不一致时,禁止执行获取目标隐私数据的操作,从而可有效排除查询方通过伪造合约地址来盗取用户隐私数据的情况。
[0070] 以以太坊为例,历史交易的hash值(作为交易标识)、历史交易调用的业务合约的合约地址(即历史交易的to字段内容)、历史交易的发起方的身份信息(即历史交易的from字段内容)等数据可记录在查询交易的data(也写作input)字段中,区块链节点在确定出查询方的查询权限为允许查询后,可根据历史交易的hash值从区块链上获取历史交易(存证在区块链上),并读取出历史交易的from字段记录的内容和历史交易的to字段内容,若读取出的from字段内容与查询交易中声明的from字段内容相同,则可进一步执行获取目标隐私数据的操作;否则,禁止执行获取目标隐私数据的操作。同理,若读取出的to字段内容与查询交易中声明的to字段内容相同,则可进一步执行获取目标隐私数据的操作;否则,禁止执行获取目标隐私数据的操作。
[0071] 步骤406,当确定出的查询权限为允许查询时,获取所述目标隐私数据并将获取到的目标隐私数据读入可信执行环境进行解密,以由所述查询方获取。
[0072] 在本实施例中,出于上述对用户隐私数据的保护,隐私数据被加密存储。因此,当确定出查询方的查询权限为允许查询时,可获取目标隐私数据并将获取到的目标隐私数据读入可信执行环境进行解密(例如,根据交易标识获取目标隐私数据),以由查询方获取。而根据目标隐私数据中包含的数据类型的不同,所采用的解密方式也不同(因为加密方式不同)。
[0073] 当目标隐私数据包括历史交易和/或历史交易的交易收据时,由上述图3所示实施例可知,历史交易和历史交易的交易收据均被采用历史交易的发起方使用的对称密钥进行加密。因此,在获取到历史交易和/或历史交易的交易收据后,可先获取发起方(在图3所示实施例中即为用户A)使用的对称密钥,再在TEE内通过该对称密钥对历史交易和/或历史交易的交易收据进行解密。而对于发起方使用的对称密钥的获取,可先获取用于加密历史交易的对称密钥(该对称密钥被发起方使用的公钥加密,即上述图3所示实施例中采用数字信封进行加密的方式),在TEE内通过与发起方使用的公钥对应的私钥,对该对称密钥进行解密以得到解密后的对称密钥。
[0074] 其中,发起方使用的对称密钥可由发起方通过对称加密算法生成,或由发起方与区块链节点之间通过协商得到,或由密钥管理服务器发送得到。而对于对称加密算法,例如可以是DES算法、3DES算法、TDEA算法、Blowfish算法、RC5算法、IDEA算法等。发起方使用的公钥由密钥管理服务器通过远程证明发送至发起方,区块链节点的TEE由SGX架构建立,与公钥对应的私钥由密钥管理服务器通过远程证明发送至区块链节点的围圈(enclave,也称为飞地)。而用于生成公钥和私钥的非对称加密算法,例如可以是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
[0075] 当目标隐私数据包括历史交易的发起方的账户属性信息、业务合约的账户属性信息、业务合约的合约代码、业务合约的合约状态数据中至少之一时,由上述图3所示实施例可知,这些隐私数据均被采用TEE内部的特定对称密钥进行加密。因此,在获取到这些隐私数据后,可在TEE内通过区块链节点的特定对称密钥对这些隐私数据进行解密。而对于TEE内部的特定对称密钥,在区块链节点的SGX架构通过远程证明后由密钥管理服务器发送,或者由区块链节点与其他区块链节点之间进行协商得到。
[0076] 在本实施例中,类似于上述对历史交易进行加密以保护隐私的方式,查询方在发起查询交易时,同样可采用自身使用的对称密钥对创建好的查询交易进行加密,并用自身使用的公钥对该对称密钥进行加密。因此,区块链节点在接收到查询交易后,先在TEE内通过与查询方使用的公钥对应的私钥对加密查询交易的对称密钥解密,再通过解密得到的对称密钥对查询交易进行解密,以获取查询交易包含的交易内容。而在获取到目标隐私数据并对目标隐私数据进行解密后,区块链节点可通过查询方的对称密钥对解密后的目标隐私数据进行加密,使得查询方可通过自身使用的对称密钥对目标隐私数据进行解密查看,从而避免目标隐私数据被泄露。
[0077] 其中,上述针对查询方进行隐私保护所使用的对称密钥、公钥和私钥的来源与上述类似,在此不再赘述。当然,该过程中使用的非对称密钥(公钥和私钥),可以是上述针对发起方进行隐私保护所使用的非对称密钥。
[0078] 在本实施例中,当确定出查询方的查询权限为禁止查询时,无需执行上述通过获取历史交易来校验发起方的身份信息或者校验业务合约的合约地址的步骤。由于在查询方的查询权限为禁止查询的情况下,该校验步骤为不必要的操作,因此可减少对区块链节点处理资源的占用,从而提高区块链节点的性能。同时,当确定出查询方的查询权限为禁止查询时,可生成用于表示该查询方禁止查询目标隐私数据的合约收据以由查询方查看。
[0079] 为了便于理解,下面结合图5对查询方查看目标隐私数据的过程进行举例说明。
[0080] 如图5所示,承接于上述图3的场景,在用户A发起调用业务合约的交易后,用户A可向用户B分享与该交易(在该场景下作为历史交易)相关的隐私数据,或者用户B存在查看该隐私数据的需求。那么,用户B作为查询方查询目标隐私数据的过程可包括以下步骤:
[0081] 步骤502,用户B通过使用的客户端创建查询交易。
[0082] 在本实施例中,查询交易的to字段记录的是分发合约的合约地址,同时还可在查询交易的data字段(或者其他字段)中记录历史交易的hash值(即交易ID)、from字段的内容(历史交易的发起方的地址)和to字段的内容(历史交易调用的业务合约的合约地址)。其中,历史交易的hash值、发起方的地址和业务合约的合约地址可由用户B与用户A之间通过线下分享的方式得到,或者通过其他任意方式得到。
[0083] 步骤504,用户B通过客户端采用数字信封加密查询交易。
[0084] 步骤506,用户B通过客户端向区块链节点发起查询交易。
[0085] 步骤508,区块链节点在TEE内解密查询交易。
[0086] 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 中运行的应用程序受到安全保护,几乎不可能被第三方访问。
[0087] 以Intel SGX技术为例,SGX提供了围圈,即内存中一个加密的可信执行区域,由 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 便能确保隐私数据不会泄漏。
[0088] 在实际应用中,非对称加密算法的密钥,可由密钥管理服务器生成。通过远程证明的方式,密钥管理服务器将私钥发送至区块链节点,具体的,可以是传入区块链节点的围圈中。区块链节点可以包含多个围圈,而上述私钥可以被传入这些围圈中的安全围圈;例如,该安全围圈可以为QE(Quoting Enclave)围圈,而非AE(Application Enclave)围圈。对于非对称加密的公钥,可以由密钥管理服务器发送至用户的客户端。那么,客户端可采用对称加密算法加密创建好的交易,即采用对称加密算法的对称密钥加密交易内容,并用非对称加密算法加密对称加密算法中采用的对称密钥。一般的,采用非对称加密算法的公钥加密对称加密算法中采用的对称密钥。上述加密的方式被称为数字信封加密,那么区块链节点接收到加密的交易后,可以先采用非对称加密算法的私钥进行解密,得到对称加密算法的对称密钥,进而用对称加密算法的对称密钥解密得到交易内容。
[0089] 步骤510,区块链节点确定接收到的交易为调用分发合约的查询交易。
[0090] 在本实施例中,区块链节点在接收到任一交易后,读取该交易的to字段内容。当to字段内容为分发合约的合约地址时,说明该交易用于调用分发合约,那么可确定出该交易为查询交易。
[0091] 步骤512,区块链节点调用分发合约。
[0092] 步骤514,分发合约根据查询交易中记录的历史交易的to字段确定历史交易调用的业务合约。
[0093] 步骤516,分发合约调用业务合约。
[0094] 步骤518,业务合约根据查询交易的from字段和历史交易的from字段确定用户B的查询权限。
[0095] 在本实施例中,以查询方和历史交易的发起方的身份信息共同作为权限控制的依据为例。例如,权限控制规则(以权限控制代码的形式定义在业务合约中)中记录查询组和被查询组,属于查询组的成员允许查看被查询组成员的隐私数据;或者,权限控制规则中直接记录各个用户可以查看哪些其他用户的对应关系。其中,采用账户地址作为用户的身份信息。那么,区块链节点执行业务合约中定义的权限控制代码,从而根据查询方的账户地址(查询交易的from字段内容)和历史交易的发起方的账户地址(历史交易的from字段内容)来确定用户B的查询权限。
[0096] 步骤520,业务合约向区块链节点返回用户B的查询权限。
[0097] 步骤522,在确定出用户B的查询权限为允许查询后,区块链节点校验历史交易的from字段和to字段。
[0098] 在本实施例中,查询交易中记录的发起方的地址和业务合约的合约地址由用户B填入,因此该发起方的地址应理解为用户B声明的历史交易的发起方的地址,该合约地址应理解为用户B声明的历史交易调用的业务合约的合约地址。但是,历史交易实际的发起方的地址并不一定为用户B声明的发起方的地址,历史交易实际调用的业务合约的合约地址也并不一定为用户B声明的合约地址,即存在用户B伪造的可能。例如,用户B可通过上述部署业务合约的方式在区块链上部署业务合约,该业务合约中定义的权限控制代码允许用户B查看用户A的隐私数据;那么,用户B可在查询交易中将用户A发起的历史交易调用的业务合约的合约地址填写为用户B部署的上述业务合约的合约地址。因此,在确定出用户B的查询权限为允许查询的情况下,区块链节点可进一步对用户B声明的历史交易的发起方的地址和合约地址进行校验,从而保证隐私数据的安全性。
[0099] 举例而言,区块链节点在确定出用户B的查询权限为允许查询后,可根据历史交易的hash值从区块链上获取历史交易(存证在区块链上),并读取出历史交易的from字段记录的内容和历史交易的to字段内容,若读取出的from字段内容与查询交易中声明的from字段内容相同,则可进一步执行获取目标隐私数据的操作;否则,禁止执行获取目标隐私数据的操作。同理,若读取出的to字段内容与查询交易中声明的to字段内容相同,则可进一步执行获取目标隐私数据的操作;否则,禁止执行获取目标隐私数据的操作。
[0100] 需要说明的是,当确定出查询方的查询权限为禁止查询时,上述校验步骤为不必要的操作,因此无需执行上述校验的步骤,从而可减少对区块链节点处理资源的占用,进而提高区块链节点的性能。
[0101] 进一步的,在利用业务合约确定出用户B的查询权限为禁止查询后,可生成关于用户B禁止查询目标隐私数据的合约收据以供用户B查看。或者,由区块链节点向用户B返回禁止查询的回执以告知用户B的查询权限为禁止查询。
[0102] 步骤524,区块链节点获取目标隐私数据。
[0103] 步骤526,区块链节点将目标隐私数据读入TEE进行解密。
[0104] 在本实施例中,由上述图3所示实施例可知,出于隐私保护的目的,隐私数据被加密存储。同时,根据隐私数据中包含的数据类型的不同,所采用的加密方式也不同。因此,在获取目标隐私数据(例如,根据历史交易的hash值获取目标隐私数据)后,将获取到的目标隐私数据读入可信执行环境进行解密,以由查询方获取。
[0105] 当目标隐私数据包括历史交易和/或历史交易的交易收据时,由上述图3所示实施例可知,历史交易和历史交易的交易收据均被采用历史交易的发起方使用的对称密钥进行加密。因此,在获取到历史交易和/或历史交易的交易收据后,可先获取用户A使用的对称密钥,再在TEE内通过该对称密钥对历史交易和/或历史交易的交易收据进行解密。而对于发起方使用的对称密钥的获取,可先获取用于加密历史交易的对称密钥(该对称密钥被用户A使用的公钥加密),在TEE内通过与用户A使用的公钥对应的私钥,对该对称密钥进行解密以得到解密后的对称密钥。
[0106] 当目标隐私数据包括用户A的账户属性信息、业务合约的账户属性信息、业务合约的合约代码、业务合约的合约状态数据中至少之一时,可在TEE内通过区块链节点的特定对称密钥对这些隐私数据进行解密。
[0107] 例如,特定对称密钥可以是seal(Simple Encrypted Arithmetic Library)密钥,该seal密钥可在通过远程证明后由密钥管理服务器发送给区块链节点,或者可以是各个区块链节点之间协商得到,进而区块链节点使用该seal密钥对隐私数据进行加密和解密。当然,通过远程证明后由密钥管理服务器发送给区块链节点,或者各个区块链节点之间协商得到的对称密钥,可以并非上述的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。
[0108] 那么,可以指定某一版本的衍生密钥,作为上述的seal密钥对隐私数据进行加密。进一步地,还可以对seal密钥进行版本更新,且基于上文所述的特性,应当从低版本密钥向高版本密钥进行更新,使得即便低版本密钥泄露后,也无法反推出高版本密钥,确保足够的数据安全性。
[0109] 步骤528,区块链节点采用用户B的对称密钥对目标隐私数据进行加密。
[0110] 步骤530,用户B查看目标隐私数据。
[0111] 在一实施例中,区块链节点在对目标隐私数据进行加密后,可生成包含该目标隐私数据的事件存储到区块链日志中,那么,用户B可使用客户端通过区块链的回调机制来获取该事件,从而查看目标隐私数据。而在获取到目标隐私数据后,用户B通过客户端采用自身使用的对称密钥对目标隐私数据进行解密即可得到明文内容的隐私数据。
[0112] 在另一实施例中,区块链节点在对目标隐私数据进行加密后,可直接向用户B使用的客户端返回加密后的目标隐私数据。同理,用户B通过客户端采用自身使用的对称密钥对目标隐私数据进行解密即可得到明文内容的隐私数据。
[0113] 可见,通过本说明书隐私数据的查询方案,用户A无需向用户B分享自身使用的对称密钥,便可实现用户A与用户B之间隐私数据的分享,从而提高了安全性与便捷性。
[0114] 与上述方法实施例相对应,本说明书还提供了一种基于智能合约的隐私数据查询装置的实施例。
[0115] 本说明书的隐私数据的查询装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。
[0116] 从硬件层面而言,请参考图6,图6是一示例性实施例提供的一种设备的示意结构图。如图6所示,在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他业务所需要的硬件。处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行,在逻辑层面上形成基于智能合约的隐私数据查询装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
[0117] 请参考图7,在软件实施方式中,该查询装置应用于区块链节点,可以包括:
[0118] 交易读取单元701,当接收到查询方发起的针对目标隐私数据的查询交易时,读取所述查询交易中包含的与所述目标隐私数据相关的历史交易的交易标识和所述历史交易调用的业务合约的合约地址;
[0119] 权限查询单元702,根据所述合约地址获取所述业务合约,并执行所述业务合约中定义的权限控制代码,以确定所述查询方针对所述目标隐私数据的查询权限;
[0120] 数据获取单元703,当确定出的查询权限为允许查询时,获取所述目标隐私数据并将获取到的目标隐私数据读入可信执行环境进行解密,以由所述查询方获取。
[0121] 可选的,还包括:
[0122] 交易识别单元704,当接收到的任一交易用于调用分发合约时,将所述任一交易作为所述查询交易;
[0123] 合约调用单元705,执行所述分发合约中定义的分发代码,以根据所述合约地址调用所述业务合约执行所述权限控制代码。
[0124] 可选的,所述目标隐私数据包括以下至少之一:
[0125] 所述历史交易、对应于所述历史交易的交易收据、所述历史交易的发起方的账户属性信息、所述业务合约的账户属性信息、所述业务合约的合约代码、所述业务合约的合约状态数据。
[0126] 可选的,所述目标隐私数据包括所述历史交易和/或所述交易收据;所述数据获取单元703具体用于:
[0127] 获取所述发起方使用的对称密钥;
[0128] 在所述可信执行环境内通过所述对称密钥对所述目标隐私数据进行解密。
[0129] 可选的,所述数据获取单元703进一步用于:
[0130] 获取用于加密所述历史交易的对称密钥,所述对称密钥被所述发起方使用的公钥加密;
[0131] 在所述可信执行环境内通过与所述发起方使用的公钥对应的私钥,对所述对称密钥进行解密以得到解密后的对称密钥。
[0132] 可选的,所述发起方使用的公钥由密钥管理服务器通过远程证明发送至所述发起方,所述区块链节点的可信执行环境由SGX架构建立,与所述公钥对应的私钥由所述密钥管理服务器通过远程证明发送至所述区块链节点的围圈。
[0133] 可选的,所述目标隐私数据包括所述历史交易的发起方的账户属性信息、所述业务合约的账户属性信息、所述业务合约的合约代码、所述业务合约的合约状态数据中至少之一;所述数据获取单元703具体用于:
[0134] 在所述可信执行环境内通过所述区块链节点的特定对称密钥对所述目标隐私数据进行解密。
[0135] 可选的,所述区块链节点的可信执行环境由SGX架构建立,所述特定对称密钥在所述区块链节点的SGX架构通过远程证明后由密钥管理服务器发送,或者由所述区块链节点与其他区块链节点之间进行协商得到。
[0136] 可选的,
[0137] 所述权限查询单元702具体用于:执行所述业务合约中定义的权限控制代码,以根据所述查询方的身份信息确定所述查询方针对所述目标隐私数据的查询权限;
[0138] 或者,所述查询交易中还包含所述历史交易的发起方的身份信息;所述权限查询单元具体用于:执行所述业务合约中定义的权限控制代码,以根据所述查询方的身份信息和所述发起方的身份信息确定所述查询方针对所述目标隐私数据的查询权限;或者,执行所述业务合约中定义的权限控制代码,以根据所述发起方的身份信息确定所述查询方针对所述目标隐私数据的查询权限。
[0139] 可选的,在确定查询权限为允许查询后,所述装置还包括:
[0140] 第一获取单元706,根据所述交易标识获取所述历史交易;
[0141] 第一校验单元707,根据获取到的历史交易确定出所述历史交易的发起方的身份信息;
[0142] 第一禁止单元708,当确定出的身份信息与所述查询交易中包含的所述历史交易的身份信息不一致时,禁止执行获取所述目标隐私数据的操作。
[0143] 可选的,在确定查询权限为允许查询后,所述装置还包括:
[0144] 第二获取单元709,根据所述交易标识获取所述历史交易;
[0145] 第二校验单元710,根据获取到的历史交易确定出所述历史交易实际调用的业务合约的合约地址;
[0146] 第二禁止单元711,当确定出的合约地址与所述查询交易中包含的所述历史交易调用的业务合约的合约地址不一致时,禁止执行获取所述目标隐私数据的操作。
[0147] 可选的,加密所述查询交易的对称密钥被所述查询方使用的公钥加密;
[0148] 在接收到所述查询交易后,所述装置还包括:交易解密单元712,在所述可信执行环境内通过与所述查询方使用的公钥对应的私钥对加密所述查询交易的对称密钥解密,通过解密得到的对称密钥对所述查询交易进行解密,以获取所述查询交易包含的交易内容;
[0149] 在对目标隐私数据进行解密后,所述装置还包括:数据加密单元713,通过所述查询方的对称密钥对解密后的目标隐私数据进行加密。
[0150] 可选的,还包括:
[0151] 隐私处理单元714,当确定出的查询权限为禁止查询时,生成用于表示所述查询方禁止查询所述目标隐私数据的合约收据以由所述查询方查看。
[0152] 上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0153] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0154] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0155] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0156] 本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0157] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0158] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
[0159] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
[0160] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器 (CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
[0161] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0162] 上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0163] 在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0164] 应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0165] 以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。