fabric 私有数据学习笔-- 概念篇

时间:2024-04-13 19:47:47

 

还是先上这篇博客我们希望能够解决什么问题的问题点:

1:私有数据是在组织级别还是节点级别的?

2:私有数据的场景。

3:私有数据的特点。

4:技术上是如何实现的。

 

fabric 的私有数据,它在多个参与者之间引入了数据隐私的概念,而不需要为彼此创建单独的通道。

私有数据创建起源:

如果某个通道上的一个组织需要使某些数据对该通道上的其他组织保持私有,一般情况下,我们可以选择创建一个新通道,其中只包含需要访问数据的组织。但是,在每种情况下创建单独的通道都会产生额外的管理开销(维护链代码版本、策略、msp等),并且不允许所有渠道参与者都看到交易同时又保留一部分交易的私有性。

因此,从v1.2开始,Fabric提供了创建 私有数据集合的功能,该功能使渠道上已定义的组织子集能够认可,提交或查询私有数据,而无需创建单独的渠道。

什么是私人数据收集?

  1. 实际的私有数据通过gossip 协议在仅授权查看该数据的组织的peer 节点间传递,此数据存储在peer 节点的私有数据库中(有时称为“边”数据库或“ SideDB”)。orderer 节点不在此处,并且看不到私有数据。请注意,设置gossip 协议时,需要设置锚点对等点,以引导跨组织通信。
  2. 该数据的哈希值,背书,排序并写入通道中每个对等方的分类账中。hash用作事务处理的证据,用于状态验证,并可用于审计目的。

下图说明了被授权拥有私有数据的peer节点的分类账内容,和没有私有数据的peer 节点的账本内容。

fabric 私有数据学习笔-- 概念篇

如果私有数据收集成员发生争议或想要将资产转让给第三方,则收集成员可以决定与其他方共享私人数据。然后,第三方可以计算私有数据的哈希值,并查看其是否与通道分类帐上的状态匹配,从而证明该状态在某个时间点存在于集合成员之间。

在这里我们使用一个官方的例来具体说明私有数据的适用场景。

示例说明:

示例是一个农产品销售的场景。我们知道在整个农产品销售环节涉及以下几个角色,我们在这里把这些角色定义为相应的组织

  • 农民在出售商品
  • 分销商将货物移至国外
  • 托运人在各方之间移动货物
  • 批发商从分销商处购买商品
  • 零售商从托运人和批发商那里购买商品

分销商可能希望在农民托运人之间以及与批发商之间使用私有交易,保证她们之间的交易不被别的组织看到。

同时批发商还可能希望与零售商托运人 有私有数据关系 。

并且这五个组织还存在共有的数据,所以此时使用私有数据集合是最合适的了。

在这个场景里我们需要多个私有数据集合(PDC),分别是

  1. PDC1:分销商农民托运人
  2. PDC2:分销商批发商
  3. PDC3:批发商零售商托运人

fabric 私有数据学习笔-- 概念篇

使用此示例,分销商拥有的节点将在其分类帐中具有多个私有数据库,其中包括来自分销商农民托运人关系以及 分销商批发商关系的私有数据 。由于这些数据库与保存通道分类帐的数据库是分开的,因此有时将私有数据称为“ SideDB”。

fabric 私有数据学习笔-- 概念篇

从上面的示例我们可以更加清楚的看到1

1:私有数据是组织级别的。

2 :一个组织可以参与多个私有数据。

带有私人数据的交易流程

当在链码中引用私有数据集合时,proposed , endorsed 和 committed 将事务提交给分类帐,事务流程会略有不同,以保护私有数据的机密性。

有关不使用私有数据的交易流的详细信息,本章暂不介绍。

  1. 客户端application提交提案请求到endorsed(背书)节点,调用链码(读取或写入私有数据),这些节点是集合的授权组织的一部分。私有数据或用于链码生成私有数据的数据将在投标的transient 字段中发送。
  2. endorsed(背书)节点模拟交易并将私有数据存储在(peer节点本地的临时存储中)。他们根据收集策略通过gossip将私有数据分发给授权的节点。
  3. endorsed(背书)节点将提议响应与公共数据一起发送回客户端,其中包括私有数据**和值的哈希。没有私有数据发送回客户端
  4. 客户端application将交易提交给orderer 排序(带有私有数据的哈希值),该orderer 排序服务将按正常方式加入到块中。具有私有数据hash值的块分配给所有peer 接待你点。这样,通道上的所有peer 节点都可以以一致的方式用私有数据的hash值验证事务,而无需知道实际的私有数据。
  5. 在区块共识阶段,授权peer节点使用收集策略来确定他们是否有权访问私有数据。他们首先检查本地数据库,以确定在链码认可时是否已经接收到私有数据。如果没有,他们将尝试从另一个具有相应权限的peer 节点提取私有数据。然后,将根据公共块中的哈希来验证私有数据,并提交事务和该块。验证/提交后,私有数据将移动到私有状态数据库和私有写入集存储的副本中。

以上就是fabric 私有数据的简单介绍。

回到我们最开始的问题。

1:私有数据是属于组织还是节点?

虽然私有数据是在节点间传输和保存的,但它确是属于组织。

2:私有数据的场景。

上面的农产品就是一个很有代表性的场景。

     3:私有数据的特点。

     在不新建channel 的情况下,使得同一channel间,可以建立多个集合,实现数据私有的功能

     4:技术上是如何实现的。

     如果详细了解了fabric 的私有数据我们可以发现,它的私有数据主要通过两个点来实现。1:私有数据直接通过gossip 协议,在集合间传递。2:背书阶段不返回私有数据具体信息,只返回私有数据的hash值,所以在排序阶段,没有参与私有集合的组织也不会得到对应的私有数据信息。

这一章我们只介绍了fabric 私有数据的概念性的信息,下一章我们详细介绍如何使用fabric 私有数据。