转自:疏影杳渺
区块链技术的基本介绍这里就不再多说,前面的文章中有通俗易懂的介绍,喜欢的朋友可以去查阅。那么区块链作为一个分布式账本,我们的数据都会被记录在别人的账本中,如何保证数据的隐私安全呢?如果加密,又如何实现数据共享呢?加密与共享是否能共存?如何共存?下面介绍几种常用的解决方案。
1.通过区块链成员属性的加密访问控制
在联盟链中,参与方是一定的,也可以说是可控的。那么参与方具备的各种属性我们可以通过区块链管理起来,形成一个属性集合。基于这个属性集合,可以算法(ABE)对信息进行加密传输。简单理解就是,一些需要特定用户才能查看的数据,我们可以根据这些用户的共同属性,制定一个访问策略,只有满足策略的用户才能解密查看到明文,其他用户无法查看。举个列子:
一个用区块链技术搭建的供应链金融业务,参与的企业为了能够快速的获得融资,需要将关键的四流数据开放给银行,但是又不能被参与的其他企业看到。这时,企业可以将上链的数据通过属性加密的方式进行加密存储,其中设置的访问策略为只有金融类机构(银行或可以提供贷款的金融机构)可见。
当非金融类机构访问账本数据时,由于其自身的属性所产生的密钥是与策略不匹配,所以无法解密;金融机构则可以生成与之匹配的密钥,从而查看企业在区块链的核心业务数据,实现快速授信。
2.采用多方安全计算算法
上面提到的方法可以解决数据共享的问题,但前提是我们信任金融机构不会泄露我们的数据,因为他们拿到了明文数据。那么有什么方法既能保护参与方的数据隐私,又能将有效的信息传递给需要的用户手中呢?
零知识证明可以实现这个需求,这也是零知识证明在区块链领域比较流行的原因。零知识证明是一种加密算法,数据拥有者可以通过零知识证明算法将数据加密存储,当我们要进行融资申请时,只需要向银行证明自己具备了某项能力即可,不需要向其展示详细的数据。同时银行又能确信你的证明没有问题。这是一个很复杂的数学问题,前面的文章中我有过简单的介绍,感兴趣的可以去翻阅。
同态加密同样也可以解决一定的数据隐私问题,所谓同态加密,举个简单的例子理解:
数字 1 经过同态加密变成 aaa ;
数字 2 经过同态加密变成 bbb ;
aaa + bbb = ccc;
ccc经过解密可以得到结果3。
也就是说,第三方可以对加密数据进行简单的计算并得到正确的结果,但是他不知道3是由0+3得来的,还是1+2得来的。通过这样的加密算法我们可以保护原始数据不被泄露,同时又可以进行特定的数据分析。比如政府可以通过医院统计某个社区60岁以上患癌症的老人数量,但是无法获取到老人的隐私信息;保险机构可以通过医院确认某个人是否患有大病住院历史,但却无法获取具体患病信息等等。
3.数据哈希值上链,数据本地存储
这是目前广泛应用于区块链存证系统的一种方式,就是说我们把需要上链的数据或文件,计算与之内容对应的唯一哈希值,将哈希值上链存储。哈希值的特点是唯一性,一旦数据或文件发生内容上的变更,哈希值也会随之变更,与区块链上的信息就无法匹配。
这个方法可以一定程度上的解决数据隐私的问题,但是需要一个安全的中心服务器存储原始数据,虽然原始数据更改后我们可以验证,但是一旦被删除,链上的哈希值也就没有了意义。
4.中心化密钥管理
在区块链业务场景中,我们要考虑实际的执行效率,一些交易量比较大的业务场景,采用复杂繁琐的密码学技术就不是很实用,所以目前使用比较多的是找一个中心的服务终端,可以是一个大家公认的可信节点,存放所有密钥。这样区块链网络中我们可以使用加密算法上传加密数据,保证数据在链上的隐私安全,需要解密的时候只需向中心化服务申请密钥即可解密。中心化的服务同样可以设定各种策略,甚至是审核机制。
这种方式特点是灵活,执行效率快,缺点是一旦中心服务器被攻破,密钥就会泄露,数据就会存在泄漏的风险。
以上是目前常见的区块链保护数据隐私、实现数据共享的几种方式,所有的方法中都离不开密码学作为技术支撑,区块链要想有更好的发展和突破,就需要有更多执行效率高、安全稳定的算法。
|