【问题标题】:Implement inter-channel security among the peers within the same channel in Hyperledger Fabric V1.0在 Hyperledger Fabric V1.0 中实现同一通道内的对等方之间的通道间安全性
【发布时间】:2017-09-21 19:52:03
【问题描述】:

我已经按照Building Your First Network 的步骤在本地成功创建了一个 Hyperledger Fabric v1.0 网络,并使用fabric-sdk-java 从我的 java 应用程序与该网络通信。
在这里,它使用 cryptogen 工具创建了证书,并且能够通过参与同一通道的每个对等方调用/查询链代码。


我的实现是这样的:
我有四个组织 Org1、Org2、Org3 和 Org4,每个组织都有一个对等方。 当 Org1 使用链码 C1 创建数量为 100 的资产 A1 时,它必须在节点之间共享该资产,例如

Org2.peer0 A1:数量为 40
Org3.peer0 A1:数量为 30
Org4.peer0 A1:数量为 20
剩下的 10 个将是 可用于 Org1.peer0

所有这些对等点都加入了同一个频道 channel1。 我的要求是

如果 Org1 尝试查询 Org2 的数据:错误
如果 Org1 尝试查询 自己的数据:返回对应数量的Asset。

目前它允许查询通道中所有对等点的所有数据。为了保持一个组织的资产不被其他组织隐藏,最好的方法是什么?

【问题讨论】:

    标签: blockchain hyperledger-fabric hyperledger


    【解决方案1】:

    我认为您混淆的根源在于您将应用程序逻辑与通常在链代码中实现的业务合同逻辑混合在一起。

    假设您想在 4 个不同的参与方之间建立 Fabric 网络,您需要定义一个规则来定义您将如何在这些参与者之间分割/分配资产。现在,让我们把同行放在一边。在您的链代码中,您对资产的概念以及用户的概念进行编码以避免混淆,我们称他们为人。所以你有 4 个人:Alice、Bob、Charlie 和 John,业务规则规定一旦 Alice 提交资产,它必须分别按照 40%、30%、20% 和 10% 分配。

    接下来,继续说 Alice 在 Org1 工作,Bob 在 Org2 工作,Charlie 在 Org3 工作,John 在 Org4 工作。现在您可以实现一个链码,该链码将根据提交交易的人应用业务规则。此外,您可以根据提交者身份实现 ACL,从而防止 Bob 查询假设 John 的余额。

    合理的问题是为什么我需要 4 个对等方来实现如此简单的逻辑。由于您只能部署一个带有链码的对等点,因此为所有 4 个组织配置的通道,您所需要的只是发送交易提案以调用链码。

    这种方法的注意事项很明显,您需要决定哪个组织将托管和运行此对等点和链代码,因此所有 4 个组织并不真正相互信任,他们希望托管自己的对等点并调用链代码对抗自己的同龄人。为了防止每个组织相互欺骗并减少对抗性/非确定性行为的影响,他们将就背书政策达成一致,这实际上将确保其他组织的同行在模拟期间也收到与您相同的结果。

    现在回到您的问题,对等节点用于针对当前状态模拟交易并对结果进行签名,将结果发送回客户端,客户端根据策略汇总背书,并将结果提交给排序服务,排序服务切割区块并将其交付给节点,它将验证区块中交易的正确性,并最终将它们提交到账本更新状态。

    因此,您的链代码应该对您将在其中分发资产的客户/用户/个人的概念进行编码,这些用户可以映射回客户端应用程序(现实世界的用户),这些应用程序可能注册到不同的组织,因此拥有不同的证书由适当的 org CA 签署。最后,您将能够利用链代码的GetCreator API 来了解哪个客户端调用了链代码,并根据您定义的业务逻辑应用业务逻辑和访问控制。

    很抱歉让我的答案太长,但总结一下。您的应用程序/服务将基于两层:第一层是应用层——映射到组织的用户,第二层是持有分类帐和部署链码的对等点——用于模拟和执行交易。因此,您将有 4 个对等点和 4 个客户端,它们将向对等点提交交易,您的逻辑将基于客户端身份而不是对等点。

    希望我的解释对你有意义;)

    【讨论】:

    • 这个解释帮助我获得了更多关于实现的信息。 GetCreator API 真的很好,我还没有注意到它,并帮助获取了 creatorName。是的,我理解您对为什么使用 4 个同伴的问题。实际上,在我的演示概念中,所有这些同行都来自不同的公司,并且只有一家公司将始终创建资产,其余的公司将在那里获得该资产的份额。因此,A 将始终创建资产 A1,而 B、C 和 D 将按照说明获得份额。
    • 我正在向所有四个同行发送相同的提案,因为他们都是背书的同行。这里我的一个困惑是每个节点都根据自己的签名保存分类帐数据,或者所有分类帐将使用相同的签名来加密数据?
    • 但请注意,客户端将创建资产,我的意思是具有组织 A 的有效证书的客户端。在链代码中,您必须为这 4 个共享资产所有者构建额外的抽象。然后,您可以根据创建者信息实施 ACL,并限制只有组织 A 的客户端可以创建资产,而其他组织将能够查询自己的状态。事实上,有 4 个对等节点中继到信任模型,并且组织愿意拥有自己的分类账副本,背书策略将帮助您保持一致的状态。
    • 是的,现在非常接近重点。在我当前的链代码中,如果 A 传递资产 A1 以添加分类帐,它将执行一些链代码逻辑并创建 3 个具有基于预定义 % 除法数量的资产副本,然后将每个资产 json 写入具有单独密钥的分类帐,其中包含公司 ID。 Querying时chaincode会根据传入的company_id创建key并获取对应的value。
    • 使用 GetCreator API 从客户端证书中获取 org id,然后允许查询与证书的 org id 匹配的 id。因此,如果来自 org B 的客户端将传递 org C 的 ID,您可以确保在您的链代码中限制此类查询并返回错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2018-06-19
    • 2022-08-09
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多