由于区块链各参与方可能存在利益冲突,不愿意将私有数据上链,催生了链上隐私数据的需求。对于不同的隐私等级存在相应的处理方式。
- 短期内隐私数据。指的是易变数据,一定期限后该数据的价值降低,例如波动的商品成交价。因为密码学破解在可预见的短期内无法达成,可以认为安全风险很小,因此可以使用流行的对称加密/非对称加密的方式,密文上链,相关方使用链下方式或者链上方式交换密钥。甚至可以单笔交易更换密钥,这样对于可变但是数值范围有限的数据,例如状态值,单价/数量等数值,则避免了统计学上破解。
- 长期固定隐私数据。例如身份证号码,企业社会信用代码等,该数据长期不变,存在若干年后由于量子计算或者相应的密码学被破解导致泄露(当然,随着破解方案的演进,加密方案也会相应的演进,但是对于链上的历史数据则极易受到新的破解方案的威胁)。因此,链上可以保存数值hash,具体的数据链下交换,使用链上的hash值作为验证。同时,对于数值类等取值空间有限的,可以针对每笔交易数据添加盐值后(同样通过链下交换),再做hash上链,避免彩虹表攻击。
Fabric的private data设计
1. transient data vs. transient data store vs. private data collection
- transient data: 链码chaincode的输入数据,client发起交易时指定,endorser在背书过程中,将这些数据以gossip的方式点对点发送到其他的拥有权限的相关节点(例如同属于该private data collection的不同组织),链上block里的交易信息并不会包含有这些数据。
- transient data store: 中间存储,存放transient data进行运算后的RW-set,方便后续的gossip交换到其他的authorized节点,在commit阶段,private data hash将会与该部分数据进行校验,无误后提交到private data collection,然后清除transient data store。
- private data collection: 长期存储(由blockToLive参数控制生命)区块执行之后的world state世界状态里,包含有public state和private state,(分别对应着public RW-set和private RW-set)这部分是通过gossip协议从其他节点发送过来的,针对相关的org开放读写权限。包含原始数据和该数据的hash值组成,这样的hash值会被在commit阶段比较private RW-set,以及后续在chaincode里确认该笔数据或者交易的存在真实性。


- The transactions with the private data hashes get included in blocks as normal. The block with the private data hashes is distributed to all the peers.即private data hash会提交到orderer进行排序,对于没有权限的private data collection,只能获取到其hash作为存证和后续验证。
- Note that because gossip distributes the private data peer-to-peer across authorized organizations, it is required to set up anchor peers on the channel, and configure CORE_PEER_GOSSIP_EXTERNALENDPOINT on each peer, in order to bootstrap cross-organization communication.。意味着gossip协议会根据collection的json定义文件里的policy政策传播到符合条件的各个组织。
当前fabric提供的是hash校验的基本功能,只是数据的真实性校验和数据交换,对于更多的应用场景例如需要计算/比较的,将来可以扩展叠加零知识证明和同态加密运算等,会有更广的应用想象空间。
Ref: