Quorum私有交易

简介

Quorum是一个联盟链方案,由摩根大通开发的企业级分布式账本和智能合约平台,它是在以太坊(Ethereum)的基础上开发的,提供私有智能合约执行方案,并满足企业级的性能要求。适用于需要高速交易以及高吞吐量处理联盟间进行私有交易的应用场景,主要是为了解决区块链技术在金融及其他行业应用的特殊挑战而设计。

Quorum是基于以太坊的go-ethereum开发的,在此基础上做了部分改动,本文围绕私有部分进行讨论,主要是添加了交易与合约的隐私性,对于一笔交易来说,只有交易的相关方才能看到交易的细节,非相关方是看不到交易细节的。

1.1 构成

在这里插入图片描述
从上图可以看出,Quorum的隐私性设计实现主要由两部分构成。
Transaction manager:允许访问私有交易的加密交易数据、管理本地数据存储以及与其他交易管理器的通信。它做隐私数据的数据层,提供数据的安全访问并利用Enclave来实现数据的安全加密。
Enclave:为了解决区块链中记帐的真实性和安全性而实现的一个模块。它通过事务隔离和特定的加密措施来提供并行操作,大大提高了性能。隐私数据的安全处理基本都是通过Enclave来实现的。

1.2 Tessera

Tessera是一个用Java语言编写的开源的私有交易管理器。它的主要功能是:

生成和维护私钥/公钥对
自我管理和发现网络中的所有节点
提供用于在Tessera节点之间进行通信的API,以及用于与启用了隐私功能的以太坊客户端进行通信的API。

Quorum使用Tessera作为私有交易管理器private transaction manager来实现私有交易,借此实现以下功能:

存储并允许访问加密的交易数据
与其他 Tessera 节点交换加密的有效负载
无权访问私钥,保护私钥的安全性
将Enclave用于加密功能,私有交易管理器本身可以选择托管给Enclave
可以进行负载均衡

1.2 Enclave

Enclave就是为了解决区块链中记帐的真实性和安全性而实现的一个模块,通过隔离管理加密和解密,为私有交易管理器提供加密功能。私有交易管理器和Enclave之间的职责分离提高了性能并增强了隐私性。

1.3 公有/私有状态

Quorum中支持两种交易状态:

公共状态,可由网络中的所有节点访问
私有状态,只能由具有相应权限的节点访问

公共状态交易具有未加密的payload,而私有状态交易具有加密的payload。

节点只有在可以访问和解密payloads时才能执行私有交易。所有节点共享通过公共交易创建的公共状态数据库,并在本地具有独立的私有状态数据库。

上述只是一个理论上的概念,实际上Quorum并未引入新的交易类型;只是在以太坊交易模型的基础上扩展包含一个可选的privateFor参数,这个私有参数会使得Quorum把这一类交易当做私有交易,另外加入一个IsPrivate方法来识别交易是否是私有交易类型。

1.4 私有增强

除了标准的私有 (SP) 之外,Quorum 还提供三种私有增强功能:
Counter-party protection (PP)
Mandatory party protection (MPP)
Private state validation (PSV)

1.4.1 Counter-party protection

Counter-party protection可防止非私有交易参与者在不使用访问控制的情况下与私有合约进行交互。

例如,私有合约部署在节点 1 和节点 2 之间。在没有Counter-party protection的情况下,如果节点 3 发现私有合约地址,它可以向节点 2 发送一个设置了privateFor参数的交易。该交易不会应用于节点 3 的私有状态数据库,因为节点 3 不是私有交易的参与者,但是会应用于节点 2 的私有状态数据库。

1.4.2 Mandatory party protection

Mandatory party protection继承了Counter-party protection的所有功能,还允许将一个或多个收件人定义为私有合约的强制接收方。强制接收方包含在合约的所有后续交易中,并且具有完全私有状态,而普通接收方可能仅具有合约的部分状态。

1.4.3 Private state validation

Private state validation通过确保合约的任何私有交易均发送给所有参与者来防止交易状态的不同。

例如,私有合约部署在节点 1 和节点 2 之间。如果没有Private state validation,节点 1 可以将交易发送到私有合约,设置privateFor为 [] 。交易会更改节点1的私有状态数据库,但不更改节点2的私有状态数据库,这就会导致1和2的私有状态不再匹配。使用Private state validation时,来自节点1且privateFor为 [] 的交易将被拒绝,并且仅当 privateFor同时包含节点1和2时,才会处理该交易。

Private state validation在所有参与者之间共享完整的参与者列表,并根据所有后续交易进行验证。

1.5 私有交易流程

Quorum的交易有两类Public Transaction和Privat Transaction,也就是公共交易类型和私有交易类型。在实际的交易中,前者完全兼容以太坊的交易。而在后者的隐私交易中,在原有以太坊的交易模型上,进行了部分修改。

在这里插入图片描述
这是官方网站上的私有交易流程图,这个图中,一笔交易与节点A和节点B有关系,但是和节点C没有关系。

在此作一下简单说明:
1、用户A将隐私交易发送到Quorum节点,节点指定交易的payload,并为A和B指定privateFor参数为A和B的公钥。

2、节点将Tx发送到对应的交易管理器Tessera并存储相关的交易数据。

3、Tessera调用加密的Enclave模块相关函数请求对Tx加密。

4、节点A的Enclave检验A的私钥,如果验证通过,就进行下列动作:

第一步,生成一个对称密钥和随机值(使用对称密钥的作用是为了加快速度)。
第二步,使上一步生成的密钥加密Tx及相关内容。
第三步,由SHA3-512来计算加密后的Tx的内容的hash值。
第四步,遍历交易方列表(此处为A和B)使用第一步中产生的密钥对第一步中的随机值加密,然后生成一个新的值。
第五步,将上述以、二、三、四步的结果返回给Tessera。

5、A的Tessera使用从Enclave中获取的hash值作为索引把加密后的Tx以及加密后的密钥保存到本地。同时会把hash值,加密后的Tx,密钥这三项通过HTTPS发送给B的交易管理器Tessera。B收到数据后,会进行ACK/NACK的应答。如果A没有收到应答,那么交易不会在网上传播,也就是说,接收人存储通信的payload是网络传播的前提条件。

6、一旦发往B的交易成功,A的Tessera便将hash值返回给其对应的Quorum节点。该节点用hash值来替换原来Tx的交易内容payload。修改Tx的V值为3 或者38(私有交易的标识)。其他节点可以通过这个V值来判断其是否为已加密交易内容的相关私有交易。

7、使用标准的以太坊的通信协议将节点通过P2P方式广播给整个网络。

8、此交易被打包到区块中,并分发到各个网络节点。

9、节点收到这个Tx的区块后,发现这个Tx的V值为37或38。表明这个Tx是私有交易,需要解密,需要调用本地的Tessera,最终决定是否同意这笔交易(使用hash索引查找)。

10、因为节点C节点与该交易无关,所以它只会接收到一个not a recipient的消息,从而忽略这笔交易即C不会更新自己的私有状态数据库。A和B将会在自己的交易管理器Tessera中查找哈希值,识别并同意该交易,然后它们调用对应的Enclave模块,传递已加密交易内容和加密的系统密钥和签名。

11、Enclave模块验证签名,然后使用在Enclave中保存的该用户的私钥解密对称密钥,使用解密的密钥对交易内容进行解密,然后将解密的交易内容返回给Tessera。

12、A和B的交易管理器Tessera将解密后的Tx通过EVM执行。执行完成后将执行结果返回给Quorum节点,并更新Quorum节点的私有状态。

猜你喜欢

转载自blog.csdn.net/woshiyangzhu/article/details/127996622