何为隐私数据?
如果某个通道上的某些组织想要保持数据的隐私,对通道上的其它组织保密,那么一个直接的做法是创建一个新的通道,只让具有隐私数据访问权的组织加入,然而建立单独的通道会产生额外的管理开销(维护链码版本,背书策略,MSP等。
从Fabric v1.2开始,Fabric可以创建私有数据集合,从而使通道上已定义的组织子集能够背书、提交或查询私有数据,而无需创建单独的通道。
隐私数据集合(private data collection)
包括以下两个方面:
- 私有数据本身:通过gossip协议在有权访问的组织节点之间传输(peer-to-peer),此数据存储在被授予私有数据访问权限的私有状态数据库(有时称之为边数据库SideDB),可以通过授权peer的链码进行访问。过程中排序节点不参与,并且不会看到数据。由于使用gossip协议分发数据,因此需要更新每个组织的锚节点,并且需要在对应的peer节点配置CORE_PEER_GOSSIP_EXTERNALENDPOINT以实现跨组织通信
- 数据哈希:通过背书、排序写入通道中每个节点的账本中,hash作为交易的证据用于状态验证和审计
下图描述了被授予私有数据访问权的节点和未被授予权限的节点:
关于资产转让
假设A组织拥有私有数据的权限,想转让给没有权限的组织B,那么组织B可以通过验证私有数据的hash来判断数据的真实性
什么时候使用私有数据vs单独的通道
使用单独的通道:如果整个交易(账本)必须在属于该通道成员的一组组织内保持机密。
使用私有数据:当必须在一组组织之间共享账本时,但是当这些组织的子集应该可以访问某些(或全部)数据时。 此外,由于私有数据是通过点对点而不是通过块进行分发的,当必须对排序节点交易数据保密时,使用私有数据集合。