在 Hyperledger Fabric V1.0 中实现同一通道内节点之间的通道间安全
Implement inter-channel security among the peers within the same channel in Hyperledger Fabric V1.0
我已经按照 Building Your First Network and communicating to this network from my java application using fabric-sdk-java 的步骤在本地成功创建了一个 Hyperledger Fabric v1.0 网络。
这里它使用 cryptogen 工具创建了证书,并且能够 invoke/query 通过参与同一通道的每个对等点进行链码。
我的实现是这样的:
我有四个组织 Org1、Org2、Org3 和 Org4,每个组织都有一个对等体。
当 Org1 使用链代码 C1 创建数量为 100 的资产 A1 时,它必须像
这样在对等方之间共享该资产
Org2.peer0 A1: with quantity 40
Org3.peer0 A1: with quantity
30
Org4.peer0 A1: with quatity 20
And remaining 10 only will be
available for Org1.peer0
所有这些同行都加入了同一个频道 channel1。
我的要求是
If Org1 try to query the data for Org2 : error
If Org1 try to query
its own data: return the Asset with the corresponding quantity.
目前允许查询通道内所有节点的所有数据。为了让它对其他组织隐藏一个组织的资产,最好的方法是什么?
我认为您混淆的根源是您将应用程序逻辑与通常在链代码中实现的业务合同逻辑混合在一起。
假设你想在 4 个不同的参与方之间建立 Fabric 网络,你需要定义一个规则来定义你将如何 split/distributed 这些参与者之间的资产。现在,让我们把同行放在一边。在您的链代码中,您对资产的概念和可能的用户概念进行编码以避免混淆,让我们称他们为人。所以你有 4 个人:爱丽丝、鲍勃、查理和约翰,业务规则规定一旦爱丽丝提交资产,它必须分别根据 40%、30%、20% 和 10% 进行分配。
接下来,继续说爱丽丝在 Org1 工作,鲍勃在 Org2,查理在 Org3,约翰在 Org4。现在你可以实现一个链码,它将根据提交交易的人应用业务规则。此外,您可以根据提交者身份实施 ACL,从而防止 Bob 查询比方说 John 的余额。
合理的问题是为什么我需要 4 个节点来实现如此简单的逻辑。由于您只能有一个部署了链码的对等节点,为所有 4 个组织配置的通道,您所需要的只是发送交易提案以调用链码。
这种方法的警告非常明显,您需要决定将托管哪个组织以及 运行 这个节点和链代码,因此,由于所有 4 个组织并不真正信任彼此,他们希望托管他们拥有同行并针对他们自己的同行调用链码。为了防止每个组织互相欺骗并减少 adversarial/non-deterministic 行为的影响,他们将就背书政策达成一致,这实际上将确保其他组织的同行在模拟期间也收到与您相同的结果。
现在回到你的问题,节点用于模拟当前状态的交易并在结果上签名,将结果发送回客户端,客户端根据策略聚合背书,并将结果提交给排序服务,排序服务切割块并交付将它们发送给对等节点,这将验证块中交易的正确性并最终将它们提交到账本更新状态。
因此你的链码应该编码 clients/users/persons 的概念,你将在其中分配资产,这些用户可以映射回客户端应用程序(真实世界的用户),这些应用程序可能会注册到不同的组织,因此具有由适当的组织 CA 签署的不同证书。最后,您将能够利用链代码的 GetCreator
API 来了解哪个客户端调用了链代码,并根据您定义的业务逻辑应用业务逻辑和访问控制。
很抱歉让我的回答太长,但总结一下。您的 application/service 将基于两层:第一层是应用程序层 - 映射到组织的用户,第二层是持有分类帐和已部署链代码的对等层 - 用于模拟和执行事务。因此,您将有 4 个节点和 4 个客户端,它们将向节点提交交易,您的逻辑将基于客户端身份而不是节点。
希望我的解释对你有意义 ;)
我已经按照 Building Your First Network and communicating to this network from my java application using fabric-sdk-java 的步骤在本地成功创建了一个 Hyperledger Fabric v1.0 网络。
这里它使用 cryptogen 工具创建了证书,并且能够 invoke/query 通过参与同一通道的每个对等点进行链码。
我的实现是这样的:
我有四个组织 Org1、Org2、Org3 和 Org4,每个组织都有一个对等体。
当 Org1 使用链代码 C1 创建数量为 100 的资产 A1 时,它必须像
Org2.peer0 A1: with quantity 40
Org3.peer0 A1: with quantity 30
Org4.peer0 A1: with quatity 20
And remaining 10 only will be available for Org1.peer0
所有这些同行都加入了同一个频道 channel1。 我的要求是
If Org1 try to query the data for Org2 : error
If Org1 try to query its own data: return the Asset with the corresponding quantity.
目前允许查询通道内所有节点的所有数据。为了让它对其他组织隐藏一个组织的资产,最好的方法是什么?
我认为您混淆的根源是您将应用程序逻辑与通常在链代码中实现的业务合同逻辑混合在一起。
假设你想在 4 个不同的参与方之间建立 Fabric 网络,你需要定义一个规则来定义你将如何 split/distributed 这些参与者之间的资产。现在,让我们把同行放在一边。在您的链代码中,您对资产的概念和可能的用户概念进行编码以避免混淆,让我们称他们为人。所以你有 4 个人:爱丽丝、鲍勃、查理和约翰,业务规则规定一旦爱丽丝提交资产,它必须分别根据 40%、30%、20% 和 10% 进行分配。
接下来,继续说爱丽丝在 Org1 工作,鲍勃在 Org2,查理在 Org3,约翰在 Org4。现在你可以实现一个链码,它将根据提交交易的人应用业务规则。此外,您可以根据提交者身份实施 ACL,从而防止 Bob 查询比方说 John 的余额。
合理的问题是为什么我需要 4 个节点来实现如此简单的逻辑。由于您只能有一个部署了链码的对等节点,为所有 4 个组织配置的通道,您所需要的只是发送交易提案以调用链码。
这种方法的警告非常明显,您需要决定将托管哪个组织以及 运行 这个节点和链代码,因此,由于所有 4 个组织并不真正信任彼此,他们希望托管他们拥有同行并针对他们自己的同行调用链码。为了防止每个组织互相欺骗并减少 adversarial/non-deterministic 行为的影响,他们将就背书政策达成一致,这实际上将确保其他组织的同行在模拟期间也收到与您相同的结果。
现在回到你的问题,节点用于模拟当前状态的交易并在结果上签名,将结果发送回客户端,客户端根据策略聚合背书,并将结果提交给排序服务,排序服务切割块并交付将它们发送给对等节点,这将验证块中交易的正确性并最终将它们提交到账本更新状态。
因此你的链码应该编码 clients/users/persons 的概念,你将在其中分配资产,这些用户可以映射回客户端应用程序(真实世界的用户),这些应用程序可能会注册到不同的组织,因此具有由适当的组织 CA 签署的不同证书。最后,您将能够利用链代码的 GetCreator
API 来了解哪个客户端调用了链代码,并根据您定义的业务逻辑应用业务逻辑和访问控制。
很抱歉让我的回答太长,但总结一下。您的 application/service 将基于两层:第一层是应用程序层 - 映射到组织的用户,第二层是持有分类帐和已部署链代码的对等层 - 用于模拟和执行事务。因此,您将有 4 个节点和 4 个客户端,它们将向节点提交交易,您的逻辑将基于客户端身份而不是节点。
希望我的解释对你有意义 ;)