我们如何在Hyperledger Fabric v1.0中使用多个渠道跟踪来源追踪时强制实施隐私?

时间:2017-07-04 02:49:21

标签: hyperledger hyperledger-fabric

在Hyperledger Fabric v0.6中,可以实施供应链应用程序,允许跟踪出处并避免双重花费(即,分配/销售项目比它更多),从而避免伪造。例如,当供应商向分销商提供500个单位的项目时,该数据存储在分类帐中。分销商可以通过调用"转移"将指定数量的商品分发给特定的代理商。功能。传递函数执行以下操作:

  • 检查分销商是否有足够数量的物品分配给特定经销商(即,如果要转移的数量< =当前数量)
  • 更新分类帐(即扣除分销商的当前数量并将其添加到经销商的当前数量)

采用这种方法,经销商不能分配更多(即双重支出)(例如,分发假冒/走私物品)。

此外,消费者可以通过查看分类帐来追踪出处(例如,来自经销商的reseller1购买的物品,来自供应商)。

但是,由于它使用单个分类帐,因此隐私是一个问题(例如,经销商2可以查看经销商1订购的商品数量等)。

建议的实施隐私的解决方案是在Hyperledger Fabric v1.0中使用多个渠道。在这种方法中,供应商和分销商使用单独的渠道/分类帐。同样,分销商和经销商1使用单独的渠道/分类帐,分销商和经销商2使用另一个单独的渠道/分类帐。

然而,由于经销商(即经销商1和经销商2)无法访问供应商和分销商的渠道/分类帐,因此经销商不知道供应商向分销商提供的实际数量。例如,如果供应商仅向分销商提供了500个数量,则分销商可以向经销商索取从供应商处采购1000个数量的经销商。采用这种方法,双重消费/假冒将无法避免。

此外,如何实施物源追踪?消费者是否可以访问所有渠道/分类账?如果是这种情况,则隐私再次成为一个问题。

鉴于此,我们如何在Hyperledger Fabric v1.0中使用多个渠道,同时允许跟踪来源并禁止双重支出?

3 个答案:

答案 0 :(得分:5)

正如Artem指出的那样,今天没有直接的方法可以做到这一点。

Chaincodes可以跨通道读取,但只是弱读取,并且它们可能不会使读取的内容成为提交的偶然性。同样,跨渠道的交易也没有订购,这会产生其他复杂情况。

但是,只要两个渠道中至少有一个受信任的参与者,就应该可以安全地跨渠道移动资产。您可以将此视为监管或审计员角色。

要实现这一点,应用程序基本上必须在结构上实现互斥锁,以确保资源不会同时迁移到两个不同的通道。

考虑公司A,B和监管机构R的情况。众所周知,A控制通道A-R中的资产Q,而B希望安全地控制通道A-B-R中的资产Q.

为了安全地完成此操作,A可以执行以下操作:

  1. A建议将A-R中序列0的Q锁定到信道A-B-R。接受并承诺。
  2. A提出在A-B-R中序列0处存在Q,由R认可(其执行对A-R的交叉信道读取以验证资产被锁定到A-B-R)。接受并承诺。
  3. A建议在序列0中将Q转移到A-B-R中的B.所有检查序列0的Q记录是否存在,并将其包含在其读集中,然后将其设置为其写集中的序列1。
  4. 绿色路径完成。现在,让我们说B决定不购买Q,A希望将其卖给A-C-R的C.我们开始假设(1),(2),已完成上述。

    1. A建议从渠道A-B-R中考虑移除资产Q. R在序列0处读取Q,在序列1处写入,并将其标记为不可用。
    2. A建议解锁A-R中的资产Q. R在A-B-R中执行交叉通道读取并确认序列为1,认可A-R中的解锁。
    3. A建议在A-C-R中序列1存在Q,并按(1)
    4. 进行

      攻击路径,假设(1),(2)再次完成。

      • A提出在A-C-R中序列0处存在Q. R将读取A-R并发现它未锁定到A-C-R,不会认可。
      • A建议在A-B-R中的交易将控制权移至B后,从A-R中考虑移除资产Q.移动和解锁交易都在同一版本中读取该值,因此只有一个会成功。

      这里的关键是,B信任监管机构强制执行Q在A-B-R中释放Q之前无法在A-R中解锁。只要您包含单调类型的序列号以确保资产被锁定在正确的版本,无序读取就可以在各个通道中完成。

答案 1 :(得分:3)

目前还没有直接的方法在Hyperledger Fabric 1.0中的两个不同渠道提供物源。几乎没有方向支持这种情况:

  1. 第一个是能够保留分类帐的部分数据,并在渠道内提供离散隔离,此处描述的工作项目为:FAB-1151

  2. 此外,还建议添加对私人数据的支持,同时保持证明存在的能力,并声明资产的所有权已在邮件list中发布。

  3. 您目前可以做的是利用应用程序端加密来提供隐私,并将所有相关交易保留在同一个渠道上,例如:相同的分类帐(与v0.6中的方法非常相似)。

答案 2 :(得分:0)

v1.2 开始,

  

Fabric提供了创建私有数据集合的功能,   允许渠道上已定义的组织子集的能力   认可,提交或查询私有数据,而无需创建   单独的频道

现在,就您而言,您可以创建转销商数据的一个子集,以对特定实体私有,而无需创建单独的渠道。 有关更多信息,请参见:Fabric Doc