【问题标题】:Dynamic access control in Hyperledger FabricHyperledger Fabric 中的动态访问控制
【发布时间】:2021-03-16 02:28:23
【问题描述】:

我正在使用 Hyperledger Fabric,并使用 Golang 开发 Chaincode。我有以下用例,但不确定如何在 Fabric 中实现。

假设我有 Bank1、Bank2 和 Bank3 对等组织。我想设计一个系统,他们每个人都存储客户信息(客户是银行账户持有人)。通常,我不希望 Bank2 访问 Bank1 的客户——但如果客户以某种方式调用某个函数调用,bank2 应该能够从 bank1 获取该客户的信息(假设所有银行共享一个通道)

如何在链码中实现类似的功能?

我查看了 ABAC,我不确定如何更新组织的属性以允许根据他们采取的行动访问特定客户

谢谢

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

    一种解决方案可能是在区块链之外拥有私人信息,让每家银行都可以通过 API 直接从您的链码中查询其私人信息,并在通过链码调用共享信息的所有银行之间拥有一个共享通道。当然,所有 API 都必须确保只能由其自己的银行查询。

    另一个无需在区块链之外实施的解决方案是使用私有数据集合,这是对 1.2 版 Fabric 的改进。更多信息在这里:https://hyperledger-fabric.readthedocs.io/en/release-1.2/private-data/private-data.html

    更新:

    从链码调用外部 API 是否安全?我将如何维护密钥/令牌?

    是的,就您的通信和端点的安全而言,它是安全的。一个简单的解决方案是将您的节点和您的私有数据存储在同一个网络中,在防火墙内。这样,您就不必担心应用程序内部的安全性。

    要使用私有数据来实现这一点,是否可以有一个字符串数组,这些字符串是客户端结构中银行的标识符,并且客户端可以调用函数以允许更多银行,以及当银行尝试查询客户端时代码检查该数组是否包含银行标识符?

    在我看来,您的方向是正确的,但我会将其实现为 JSON 文件,而不是具有访问规则的数组,说明对于 BankA,BankB 可以访问这个和那个函数等等,您还可以设置信息的可见性级别,然后在您的链代码中实现读取和使用该配置的逻辑。在生产环境中,每个节点都必须有自己的配置文件,但在开发环境中,您可以拥有一个包含所有规则的配置文件。

    更新 2:

    组织中的某个人是否有可能直接“查询”分类帐或读取其状态,而不是通过链码?

    简短回答:是的,有可能。无论在区块链中写入什么,对等点的管理员和任何控制私钥的人都可以读取。 但是这就是架构发挥作用的地方:如果您不需要在区块链中编写的东西,就不要编写它。这取决于你想要区块链做什么。如果只是为了证明信息已被共享,只需保存必要的信息:'bankA shared info about userB with bankC'。实际信息不必保存在区块链中。如果您需要将信息保存在区块链中并且希望将其保密,我认为最好的解决方案是使用私有数据集合,并且请注意,实际上私有数据不受共识的约束,因为私有数据保存在一个仅在私有事务中涉及的对等方/组织中的侧数据库,而不是在每个对等方中。

    【讨论】:

    • 从链码调用外部api安全吗?我将如何维护密钥/令牌?要使用私有数据实现这一点,是否有可能在Client 结构中拥有一个字符串数组,它们是银行的标识符,并且客户端可以调用函数以允许更多银行,以及当银行尝试查询@987654323 @ 代码检查该数组是否包含银行标识符?
    • 另一个问题,组织中的某个人是否有可能直接“查询”账本或读取它的状态,而不是通过链码?因为在那种情况下,我在链码中拥有什么样的访问控制逻辑并不重要,如果他们愿意,他们仍然可以读取信息
    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2019-08-12
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多