Hyperledger Fabric Private data

两种解决方案

通道上有几个组织,如果某些组织想要做一些事,这些事只能他们知道,对通道上的其它组织保密,那么一个直接的做法是创建一个新的通道,只让具有隐私数据访问权的组织加入,但建立单独的通道会产生额外的管理开销。

另一种办法就是使用 Private Data Collections

private data collection

一个 Collection 包括两部分:

  1. 私有数据本身:通过gossip协议在有权访问的组织节点之间传输(peer-to-peer),因此需要更新每个组织的锚节点,并且需要在对应的peer节点配置CORE_PEER_GOSSIP_EXTERNALENDPOINT以实现跨组织通信此数据存储在被授予私有数据访问权限的私有状态数据库(有时称之为边数据库SideDB),可以通过授权peer的链码进行访问。过程中排序节点不参与,并且不会看到数据。
  2. 数据的哈希值:通过背书、排序写入通道中每个节点的账本中,hash作为交易的证据用于状态验证和审计

下面的图表展示了一个被授权拥有私有数据的节点 peer 0 和一个没有被授权拥有私有数据的节点 peer 1 的账本内容。在这里插入图片描述
如果私有数据集中的节点间发生争议或想要将资产转让给第三方。 第三方可以计算私有数据的哈希值,并查看其是否与账本中的 hash 一致,从而证明。

交易流程

当在链码中引入私有数据集合时,交易流程会略有不同,以保护私有数据的机密性。有关不使用私有数据的交易流程的详细信息,请参考文档

  1. 客户端向集合中的背书节点提交一个提议,调用链码函数(读取或写入私有数据)。私有数据或用于生成私有数据的数据,在proposal的一个名为transient的字段中。
  2. 背书节点模拟交易并将私有数据存储在一个临时数据存储库(transient data store)。它们基于该隐私数据集的策略,通过八卦协议将私有数据分发给授权的 peer。
  3. 背书节点将提案响应发送回客户端。 提案响应包括被背书的读/写集,其中包括 public data,以及任何私有数据键和值的哈希。 没有私有数据发送回客户端。参考有关详细信息。
  4. 客户端将交易(包括带有私有数据哈希的响应)提交给排序服务。 带有私有数据哈希的事一样被切进块中。 具有私有数据哈希的块将分发给所有节点。 这样,通道上的所有节点都可以以一致的方式用私有数据的哈希值验证交易,而无需知道实际的私有数据是什么。
  5. 在区块 commit 时,授权的peer 使用隐私数据集策略来确定他们是否被授权访问私有数据。 如果是的,他们将首先检查其本地的transient data store,以确定在背书(背书节点)时是否已接收到私有数据。如果没有,他们将尝试从另一个授权的节点拉取私有数据。 然后,他们将根据public block中的哈希来验证私有数据,并commit该交易和该块。validation/commit 后,私有数据将被写入 their copy of the private state database and private writeset storage。 然后从transient data store中删除私有数据。

在这里插入图片描述

清除私有数据

对于有些非常敏感的数据, 参与的各方可能也想要去定期清除这些数据,有时候也可能是政府条例的要求。只保留一个 hash 在链上。

为了支持这些用例,如果私有数据没有一些特殊的相关配置,则可以清除它。然后就不能从链码查询已清除的私有数据。

在这里插入图片描述

参考文档

[1] 官方文档

猜你喜欢

转载自blog.csdn.net/TBBetter/article/details/107530512
今日推荐