我们如何在Hyperledger Fabric v1.0中使用多个通道提供来源跟踪的同时实施隐私



在Hyperledger Fabric v0.6中,可以实现一个供应链应用程序,允许追踪来源并避免双重支出(即分发/销售物品超过其拥有的数量),从而避免假冒。 例如,当供应商向分销商提供 500 个单位的物料时,此数据存储在分类帐中。 分销商可以通过调用"转移"函数将指定数量的物料分发给特定经销商。 传递函数执行以下操作:

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

通过这种方法,分销商不能分发比其拥有的更多(即双花)(例如,分发假冒/走私物品)。

此外,消费者可以通过查看分类账来追踪来源(例如,商品是从经销商 1 购买的,该商品来自分销商,来自供应商)。

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

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

但是,由于经销商(即经销商1和经销商2)无法访问供应商和分销商的渠道/分类账,因此经销商不知道供应商向分销商提供的实际数量。 例如,如果供应商仅向分销商提供了 500 个数量,则分销商可以向经销商声明它从供应商处采购了 1000 个数量。 通过这种方法,将无法避免双重支出/伪造。

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

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

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

链码可以跨通道读取,但只是很弱,并且它们可能不会使此读取的内容成为提交的意外事件。 同样,跨渠道的交易也没有排序,这会产生其他复杂性。

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

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

考虑公司 A、B 和监管机构 R 的场景。 已知 A 可以控制通道 A-R 中的资产 Q,而 B 希望安全地控制通道 A-B-R 中的资产 Q。

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

A
  1. 建议将 Q 锁定在 A-R 中的序列 0 以通道 A-B-R。 接受并承诺。
  2. A
  3. 提出 A-B-R 序列 0 处存在 Q,由 R 认可(R执行跨通道读取到 A-R 以验证资产是否已锁定到 A-B-R)。 接受并承诺。
  4. A 建议在序列 0 处将 Q 转移到 A-B-R 中的 B。 所有人都检查序列 0 处的 Q 记录是否存在,并将其包含在读取集中,然后将其设置为写入集中的序列 1。

绿色路径完成。 现在,假设B决定不购买Q,而A希望将其出售给A-C-R中的C。 我们开始假设(1),(2)已经完成了上面。

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

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

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

这里的关键是,B相信监管机构会强制执行Q不能在A-R中解锁,直到Q在A-B-R中被释放。 跨通道的无序读取是可以的,只要包含单调类型序列号以确保资产锁定在正确的版本即可。

目前,在Hyperledger Fabric 1.0中,没有直接的方法可以在两个不同的渠道中提供来源。支持此类方案的方向很少:

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

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

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

v1.2开始,

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

现在,在您的情况下,您可以创建经销商数据的子集,使其成为特定实体的私有数据,而无需创建单独的渠道。 更多信息参考: 织物文档.

最新更新