【问题标题】:Why hash of private data should be shared on hyperledger-fabric?为什么私有数据的散列应该在超级账本结构上共享?
【发布时间】:2020-04-24 14:42:11
【问题描述】:

我读过 https://hyperledger-fabric.readthedocs.io/en/release-2.0/private-data/private-data.html 这么说

“该数据的哈希值,经过背书、排序和写入通道上每个对等方的分类帐。哈希值用作交易的证据,用于状态验证,并可用于审计目的。 " .

但是,我认为交易的签名足以证明合同已达成一致。

为什么数据的哈希值应该在每个节点之间共享?

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

    私人交易不像公共交易那样存储在链中的区块中。所有加入通道的节点共享同一个通道链。因此,如果私有交易被正常存储在链中,每个对等点(甚至是那些来自该交易的非指定组织的节点)都可以读取私有交易参数(并重建其他人的私有状态)。为了避免这种情况,基本上,哈希值存储在块中的位置,以便共享私有数据的组织仍然可以检查完整性。


    编辑:

    让我们看看,如果你仔细阅读https://hyperledger-fabric.readthedocs.io/en/release-2.0/private-data/private-data.html#transaction-flow-with-private-data,你会发现私有数据在任何时候都没有签名(读取集、写入集、输入和输出都没有)。在第 3 步中,仅在其散列(嵌入在交易中)上生成签名。没有其他的。私有数据(数据,而不是交易)通过 gossip 协议简单地分发,并临时存储在临时数据存储中(第 2 点),在第 5 点提交。私有数据的唯一证据是哈希(即嵌入交易并签名)。 gossip 协议有其安全机制,但它不提供证据或保证交易顺序。

    现在,以后来恶意组织单方面改变其私有状态以获取某种利益为例。链中的哈希将是解决与其他组织的争议的唯一证据。除了该散列之外,没有其他关于商定的有效值(和执行顺序)的证据。对等方未签署纯文本私有数据。

    Fabric 就是这样。这是有道理的。请记住,有必要保证数据的完整性和交易执行的顺序,因此在某些时候必须让排序者(第 4 点)参与来确定顺序(在大多数情况下,交易确实改变了产品)而不披露真实数据。

    【讨论】:

    • 我同意每个同行都不应该阅读私人交易。但是,在我看来,仅与目标节点和私有状态共享原始交易就足够了。是否有必要与每个对等点和通道状态共享哈希。
    • 但是区块链的优势之一是有一个确保完整性的区块链(正如它的名字所说)。如果链中绝对没有私人交易的痕迹(甚至您在没有订购服务干预的情况下继续进行),我们就不能谈论区块链。这种方法不仅被 Fabric 使用。 Quorum(支持隐私的以太坊的一个分支)的工作方式非常相似。
    • 我的问题有点清楚了。谢谢你。 “实力”当然很高。我没有考虑实力。但是,我觉得有些不相容。也许,为了真正确信共享哈希的必要性,我需要一些可以通过共享哈希来防止的攻击示例,如果不共享哈希则无法防止。
    • 谢谢!非常详细的完美答案。
    【解决方案2】:

    我的感觉是,当只共享签名时,其他对等方如何验证签名的用途?反之亦然,如何验证它是否实际上是由声称的所有者签署的?因此,我们共享交易的哈希 + 该哈希的签名。现在可以使用该所有者的公共证书来验证此签名。此外,由于交易被散列,它仍然是私有的,但分类帐(相互链接的块)在所有对等点之间是相同的。

    【讨论】: