Processing

Please wait...

Settings

Settings

Goto Application

1. WO2020108138 - METHOD FOR IMPLEMENTING PRIVACY PROTECTION IN BLOCKCHAIN

Document

说明书

发明名称 0001   0002   0003   0004   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   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089   0090   0091   0092   0093   0094   0095   0096   0097   0098   0099   0100   0101   0102   0103   0104   0105   0106   0107   0108   0109   0110   0111   0112   0113   0114   0115   0116   0117   0118   0119   0120   0121   0122   0123   0124   0125   0126   0127   0128   0129   0130   0131   0132   0133   0134   0135   0136   0137   0138   0139   0140   0141   0142   0143   0144   0145   0146   0147   0148   0149   0150   0151   0152   0153   0154   0155   0156   0157   0158   0159   0160   0161   0162   0163   0164   0165   0166   0167   0168   0169   0170   0171   0172   0173   0174   0175   0176   0177   0178   0179   0180   0181   0182   0183   0184   0185   0186   0187   0188   0189   0190   0191  

权利要求书

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46  

附图

1 (R26)   2 (R26)   3 (R26)   4   5   6   7  

说明书

发明名称 : 区块链中实现隐私保护的方法

技术领域

[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]
区块链2.0时代中出现的智能合约,将区块链的应用范围提升到了一个新高度。有了智能合约,区块链能做不再是单一的转账交易,而是还可以调用一段代码,而这段代码可以由用户自定义。
[0006]
在传统的区块链与TEE相结合的解决方案中,为了实现隐私保护,智能合约整体被当作需要隐私保护的数据在TEE中进行运算并将全部合约状态加密存储在区块链上。而实际上智能合约中部分内容可能是敏感的,才需要进行隐私保护,而其它内容并不敏感,可以公开。目前的解决方案没有一种更加灵活的实现隐私保护的方法。
[0007]
发明内容
[0008]
本申请实施例的目的是提供一种区块链中实现隐私保护的方法。
[0009]
为解决上述技术问题,本申请实施例是这样实现的:
[0010]
一种区块链中实现隐私保护的方法,包括:
[0011]
客户端将包含智能合约的交易加密,并将加密后的所述交易发给第一区块链节点,所述智能合约的代码中包括通过隐私标识符标明的合约状态;
[0012]
第一区块链节点解密所述交易中的所述智能合约的代码,在可信执行环境中执行所述智能合约的代码,在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[0013]
一种区块链中实现隐私保护的方法,包括:
[0014]
第一区块链节点接收经过加密的包含智能合约的交易,所述智能合约的代码中包括通过隐私标识符标明的合约状态;
[0015]
第一区块链节点解密所述交易中的所述智能合约的代码;
[0016]
第一区块链节点在可信执行环境中执行解密的所述智能合约的代码,并在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[0017]
一种区块链中实现隐私保护的系统,包括客户端和第一区块链节点,其中:
[0018]
客户端用于将包含智能合约的交易加密,并将加密后的所述交易发给第一区块链节点,所述智能合约的代码中包括通过隐私标识符标明的合约状态;
[0019]
第一区块链节点用于解密所述交易中的所述智能合约的代码,在可信执行环境中执行所述智能合约的代码,在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[0020]
一种区块链中实现隐私保护的节点,包括:
[0021]
接收模块,用于接收经过加密的包含智能合约的交易,所述智能合约的代码中包括通过隐私标识符标明的合约状态;
[0022]
解密模块,用于解密所述交易中的所述智能合约的代码;
[0023]
执行模块,用于在可信执行环境中执行解密的所述智能合约的代码;
[0024]
写入模块,用于在执行模块执行解密的所述智能合约的代码后,将所述隐私标识符 标明的合约状态写入数据库时用密钥加密;
[0025]
数据库,用于存储写入的用密钥加密的合约状态。
[0026]
由以上本申请实施例提供的技术方案可见,本申请实施例对于智能合约代码中通过所述隐私标识符标明的合约状态,可以加密存储在所述数据库中。对于智能合约代码中没有通过所述隐私标识符标明的合约状态,可以仍然是明文存储在所述数据库中。相对于现有技术中智能合约的全部合约状态被当做需要隐私保护的数据在TEE中运算并将全部合约状态存储在数据库中,本实施例可以灵活的针对标明隐私保护的合约状态进行加密。

附图说明

[0027]
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0028]
图1为本申请一个实施例的创建智能合约的图示过程;
[0029]
图2为本申请一个实施例的调用智能合约的图示过程;
[0030]
图3为本申请一个实施例中创建智能合约和调用智能合约的示意图;
[0031]
图4为本申请一实现隐私保护的方法实施例的流程图;
[0032]
图5为本申请一实现隐私保护的方法实施例的流程图;
[0033]
图6为本申请一实现隐私保护的系统实施例的组成图;
[0034]
图7为本申请一实现隐私保护的节点实施例的组成图。

具体实施方式

[0035]
本申请实施例提供一种区块链中实现隐私保护的方法。
[0036]
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本 申请保护的范围。
[0037]
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
[0038]
不论是公有链、私有链还是联盟链,都可能提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
[0039]
以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上的智能合约可以是字节码的形式。
[0040]
例如图1所示,Bob将一个包含创建智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中1中的“0x6f8ae93…”代表了这个合约的地址,交易的data字段保存的可以是字节码,交易的to字段为一个空的账户。节点间通过共识机制达成一致后,这个合约成功创建,后续用户可以调用这个合约。
[0041]
合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码和账户存储将保存在该合约账户中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(Storage)的虚拟账户。
[0042]
前述提到,包含创建智能合约的交易的data字段保存的可以是该智能合约的字节码。字节码由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码,而是选择一门高级语言编写智能合约代码。高级语言编写的智能合约代码,经过编译器编译,生成字节码,进而该字节码可以部署到区块链上。以太坊支持的高级语言很多,如Solidity、Serpent、LLL语言等。
[0043]
以Solidity语言为例,用其编写的合约与面向对象编程语言中的类(Class)很相似,在一个合约中可以声明多种成员,包括状态变量、函数、函数修改器、事件等。状态变量是永久存储在智能合约的账户存储中的值,用于保存合约的状态。
[0044]
如下是以Solidity语言编写的一个简单的智能合约的代码示例1:
[0045]
Contract Example{
[0046]
int balance;
[0047]
function C(){
[0048]
balance+=1;
[0049]
}
[0050]
function getblance()returns(int){
[0051]
return balance;
[0052]
}
[0053]
}
[0054]
一般的,这个合约部署在区块链后,“balance”这个状态变量对应的存储状态是明文,任何人都可以看到其状态,无隐私保护的设置和能力。如果用户想将状态隐私保护起来,目前采用零知识证明、同态加密的解决方案,需要重新改写这个合约,使得“balance”这个状态变量加密保护起来,且需要支持balance在加密域上的所有运算。一般这种加密方式运算复杂,而且很难设计适合的算法在加密域上予以支持。而在有些区块链与TEE相结合的解决方案中,为了实现隐私保护,智能合约的全部合约状态被当作需要隐私保护的数据存储在区块链上。所述区块链,是存储在节点的数据库中特定逻辑组织而成的数据集合。所述数据库,如后所述,其物理载体可以存储介质,例如持久性存储介质。实际上,智能合约中可能只有“balance”这个合约状态是敏感的,才需要进行隐私保护,而其它内容并不敏感,可以公开。
[0055]
此外,如图2所示,仍以以太坊为例,Bob将一个包含调用智能合约信息的交易发 送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中2中交易的from字段是发起调用智能合约的账户的地址,to字段中的“0x6f8ae93…”代表了被调用的智能合约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的调用智能合约的方法和参数。调用智能合约后,balance的值可能改变。后续,某个客户端可以通过某一区块链节点(例如图2中的节点6)查看balance的当前值。
[0056]
智能合约可以以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当这样的交易完成后后,区块链上就保存了无法篡改、不会丢失的交易凭证。
[0057]
创建智能合约和调用智能合约的示意图如图3所示。以太坊中要创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,智能合约代码分布式的运行在以太坊网络中每个节点的虚拟机中。
[0058]
以下结合图4所示说明本申请一实现隐私保护的方法实施例的实现过程:
[0059]
S401:客户端将包含智能合约的交易加密,并将加密后的所述交易发给第一区块链节点,所述智能合约的代码中包括通过隐私标识符标明的合约状态。
[0060]
用户在客户端上编写智能合约代码的过程中,可以采用隐私标识符来标识需要隐私保护的合约状态。
[0061]
以用户采用Solidity语言编写“创建智能合约”为例,在编写过程中,可以采用隐私标识符来标识需要隐私保护的合约状态。这里的合约状态例如是编程语言中的状态变量。类似的,在采用Serpent、LLL语言等编写智能合约过程中,也可以采用隐私标识符来标识需要隐私保护的状态变量。
[0062]
Solidity语言目前主要支持状态变量类型可以是:Booleans,Integers,Fixed Point Numbers,Address,Fixed-size byte array,Address Literals,Rational and integer Literals,String Literals,Hexadecimal Literals,Enums.
[0063]
这里的隐私标识符可以是专门标明需要隐私保护的标识符,例如通过Confidential这一关键字表示。那么,如果要对上述Solidity语言支持的状态变量进行隐私保护,可以在前面增加Confidential这一隐私标识符。这样,通过Confidential作为前缀可以标明需要隐私保护的状态变量。例如,Solidity语言支持隐私保护的状态变量类型可以是:Confidential Booleans,Confidential Integers,Confidential Fixed Point Numbers, Confidential Address,Confidential Fixed-size byte array,Confidential Address Literals,Confidential Rational and integer Literals,Confidential String Literals,Confidential Hexadecimal Literals,and Confidential Enums。
[0064]
对上面提到的代码示例1,如果想将“balance”隐私保护起来,可以用隐私标识符Confidential在定义balance的类型int前标明(当然也可以将隐私标识符Confidential置于定义balance的类型int之后),如下代码示例2所示(下划线的部分表示隐私标识符):
[0065]
Contract Example{
[0066]
Confidential int balance;
[0067]
function C(){
[0068]
balance+=1;
[0069]
}
[0070]
function getblance()returns(int){
[0071]
return balance;
[0072]
}
[0073]
}
[0074]
第一区块链节点接收的交易中的智能合约,可以是用户在第一区块链节点上直接用高级语言编写智能合约,也可以是接收用户在客户端上用高级语言编写的智能合约,还可以是接收第二区块链节点发来的交易中的智能合约。具体的,可以是所述客户端通过第二区块链节点发来的交易中的智能合约。
[0075]
如前所述,部署在区块链上的智能合约一般是字节码的形式。如果是用户在第一区块链节点上直接用高级语言编写智能合约,则第一区块链节点还可以采用编译器对高级语言编写的智能合约进行编译,生成字节码。如果接收用户在客户端上用高级语言编写的智能合约,则用户在客户端上书写智能合约后,所述客户端还可以采用编译器对高级语言编写的智能合约进行编译,生成字节码,进而将字节码形式的智能合约发送至第一区块链节点,这样,第一区块链节点接收的是字节码形式的智能合约。此外,用户在客户端上书写智能合约后,还可以是直接将高级语言编写的智能合约发送到第一区块链节点,进而第一区块链节点可以采用编译器对高级语言编写的智能合约进行编译,生成字节码。对于第一区块链节点接收的第二区块链节点发来的交易中的智能合约,一般来说是字节码形式的智能合约;当然也可以是用高级语言编写的智能合约,进而第一区块链 节点可以采用编译器对高级语言编写的智能合约进行编译,生成字节码。
[0076]
在通过编译器对高级语言编写的智能合约编译的过程中,需要对编译器进行调整,以对隐私标识符标明的合约状态进行处理。
[0077]
对于代码示例1中的传统的Solidity语言编写智能合约的C()函数部分,编译器编译结果例如为如下所示的代码示例3(/*…*/中…的部分为注释,后面如有汉字则为对应的中文注释):
[0078]
/*compile function C()balance+=1编译函数C()balance+=1*/
[0079]
tag_2
[0080]
/*pushes 1 onto stack将1压入栈顶,这个1就是要赋值的1*/
[0081]
0x1
[0082]
/*pushes 0 onto stack将0压入栈顶,这个0是指balance这个数据将要存储到合约账户数据存储的0号位置。上面这两句执行完后,堆栈里从顶往下,就有了0和1两个数据*/
[0083]
0x0
[0084]
/*balance+=1将balance赋值为balance+1后的值*/
[0085]
dup2/*复制栈中从顶往下数的第二项,所以这时堆栈从顶往上就有了1、0、1三个数据*/
[0086]
swap1/*交换栈顶的两项数据,这时堆栈从顶往下存储的是0、1、1*/
[0087]
/*store(0x0,0x1)存储(0x0,0x1),从栈顶往下数,将第二项数据存储到第一项标识的位置上,同时将这两项弹出堆栈。这里便是将数据1存储到0号位置,前面因为已经将balance与0号位置做了绑定,所以就完成了balance=1的赋值。这时堆栈里就只剩一层数据:1*/
[0088]
sstore
[0089]
pop/*丢弃栈顶数据,这时堆栈变成空,等待下一条指令的执行*/
[0090]
对于代码示例2中包含隐私标识符标明合约状态的Solidity语言编写的智能合约,编译器编译结果如下所示的代码示例4(/*…*/中…的部分为注释,汉字为对应的中文):
[0091]
/*compile function C()balance+=1编译函数C()balance+=1*/
[0092]
tag_2
[0093]
/*pushes 1 onto stack将1压入栈顶,这个1就是要赋值的1*/
[0094]
0x1
[0095]
/*pushes 0 onto stack将0压入栈顶,这个0是指balance这个数据将要存储到合约账户数据存储的0号位置。上面这两句执行完后,堆栈里从顶往下,就有了0和1两个数据*/
[0096]
0x0
[0097]
/*balance+=1将balance赋值为balance+1后的值*/
[0098]
dup2/*复制栈中从顶往下数的第二项,所以这时堆栈从顶往上就有了1、0、1三个数据*/
[0099]
swap1/*交换栈顶的两项数据,这时堆栈从顶往下存储的是0、1、1*/
[0100]
/*Confidential_sstore(0x0,0x1)加密存储(0x0,0x1),从栈顶往下数,将第二项数据存储到第一项标识的位置上,同时将这两项弹出堆栈。这里即是将数据1存储到0号位置,前面已经将balance与0号位置做了绑定,所以这里就完成了balance=1的赋值。这时堆栈里就只剩一层数据:1*/
[0101]
Confidential_sstore
[0102]
pop/*丢弃栈顶数据,这时堆栈变成空,等待下一条指令的执行*/
[0103]
上述字节码中,通过隐私标识符Confidential标明了需要进行隐私保护的合约状态balance。
[0104]
这里的字节码中也采用了Confidential这一个关键词表示需要隐私保护的操作,与Solidity语言编写的智能合约中相同,即与代码示例2中的相同。本领域技术人员明白,字节码中可以采用不同于代码示例2中的隐私标识符,即字节码中可以采用不同于高级语言编写的代码中的隐私标识符。即使字节码中采用不同于高级语言编写的代码中的隐私标识符,假设高级语言编写的代码中的隐私标识符为第一标识符,字节码形式的代码中的隐私标识符为第二隐私标识符,则第一隐私标识符与第二隐私标识符存在对应关系。
[0105]
如前所述,如果是用户在第一区块链节点上直接用高级语言编写智能合约,即第一区块链节点接收的包含智能合约的交易中的智能合约是用高级语言编写的,则第一区块链节点还可以采用编译器对高级语言编写的智能合约进行编译,生成字节码。生成的字 节码形式的智能合约中,通过隐私标识符在智能合约代码中标明需要进行隐私保护的合约状态。所述高级语言编写的智能合约中包括通过隐私标识符标明了需要进行隐私保护的合约状态。高级语言编写的代码中的隐私标识符对应于字节码形式的代码中的隐私标识符。
[0106]
如果用户在客户端上用高级语言编写的智能合约,则用户在客户端上书写智能合约后,所述客户端还可以采用编译器对高级语言编写的智能合约进行编译,生成字节码,进而将字节码形式的智能合约发送至第一区块链节点。这样,第一区块链节点接收包含智能合约的交易,其中的智能合约是字节码形式的智能合约。该字节码形式的智能合约中包括通过隐私标识符标明需要进行隐私保护的合约状态。所述高级语言编写的智能合约中包括通过隐私标识符标明了需要进行隐私保护的合约状态。高级语言编写的代码中的隐私标识符对应于字节码形式的代码中的隐私标识符。
[0107]
此外,用户在客户端上书写智能合约后,还可以是直接将高级语言编写的智能合约发送到第一区块链节点。所述高级语言编写的智能合约中包括通过隐私标识符标明了需要进行隐私保护的合约状态。进而,第一区块链节点可以采用编译器对高级语言编写的智能合约进行编译,生成字节码。生成的字节码形式的智能合约中,通过隐私标识符在智能合约代码中标明需要进行隐私保护的合约状态。高级语言编写的代码中的隐私标识符对应于字节码形式的代码中的隐私标识符。
[0108]
如前所述,对于第一区块链节点接收的第二区块链节点发来的交易中的智能合约,一般来说是字节码形式的智能合约,当然也不排除是高级语言形式的智能合约。后者可以由第一区块链节点进一步编译而形成字节码。类似的,后者高级语言编写的代码中的隐私标识符对应于字节码形式的代码中的隐私标识符。
[0109]
客户端可以将包含创建智能合约的交易用密钥加密。所述加密,可以采用对称加密,也可以采用非对称加密。对称加密采用的加密算法,例如是DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。非对称加密算法,例如是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
[0110]
或者,客户端可以将包含创建智能合约的交易用密钥加密,还可以采用对称加密结合非对称加密相结合的方式。例如,客户端采用对称加密算法加密交易内容,即采用对称加密算法的私钥加密包含创建智能合约的交易,并用非对称加密算法加密对称加密算法中采用的私钥。一般的,采用非对称加密算法的公钥加密对称加密算法中采用的私钥。这样,第一区块链节点接收到加密的交易后,可以先采用非对称加密算法的私钥进行解 密,得到对称加密算法的私钥,进而用对称加密算法的私钥解密得到交易内容,即得到创建智能合约的代码。
[0111]
第一区块链节点接收包含智能合约的交易,所述智能合约的代码中包括通过隐私标识符标明的需要进行隐私保护的合约状态。
[0112]
客户端发送给第一区块链节点的交易中,也可以是包含调用智能合约的交易。对于这种情况,客户端可以将包含调用智能合约的交易用密钥加密,并将加密后的所述交易发给第一区块链节点。所述被调用的智能合约中可以包括通过隐私标识符标明的合约状态。所述调用智能合约的交易,可以是多重嵌套结构的调用。例如,调用智能合约1中的代码,调用了智能合约2,而调用智能合约2中的代码指向了经创建智能合约代码生成的合约地址3,从而,调用智能合约1中的代码间接调用了所述合约地址3中的智能合约代码,而合约地址3中的代码中可以包括通过隐私标识符标明的合约状态。这样,相当于调用智能合约1中包含了通过隐私标识符标明的合约状态。具体实现过程与上述过程类似,在此不再赘述。
[0113]
客户端发送给第一区块链节点的交易中,也可以是包含创建和调用智能合约的交易。对于这种情况,客户端可以将包含创建和调用智能合约的交易用密钥加密,并将加密后的所述交易发给第一区块链节点,所述智能合约中包括通过隐私标识符标明的合约状态。具体实现过程与上述过程类似,在此不再赘述。
[0114]
S403:第一区块链节点解密所述交易中的所述智能合约的代码,在可信执行环境中执行所述智能合约的代码,在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[0115]
如前所述,第一区块链节点接收的包含智能合约的交易,例如可以是创建和/或调用智能合约的交易。例如在以太坊中,第一区块链节点接收到客户端发来的创建和/或调用智能合约的交易后,可以检查交易是否有效、格式是否正确,验证交易的签名是否合法等。
[0116]
一般来说,以太坊中的节点一般也是争夺记账权的节点,因此,第一区块链节点作为争夺记账权的节点可以在本地执行所述包含智能合约的交易。如果争夺记账权的节点中的一个在本轮争夺记账权的过程中胜出,则成为记账节点。第一区块链节点如果在本轮争夺记账权的过程中胜出,就成为记账节点;当然,如果第一区块俩节点如果在本轮争夺记账权的过程中没有胜出,则不是记账节点,而其它节点可能成为记账节点。
[0117]
智能合约类似于面向对象编程中的类,执行的结果生成对应该智能合约的合约实例,类似于生成类对应的对象。执行交易中创建智能合约的代码的过程,会创建合约账户,并在账户空间中部署合约。以太坊中,智能合约账户的地址是由发送者的地址(如图1中的0xf5e…或图2中的0x14c5f88a…)和交易随机数(nonce)作为输入,通过加密算法生成的。图2中的合约地址即由发送者的地址0x14c5f88a…和交易中的nonce经加密算法生成。
[0118]
一般的,采用工作量证明(Proof of Work,POW)以及股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法的支持智能合约的区块链网络中,争夺记账权的节点都可以在接收到包含创建智能合约的交易后执行所述交易。争夺记账权的节点中可能其中一个在本轮争夺记账权的过程中胜出,成为记账节点。记账节点可以将该包含智能合约的交易与其它交易一起打包并生成新的区块,并将生成的新的区块发送至其它节点进行共识。采用、
[0119]
对于实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等机制的支持智能合约的区块链网络中,具有记账权的节点在本轮记账前已经商定好。因此,第一区块链节点接收到创建智能合约的交易后,如果自身不是本轮的记账节点,则可以将该交易发送至记账节点。对于本轮的记账节点(可以是第一区块链节点),在将该包含智能合约的交易打包并生成新区块的过程中或者之前,或在将该包含智能合约的交易与其它交易一起打包并生成新区块的过程中或者之前,可以执行所述包含智能合约的交易。所述记账节点将该包含智能合约的交易打包(或还包括其它交易一起打包)并生成新的区块后,将生成的新的区块或者区块头发送至其它节点进行共识。
[0120]
如上所述,采用POW机制的支持智能合约的区块链网络中,或者采用POS、DPOS、PBFT机制的支持智能合约的区块链网络中,本轮的记账节点都可以将该包含智能合约的交易打包并生成新的区块,并将生成的新的区块后区块头发送至其它节点进行共识。如果其它节点接收到所述区块后经验证没有问题,可以将该新的区块追加到原有的区块链末尾,从而完成记账过程,达成共识,也就完成了智能合约在区块链网络上的部署。其它节点验证记账节点发来的新的区块或区块头的过程中,也可以执行所述区块中的包含智能合约的交易。
[0121]
所述执行过程,一般可以通过虚拟机执行,例如以太坊中的虚拟机(Ethereum Virtual Machine,EVM)。一般的,EVM执行字节码形式的智能合约。当EVM执行到如代码示例3中的sstore时,传统的,是以键值对(key-value pair)的方式将合约状态 写入数据库。用代码表示的话,如setstorage(key,value)。
[0122]
本实施例中,第一区块链节点可以在可信执行环境(Trusted Execution Environment,TEE)中执行所述解密的智能合约代码。TEE是基于CPU硬件的安全扩展,且与外部完全隔离的可信执行环境。TEE最早是由Global Platform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。ARM的Trust Zone技术最早实现了真正商用的TEE技术。
[0123]
伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对TEE提出了更多的需求。TEE的概念也得到了高速的发展和扩充。现在所说的TEE相比与最初提出的概念已经是更加广义的TEE。例如,服务器芯片厂商Intel,AMD等都先后推出了硬件辅助的TEE并丰富了TEE的概念和特性,在工业界得到了广泛的认可。现在提起的TEE通常更多指这类硬件辅助的TEE技术。不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用TEE的第一步就是要确认TEE的真实可信。因此现在的TEE技术都引入了远程证明机制,由硬件厂商(主要是CPU厂商)背书并通过数字签名技术确保用户对TEE状态可验证。同时仅仅是安全的资源隔离也无法满足的安全需求,进一步的数据隐私保护也被提出。包括Intel SGX,AMD SEV在内的商用TEE也都提供了内存加密技术,将可信硬件限定在CPU内部,总线和内存的数据均是密文防止恶意用户进行窥探。例如,英特尔的软件保护扩展(SGX)等TEE技术隔离了代码执行、远程证明、安全配置、数据的安全存储以及用于执行代码的可信路径。在TEE中运行的应用程序受到安全保护,几乎不可能被第三方访问。
[0124]
以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的加密保护下利用数据进行运算,结果会以密文形式返回。这种模式下,既可以利用强大 的计算力,又不用担心数据泄漏。
[0125]
如S401中所述,客户端可以将包含创建智能合约的交易用密钥加密。所述加密,可以采用对称加密,也可以采用非对称加密。S403中,相应地,第一区块链节点可以用对应的密钥解密所述交易中的所述智能合约的代码。如果S401中客户端用对称加密方式,即用对称加密的私钥对创建合约的交易加密,则S403中,相应地,第一区块链节点可以用所述对称加密的私钥解密所述交易中的所述智能合约的代码。对称加密采用的加密算法,例如是DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。对称加密的密钥,例如可以是由客户端和第一区块链节点协商确定。
[0126]
如果S401中客户端用非对称加密方式,即用非对称加密的公钥对创建合约的交易加密,则S403中,相应地,第一区块链节点可以用所述非对称加密的私钥解密所述交易中的所述智能合约的代码。非对称加密算法,例如是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。非对称加密的密钥,例如可以是由第一区块链节点生成一对公钥和私钥,并将公钥在S401之前发送至所述客户端,从而S401中所述客户端可以将包含创建智能合约的交易用密钥加密。
[0127]
非对称加密的密钥,也可以由一个密钥管理服务器生成。通过远程证明的方式,密钥管理服务器将私钥发送至第一区块链节点,具体的,可以是传入第一区块链节点的围圈中。对于非对称加密的公钥,可以由密钥管理服务器发送至所述客户端。从而,S401中,所述客户端可以用该公钥加密所述包含创建智能合约的交易,相应地,第一区块链节点可以用所述私钥解密所述交易中的所述智能合约的代码。
[0128]
如S401中所述,客户端也采用对称加密结合非对称加密相结合的方式。例如,客户端采用对称加密算法加密交易内容,即采用对称加密算法的私钥加密包含创建智能合约的交易,并用非对称加密算法加密对称加密算法中采用的私钥。一般的,采用非对称加密算法的公钥加密对称加密算法中采用的私钥。这样,第一区块链节点接收到加密的交易后,可以先采用非对称加密算法的私钥进行解密,得到对称加密算法的私钥,进而用对称加密算法的私钥解密得到交易内容,即得到创建智能合约的代码。
[0129]
例如,密钥管理服务器通过远程证明可以将非对称加密算法的私钥发送至第一区块链节点的围圈,并将非对称加密算法的公钥发送至所述客户端。这样,S401中,所述客户端可以采用对称加密算法的私钥加密交易内容,即采用对称加密算法的私钥加密包含创建智能合约的交易,并用非对称加密算法的公钥加密对称加密算法中采用的私钥。进而,所述客户端可以将所述加密后的交易内容和非对称加密算法的公钥加密对称 加密算法中采用的私钥发送至第一区块链节点。第一区块链节点接收到所述加密后的交易内容和非对称加密算法的公钥加密对称加密算法中采用的私钥后,可以先用非对称加密算法的私钥解密得到对称加密算法的私钥,进而用该对称加密算法的私钥的解密所述交易,得到交易明文,从而得到所述创建智能合约的代码明文。这里的加密方式一般称为数字信封加密。调用智能合约的情形与上述创建智能合约类似,不再赘述。
[0130]
这样,第一区块链节点可以在可信执行环境中执行明文的所述智能合约的代码。具体的,第一区块链节点可以利用CPU中新增的处理器指令,在内存中可以分配一部分区域EPC,通过CPU内的加密引擎MEE对上述解密得到的明文代码进行加密存入所述EPC中。EPC中加密的内容进入CPU后被解密成明文。在CPU中,对所述明文的代码进行运算,完成执行过程。
[0131]
SGX技术中,执行所述智能合约的代码,可以将EVM加载进所述围圈中。远程证明过程中,所述密钥管理服务器可以计算本地EVM代码的hash值,并与第一区块链节点中加载的EVM代码的hash值比对,比对结果正确作为通过远程证明的一个必要条件,从而完成对第一区块链节点SGX围圈加载的代码的度量。经过度量,正确的EVM可以在SGX中执行所述智能合约代码。
[0132]
一般的,CPU执行所述明文代码后,所述合约状态会发生变化。在可信执行环境中执行所述智能合约的明文代码,所述智能合约中通过隐私标识符标明的合约状态,其状态也会发生变化。
[0133]
将合约状态存入区块链,从区块链节点的角度,是将该合约状态写入数据库,例如本地的数据库。所述数据库,一般存储于存储介质之中,更多见的是持久性存储介质。所述持久性存储介质,可以是磁盘、软盘,也可以是通电后可恢复数据从而可以持久存储的内存之类。
[0134]
写入数据库的操作,用代码表示的话,如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密钥,例如可以是通过远程证明后由密钥管理服务器发送给第一区块链节点。此外,所述密钥也可以是非对称加密的密钥。
[0135]
这样,对于智能合约代码中通过所述隐私标识符标明的合约状态,可以加密存 储在所述数据库中。对于智能合约代码中没有通过所述隐私标识符标明的合约状态,可以仍然是明文存储在所述数据库中。相对于现有技术中智能合约的全部合约状态被当做需要隐私保护的数据在TEE中运算并存储在数据库中,本实施例可以灵活的针对标明隐私保护的合约状态进行加密存储。
[0136]
以下附图5说明本申请一实现隐私保护的方法实施例。该实施例侧重从第一区块链节点的角度描述实现过程。如图5所示,该方法实施例包括:
[0137]
S501:第一区块链节点接收经过加密的包含智能合约的交易,所述智能合约的代码中包括通过隐私标识符标明的合约状态。
[0138]
如前所述,所述合约状态,可以包括采用的编程语言编写的代码中的状态变量。以用户采用Solidity语言编写“创建智能合约”为例,在编写过程中,可以采用隐私标识符来标识需要隐私保护的合约状态。这里的合约状态例如是编程语言中的状态变量。这里的隐私标识符可以是专门标明需要隐私保护的标识符,例如通过Confidential这一关键字表示。那么,如果要对上述Solidity语言支持的状态变量进行隐私保护,可以在前面增加Confidential这一隐私标识符。这样,通过Confidential作为前缀可以标明需要隐私保护的状态变量。
[0139]
第一区块链节点接收的交易中的智能合约,可以包括:
[0140]
用户在第一区块链节点上用高级语言编写的智能合约;或,
[0141]
用户在客户端上用高级语言编写的智能合约;或,
[0142]
第二区块链节点发来的交易中的智能合约。
[0143]
如前所述,部署在区块链上的智能合约一般是字节码的形式。如果是用户在第一区块链节点上直接用高级语言编写智能合约,则第一区块链节点还可以采用编译器对高级语言编写的智能合约进行编译,生成字节码。如果接收用户在客户端上用高级语言编写的智能合约,则用户在客户端上书写智能合约后,所述客户端还可以采用编译器对高级语言编写的智能合约进行编译,生成字节码,进而将字节码形式的智能合约发送至第一区块链节点,这样,第一区块链节点接收的是字节码形式的智能合约。此外,用户在客户端上书写智能合约后,还可以是直接将高级语言编写的智能合约发送到第一区块链节点,进而第一区块链节点可以采用编译器对高级语言编写的智能合约进行编译,生成字节码。对于第一区块链节点接收的第二区块链节点发来的交易中的智能合约,一般来说是字节码形式的智能合约;当然也可以是用高级语言编写的智能合约,进而第一区 块链节点可以采用编译器对高级语言编写的智能合约进行编译,生成字节码。
[0144]
在通过编译器对高级语言编写的智能合约编译的过程中,需要对编译器进行调整,以对隐私标识符标明的合约状态进行处理。具体请参见图4对应的实施例。如前述代码示例3、4中,编译后的字节码中也采用了Confidential这一个关键词表示需要隐私保护的操作,与Solidity语言编写的智能合约中相同,即与代码示例2中的相同。本领域技术人员明白,字节码中可以采用不同于代码示例2中的隐私标识符,即字节码中可以采用不同于高级语言编写的代码中的隐私标识符。即使字节码中采用不同于高级语言编写的代码中的隐私标识符,假设高级语言编写的代码中的隐私标识符为第一标识符,字节码形式的代码中的隐私标识符为第二隐私标识符,则第一隐私标识符与第二隐私标识符存在对应关系。
[0145]
第一区块链节点接收的经过加密的包含智能合约的交易,所述加密方式采用对称加密方式或非对称加密方式,或采用对称加密结合非对称加密的方式。例如,客户端可以将包含创建智能合约的交易用密钥加密。所述加密,可以采用对称加密,也可以采用非对称加密。或者,客户端可以采用对称加密结合非对称加密相结合的方式。对于包含智能合约的交易用对称加密的私钥加密,第一区块链节点用对应的对称加密的私钥解密所述交易得到所述智能合约的代码;或,对于包含智能合约的交易用非对称加密的公钥加密,第一区块链节点用对应的非对称加密的私钥解密所述交易得到所述智能合约的代码。所述对称加密结合非对称加密的方式,包括数字信封加密方式。
[0146]
对于采用对称加密算法的私钥加密包含智能合约的交易,并用非对称加密算法的公钥加密对称加密算法中采用的私钥,第一区块链节点可以采用非对称加密算法的私钥进行解密得到对称加密算法的私钥,并用所述对称加密算法的私钥解密得到交易内容。所述对称加密算法的公钥,以由加密方与第一区块链节点协商得到,或由密钥管理服务器发送得到。所述对称加密算法的公钥也可以由加密方生成,密钥管理服务器通过远程证明将所述非对称加密算法的私钥发送至第一区块链节点的围圈,将所述非对称加密算法的公钥发送至所述加密方。
[0147]
第一区块链节点接收的包含智能合约的交易,例如可以是创建和/或调用智能合约的交易。
[0148]
S503:第一区块链节点解密所述交易中的所述智能合约的代码。
[0149]
解密过程如上所述,不再赘述。
[0150]
S505:第一区块链节点在可信执行环境中执行解密的所述智能合约的代码,并在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[0151]
第一区块链节点可以利用CPU中新增的处理器指令,在内存中可以分配一部分区域EPC,通过CPU内的加密引擎MEE对上述解密得到的明文代码进行加密存入所述EPC中。EPC中加密的内容进入CPU后被解密成明文。在CPU中,对所述明文的代码进行运算,完成执行过程。
[0152]
SGX技术中,执行所述智能合约的代码,可以将EVM加载进所述围圈中。远程证明过程中,所述密钥管理服务器可以计算本地EVM代码的hash值,并与第一区块链节点中加载的EVM代码的hash值比对,比对结果正确作为通过远程证明的一个必要条件,从而完成对第一区块链节点SGX围圈加载的代码的度量。经过度量,正确的EVM可以在SGX中执行所述智能合约代码。
[0153]
一般的,CPU执行所述明文代码后,所述合约状态会发生变化。在可信执行环境中执行所述智能合约的明文代码,所述智能合约中通过隐私标识符标明的合约状态,其状态也会发生变化。
[0154]
从区块链节点的角度,是将该合约状态写入数据库,例如本地的数据库。所述数据库,一般存储于存储介质之中,更多见的是持久性存储介质。所述持久性存储介质,可以是磁盘、软盘,也可以是通电后可恢复数据从而可以持久存储的内存之类。
[0155]
所述密钥包括对称加密的密钥或非对称加密的密钥。所述对称加密的密钥包括seal密钥。所述seal密钥可以在第一区块链节点的SGX通过远程证明后由密钥管理服务器发送。
[0156]
上述实施例中提到的编译器,适用于编译型语言。即,代码在运行前,需要整体由编译器将人类可以理解的语言(编程语言)转换成机器可以理解的语言。进而,经编译后的代码由虚拟机执行,如上述EVM。编译型语言编写的应用在编译后能直接运行。编译型语言的特点是运行速度快,效率高。
[0157]
此外,还存在一种解释型语言。这类解释型语言也是人类可以理解的语言(编程语言),也需要转换成机器可以理解的语言才能执行,但是是在运行时转换的。换句话说,解释型语言是直接以源代码的形式出现,运行的时候再实时解析为机器码并执行。解释型语言的程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。样解释型语言每执行一次就要翻译一次,效率比 较低。例如JavaScript即属于解释型语言,这就表示每句代码只有在运行时,系统才知道这句代码是否有错。换句话说,由于编译型语言在运行前进行了编译,编译器对所有代码都进行了检查,这样就不会产生一些低级错误,例如使用了不存在的名字,或者使用了错误的名字。而JavaScript就可能会出现这些问题。
[0158]
上述实施例中,可以用解释型语言代替编译型语言。即第一区块链节点接收到的可以是解释型语言编写的智能合约代码,不需要经过编译器编译。执行时,可以由解释器执行智能合约代码。解释器例如是JVM(Java Virtual Machine,Java虚拟机)这种JIT编译(Just In Time compilation)。
[0159]
类似的,SGX技术中,执行所述智能合约的代码,可以将JVM加载进所述围圈中。远程证明过程中,所述密钥管理服务器可以计算本地JVM代码的hash值,并与第一区块链节点中加载的JVM代码的hash值比对,比对结果正确作为通过远程证明的一个必要条件,从而完成对第一区块链节点SGX围圈加载的代码的度量。经过度量,正确的JVM可以在SGX中执行所述智能合约代码。
[0160]
以下结合图6,介绍本申请一种区块链中实现隐私保护的系统实施例。该实施例中,所述实现隐私保护的系统包括客户端601和第一区块链节点602,其中:
[0161]
客户端601用于将包含智能合约的交易加密,并将加密后的所述交易发给第一区块链节点,所述智能合约的代码中包括通过隐私标识符标明的合约状态;
[0162]
第一区块链节点602用于解密所述交易中的所述智能合约的代码,在可信执行环境中执行所述智能合约的代码,在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[0163]
所述合约状态包括采用的编程语言编写的代码中的状态变量。
[0164]
其中,对于高级语言形式的智能合约中包括通过第一隐私标识符标明的需要进行隐私保护的合约状态,所述字节码形式的智能合约中包括通过第二隐私标识符标明的需要进行隐私保护的合约状态;所述第一隐私标识符与第二隐私标识符相同或存在对应关系。
[0165]
以下结合图7介绍本申请一种区块链中实现隐私保护的节点实施例,包括:
[0166]
接收模块701,用于接收经过加密的包含智能合约的交易,所述智能合约的代码中包括通过隐私标识符标明的合约状态;
[0167]
解密模块702,用于解密所述交易中的所述智能合约的代码;
[0168]
执行模块703,用于在可信执行环境中执行解密的所述智能合约的代码;
[0169]
写入模块704,用于在执行模块执行解密的所述智能合约的代码后,将所述隐私标识符标明的合约状态写入数据库时用密钥加密;
[0170]
数据库705,用于存储写入的用密钥加密的合约状态。
[0171]
其中,所述合约状态包括采用的编程语言编写的代码中的状态变量。
[0172]
其中,所述高级语言形式的智能合约中包括通过第一隐私标识符标明的需要进行隐私保护的合约状态,所述字节码形式的智能合约中包括通过第二隐私标识符标明的需要进行隐私保护的合约状态;所述第一隐私标识符与第二隐私标识符相同或存在对应关系。
[0173]
其中,所述对称加密的密钥包括seal密钥。
[0174]
在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。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言 稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
[0175]
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
[0176]
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0177]
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0178]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0179]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执 行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0180]
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0181]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0182]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0183]
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0184]
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0185]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0186]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0187]
尽管上述内容中的描述使用术语“第一”、“第二”等来描述各种元件,但这些元件不应受术语的限制。这些术语只是用于将一个元件与另一元件区分开。例如,第一触摸可被命名为第二触摸并且类似地第二触摸可被命名为第一触摸,而不脱离各种所述实施方案的范围。
[0188]
根据上下文,术语“如果”可被解释为意指“当...时”(“when”或“upon”)或“响应于确定”或“响应于检测到”。类似地,根据上下文,短语“如果确定...”或“如果检测到[所陈述的条件或事件]”可被解释为意指“在确定...时”或“响应于确定...”或“在检测到[所陈述的条件或事件]时”或“响应于检测到[所陈述的条件或事件]”。
[0189]
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0190]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0191]
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

权利要求书

[权利要求 1]
一种区块链中实现隐私保护的方法,包括: 客户端将包含智能合约的交易加密,并将加密后的所述交易发给第一区块链节点,所述智能合约的代码中包括通过隐私标识符标明的合约状态; 第一区块链节点解密所述交易中的所述智能合约的代码,在可信执行环境中执行所述智能合约的代码;在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[权利要求 2]
如权利要求1所述的方法,其中,第一区块链节点接收的交易中的智能合约,包括: 用户在第一区块链节点上用高级语言编写的智能合约;或, 用户在客户端上用高级语言编写的智能合约;或, 客户端通过第二区块链节点发来的交易中的智能合约。
[权利要求 3]
如权利要求2所述的方法,其中,对于用户在第一区块链节点上用高级语言编写的智能合约,第一区块链节点接收所述收包含智能合约的交易后,还包括: 采用编译器对所述高级语言编写的智能合约进行编译,生成字节码。
[权利要求 4]
如权利要求2所述的方法,其中,对于用户在客户端上用高级语言编写的智能合约,用户在客户端上书写智能合约后,所述客户端还采用编译器对高级语言编写的智能合约进行编译,生成字节码,进而将字节码形式的智能合约发送至第一区块链节点; 相应地,所述第一区块链节点接收包含智能合约的交易,其中的智能合约为字节码形式的智能合约。
[权利要求 5]
如权利要求2所述的方法,其中,对于用户在客户端上用高级语言编写的智能合约,用户在客户端上书写智能合约后,将高级语言编写的智能合约发送到第一区块链节点; 相应地,所述第一区块链节点接收包含智能合约的交易,其中的智能合约为高级语言形式的智能合约; 所述方法还包括: 第一区块链节点采用编译器对所述高级语言编写的智能合约进行编译,生成字节码。
[权利要求 6]
如权利要求2所述的方法,其中,所述客户端通过第二区块链节点发来的交易中的智能合约,包括字节码形式的智能合约或用高级语言编写的智能合约。
[权利要求 7]
如权利要求6所述的方法,其中,对于用高级语言编写的智能合约,第一区块链节点接收所述收包含智能合约的交易后,还包括: 采用编译器对所述高级语言编写的智能合约进行编译,生成字节码。
[权利要求 8]
如权利要求3-7任一项所述的方法,其中,所述高级语言形式的智能合约中包括通过第一隐私标识符标明的需要进行隐私保护的合约状态,所述字节码形式的智能合约中包括通过第二隐私标识符标明的需要进行隐私保护的合约状态; 所述第一隐私标识符与第二隐私标识符相同或存在对应关系。
[权利要求 9]
如权利要求1所述的方法,其中,所述客户端将包含智能合约的交易加密,所述加密方式采用对称加密方式或非对称加密方式,或采用对称加密结合非对称加密的方式。
[权利要求 10]
如权利要求9所述的方法,其中, 所述客户端将包含智能合约的交易用对称加密的私钥加密,第一区块链节点用对应的对称加密的私钥解密所述交易得到所述智能合约的代码;或, 所述客户端将包含智能合约的交易用非对称加密的公钥加密,第一区块链节点用对应的非对称加密的私钥解密所述交易得到所述智能合约的代码。
[权利要求 11]
如权利要求9所述的方法,其中,所述对称加密结合非对称加密的方式,包括数字信封加密方式。
[权利要求 12]
如权利要求11所述的方法,其中,所述客户端采用对称加密算法的私钥加密包含智能合约的交易,并用非对称加密算法的公钥加密对称加密算法中采用的私钥; 相应地,第一区块链节点接收到所述加密的交易后,采用非对称加密算法的私钥进行解密得到对称加密算法的私钥,并用所述对称加密算法的私钥解密得到交易内容。
[权利要求 13]
如权利要求10或12所述的方法,其中,所述对称加密算法的公钥,由所述客户端与第一区块链节点协商得到,或由密钥管理服务器发送得到。
[权利要求 14]
如权利要求12所述的方法,其中,所述对称加密算法的公钥由所述客户端生成,密钥管理服务器通过远程证明将所述非对称加密算法的私钥发送至第一区块链节点的围圈,将所述非对称加密算法的公钥发送至所述客户端。
[权利要求 15]
如权利要求1所述的方法,其中,所述智能合约包括创建和/或调用智能合约。
[权利要求 16]
如权利要求1所述的方法,其中,所述数据库存储于持久性存储介质。
[权利要求 17]
如权利要求16所述的方法,所述持久性存储介质包括磁盘、软盘或通电后可恢复数据从而可以持久存储的内存。
[权利要求 18]
如权利要求1所述的方法,其中,所述密钥包括对称加密的密钥或非对称加密的密钥。
[权利要求 19]
如权利要求18所述的方法,其中,所述对称加密的密钥包括seal密钥。
[权利要求 20]
如权利要求18所述的方法,其中,所述seal密钥在第一区块链节点的SGX通 过远程证明后由密钥管理服务器发送。
[权利要求 21]
一种区块链中实现隐私保护的方法,包括: 第一区块链节点接收经过加密的包含智能合约的交易,所述智能合约的代码中包括通过隐私标识符标明的合约状态; 第一区块链节点解密所述交易中的所述智能合约的代码; 第一区块链节点在可信执行环境中执行解密的所述智能合约的代码,并在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[权利要求 22]
如权利要求21所述的方法,其中,第一区块链节点接收的交易中的智能合约,包括: 用户在第一区块链节点上用高级语言编写的智能合约;或, 用户在客户端上用高级语言编写的智能合约;或, 所述客户端通过第二区块链节点发来的交易中的智能合约。
[权利要求 23]
如权利要求22所述的方法,其中,对于用户在第一区块链节点上用高级语言编写的智能合约,第一区块链节点接收所述收包含智能合约的交易后,还包括: 采用编译器对所述高级语言编写的智能合约进行编译,生成字节码。
[权利要求 24]
如权利要求22所述的方法,其中,对于用户在客户端上用高级语言编写的智能合约,用户在客户端上书写智能合约后,所述客户端还采用编译器对高级语言编写的智能合约进行编译,生成字节码,进而将字节码形式的智能合约发送至第一区块链节点; 相应地,所述第一区块链节点接收包含智能合约的交易,其中的智能合约为字节码形式的智能合约。
[权利要求 25]
如权利要求22所述的方法,其中,对于用户在客户端上用高级语言编写的智能合约,用户在客户端上书写智能合约后,将高级语言编写的智能合约发送到第一区块链节点; 相应地,所述第一区块链节点接收包含智能合约的交易,其中的智能合约为高级语言形式的智能合约; 所述方法还包括: 第一区块链节点采用编译器对所述高级语言编写的智能合约进行编译,生成字节码。
[权利要求 26]
如权利要求22所述的方法,其中,所述客户端通过第二区块链节点发来的交易中的智能合约,包括字节码形式的智能合约或用高级语言编写的智能合约。
[权利要求 27]
如权利要求26所述的方法,其中,对于用高级语言编写的智能合约,第一区块链节点接收所述收包含智能合约的交易后,还包括: 采用编译器对所述高级语言编写的智能合约进行编译,生成字节码。
[权利要求 28]
如权利要求23-27任一项所述的方法,其中,所述高级语言形式的智能合约中包括通过第一隐私标识符标明的需要进行隐私保护的合约状态,所述字节码形式的智能合约中包括通过第二隐私标识符标明的需要进行隐私保护的合约状态; 所述第一隐私标识符与第二隐私标识符相同或存在对应关系。
[权利要求 29]
如权利要求21所述的方法,其中,第一区块链节点接收的经过加密的包含智能合约的交易,所述加密方式采用对称加密方式或非对称加密方式,或采用对称加密结合非对称加密的方式。
[权利要求 30]
如权利要求29所述的方法,其中, 对于包含智能合约的交易用对称加密的私钥加密,第一区块链节点用对应的对称加密的私钥解密所述交易得到所述智能合约的代码;或, 对于包含智能合约的交易用非对称加密的公钥加密,第一区块链节点用对应的非对称加密的私钥解密所述交易得到所述智能合约的代码。
[权利要求 31]
如权利要求29所述的方法,其中,所述对称加密结合非对称加密的方式,包括数字信封加密方式。
[权利要求 32]
如权利要求31所述的方法,其中,对于采用对称加密算法的私钥加密包含智能合约的交易,并用非对称加密算法的公钥加密对称加密算法中采用的私钥: 第一区块链节点采用非对称加密算法的私钥进行解密得到对称加密算法的私钥,并用所述对称加密算法的私钥解密得到交易内容。
[权利要求 33]
如权利要求31或32所述的方法,其中,所述对称加密算法的公钥,由加密方与第一区块链节点协商得到,或由密钥管理服务器发送得到。
[权利要求 34]
如权利要求32所述的方法,其中,所述对称加密算法的公钥由加密方生成,密钥管理服务器通过远程证明将所述非对称加密算法的私钥发送至第一区块链节点的围圈,将所述非对称加密算法的公钥发送至所述加密方。
[权利要求 35]
如权利要求21所述的方法,其中,所述智能合约包括创建和/或调用智能合约。
[权利要求 36]
如权利要求21所述的方法,其中,所述数据库存储于持久性存储介质。
[权利要求 37]
如权利要求36所述的方法,所述持久性存储介质包括磁盘、软盘或通电后可恢复数据从而可以持久存储的内存。
[权利要求 38]
如权利要求21所述的方法,其中,所述密钥包括对称加密的密钥或非对称加密的密钥。
[权利要求 39]
如权利要求38所述的方法,其中,所述对称加密的密钥包括seal密钥。
[权利要求 40]
如权利要求39所述的方法,其中,所述seal密钥在第一区块链节点的SGX通过远程证明后由密钥管理服务器发送。
[权利要求 41]
如权利要求1或21所述的方法,其中,所述可信执行环境包括Intel SGX或AMD SEV或ARM Trustzone。
[权利要求 42]
一种区块链中实现隐私保护的系统,包括客户端和第一区块链节点,其中: 客户端用于将包含智能合约的交易加密,并将加密后的所述交易发给第一区块链节点,所述智能合约的代码中包括通过隐私标识符标明的合约状态; 第一区块链节点用于解密所述交易中的所述智能合约的代码,在可信执行环境中执行所述智能合约的代码,在将所述隐私标识符标明的合约状态写入数据库时,用密钥加密。
[权利要求 43]
如权利要求42所述的系统,其中,对于高级语言形式的智能合约中包括通过第一隐私标识符标明的需要进行隐私保护的合约状态,所述字节码形式的智能合约中包括通过第二隐私标识符标明的需要进行隐私保护的合约状态;所述第一隐私标识符与第二隐私标识符相同或存在对应关系。
[权利要求 44]
一种区块链中实现隐私保护的节点,包括: 接收模块,用于接收经过加密的包含智能合约的交易,所述智能合约的代码中包括通过隐私标识符标明的合约状态; 解密模块,用于解密所述交易中的所述智能合约的代码; 执行模块,用于在可信执行环境中执行解密的所述智能合约的代码; 写入模块,用于在执行模块执行解密的所述智能合约的代码后,将所述隐私标识符标明的合约状态写入数据库时用密钥加密; 数据库,用于存储写入的用密钥加密的合约状态。
[权利要求 45]
如权利要求44所述的节点,其中,所述高级语言形式的智能合约中包括通过第一隐私标识符标明的需要进行隐私保护的合约状态,所述字节码形式的智能合约中包括通过第二隐私标识符标明的需要进行隐私保护的合约状态; 所述第一隐私标识符与第二隐私标识符相同或存在对应关系。
[权利要求 46]
如权利要求44所述的节点,其中,所述对称加密的密钥包括seal密钥。

附图

[ 图 1]   [根据细则26改正 10.12.2019] 
[ 图 2]   [根据细则26改正 10.12.2019] 
[ 图 3]   [根据细则26改正 10.12.2019] 
[ 图 4]
[ 图 5]
[ 图 6]
[ 图 7]