区块链的隐私保护

阻碍区块链大规模应用的两大问题,一是扩展性,二是隐私。本篇讲下隐私。

隐私问题的产生源于区块链的完全公开透明逻辑,在现实生活中影响较大,列举如下场景。

合规场景。各国法律都要求禁止企业泄漏用户隐私数据,没有隐私性这些企业根本无法在区块链上运行应用

商业竞争场景。没人喜欢竞争对手看到自己企业的交易对象、交易金额、交易频次

个人隐私场景。没人喜欢自己的一切信息都被所有人可以看到

投票/选举/游戏等场景。比如选举/投票,没有隐私的选举/投票将大概率被操纵。比如“石头剪刀布”游戏,先出手的人的选择会被看到,后出手的人必胜。

可以说没有隐私,区块链的应用场景将极大的受到限制。

隐私内容可以分为两部分,一部分是交易的隐私,一部分是dapp相关的隐私。

一、交易的隐私:

交易隐私包含地址余额、交易路径(发送者是谁,接收者是谁)和交易数额三部分。

保护方法概括为两种思路,一种是混淆,侧重于在公开透明的账本逻辑下混淆明确的交易路径。另一种是对机密信息(发送者、接收者和交易数额)进行隐藏,直接改造账本的全公开逻辑,非常重要的是在加密状态下让公共区块链仍然可以验证交易的有效性。

1、在比特币网络里面,这些数据本身都是公开的,要想保护隐私,只能在既有规则下做一些使用层面的创新。

Stealth address(混淆地址)。相当于一次性收款地址,可以隐藏接收者的身份。这个地址是用接收者公钥计算出来的,接收者可以通过私钥计算出相应的私钥。有些版本的比特币钱包支持这个功能。

Mixing,就是把原来从A到B的交易路径混淆掉,这样看到转账不知道真实接收者是谁,看到收款不知道真实发送者是谁。

Mixing可以中心化,也可以去中心化。在中心化的场景下,发送者的代币会转到中心的地址,之后再重新划拨出去,类似交易所。而去中心化的场景里,是直接利用了比特币可以有多个发送者和接收者的特点,直接把原来多笔交易组合成一笔交易发出去。

Mixing可以让中心/参与者知道原始交易路径,也可以隐藏这个信息。

2、有一些加密货币改造了比特币的逻辑,综合使用了一些方法:

Dash:应用了coinjoin方法,类似mix,只是是一个系统层面的设计。将多笔交易混在一起,拥有多个输入、输出,以此来混淆交易路径

门罗币:使用了ring signatures, ring confidential transactions (RingCT), stealth addresses,Kovri

stealth addresses:这种一次性地址在门罗币里面是一个系统级别的强制和自动设计,可以隐藏接收者身份。拥有“unlinkability”(难以追踪去处)

ring signatures环签名:使用私钥以及其它人的公钥生成一个签名,当其它节点验证时,只知道该签名是所引用的众多公钥中的一个,却无法定位具体的公钥。拥有“untraceability”(难以回溯来源)

ring confidential transactions (RingCT):隐藏交易数量,只要向节点证明:a、交易金额为正;b、进出金额加总为0即可

Kovri,还在开发,隐藏你的网络流量

Zcash:在设计的时候就支持发送人、接收人和金额完全隐藏。通过采用zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)来完成交易验证。零知识证明是指证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。而SNARK是指无需双方交互,证明人单方出具即可。

需要注意,这里面zcash的方案无论在效果上还是思维上都极具颠覆性。无需了解原始信息,还能验证交易真实性。这样一方面从根本上推翻了公开发送人、接收人、交易数量的做法,解决了隐私泄漏的可能性。而另一方面又还能让公共节点验证交易的有效性,保证区块链的核心价值。

公开透明不是区块链的核心逻辑,支持公共验证才是。

整体上来讲,Stealth address和mixing最简单和安全,但能力受限。门罗币的方案高效,并且全面,但仍然有一定隐私泄漏空间。zcash在隐私性上做到了相对极致。

二、Dapp的隐私:

Dapp的隐私分为智能合约代码的隐私、私有数据链上发布的隐私和Dapp执行过程的隐私。

智能合约的代码隐私问题:

这个问题不太重要。因为既然选择了区块链,本身就是希望公众审查代码逻辑来建立公信力。有一些场景可能会遇到这个问题,比如区块链游戏某些关键逻辑可能希望保密来维持趣味性。要想解决的话,目前主流的思路是在不改造区块链透明逻辑的情况下,采用layer 2的链下环境去存储&执行智能合约。layer2链下环境的方案能根本上突破区块链的限制,也能提升区块链的扩展性(scalability),所以常有一些公链提出要用链下环境方案做一个更扩展、更隐私的区块链。

私有数据的链上发布,这块更多的是需要dapp和用户来自行保护隐私。非对称加密是比较基础的手段,用公钥对数据先进行加密再发布,需要时再用对应私钥解密。如果想让特定智能合约/用户获取到相应私密数据,可以采用对方的公钥加密。

问题比较集中的是Dapp执行过程的隐私,这是讨论的核心:

用户可以加密把数据传输给智能合约,正常来讲智能合约是要将它解密之后计算给出结果的,但这样原始数据就泄漏了。

这种计算有几种场景:

暂时保密,在计算前可以披露的场景:

比如在区块链上进行石头剪刀布/投票,如何保证先出手一方的隐私?

经典解决方案就是采用“hash-reveal”的commitment模式,先作出一个承诺(我已经作出了选择),但把它加密/隐藏起来,只给出它的hash,等到时机合适(大家都出完手)再解密。因为hash已经定了,所以无法改变结果。

这种更多的是一种使用技巧,场景比较有限。

对隐私数据进行判断的场景:

比如原数据是年龄,需要判断“是否满18周岁”。

零知识证明就很适合这种场景,它本身就是在无法得到原始信息的情况下进行充分判断。

但这种局限在判断领域。

更加通用的领域,加密数据计算后再解密,如何能够获得跟原数据计算一致的结果。

比较典型的例子是A加密一批用户数据给B建模使用,如何让B不获得原始数据,还能正常完成建模工作。

针对隐私数据计算这个核心问题,行业里面主要有三种方案,集中在公链和协议层。要么是作为一个协议配合既有公链,要么是主打隐私计算自建公链。

1、链下执行环境:

以ShadowZone/TEEX为例,它为以太坊等公链提供了offchain的部分,offchain部分由可信执行环境(TEE)作为节点。可信执行环境类似黑盒子,执行过程不受其他程序甚至操作系统干扰,相关数据外部无法窥探。

ShadowZone在链上和链下分别设置智能合约,链上合约帮助用户和TEE之间进行信息交互,用户传输私密智能合约和私密输入数据的时候,用TEE的公钥加密,这样只有在TEE内部才能解密。TEE计算/执行完毕后,按照类似的方法把数据加密,只让相关用户获取。

数据传输过程用非对称加密保证传输过程中的隐私,数据计算过程不在链上发布,链上看不到隐私,并且本身类似黑盒子,即便是硬件所有人也看不到执行过程的数据,因此可以保证全程的隐私。

Offchain方案性能比较好,算是当下比较实际的解决方案,但是在实践中出现了多次安全问题。

2、完全同态加密:

效果是对原数据的计算结果和进行加密后再计算得到的结果一致,如果可以实现,那就可以把数据加密后放心给节点计算。

目前已经有全同态加密的方案(就是可以同时支持加法和乘法,意味着等于加减乘除都支持),但现在仍然处在理论完善阶段,落地较难

3、安全多方计算secure multiparty computation (MPC):

方法是把数据拆分,每个节点只拿到一部分数据进行计算并反馈给用户,用户进行汇总。因为节点都只拿到了一部分数据,所以可以保证隐私。

这三个是不同层面的事情。安全多方计算类似一个使用技巧,完全同态加密是一种加密方法,对加密完的数据进行计算,解密完之后会获得跟原数据计算一样的结果。链下执行硬件相当于一个安全的黑盒子计算器,无法窥探执行过程数据,是硬件层面的东西。

这三个每一个都足够用了,但是实践中可能会组合使用。比如为了提升性能,安全多方计算可能使用链下执行环境。为了提升隐私性,安全多方计算前可能进行同态加密,一点隐私泄漏可能性都不给。

按照行业的看法,从运行效率角度来讲,链下执行环境具备实操性,安全多方计算还在理论完善阶段,而完全同态加密的采用则需要5到15年时间。

三、相关项目:

整体上来讲:

隐私货币的方案比较健全,落地良好,在逐渐优化。

隐私计算方向,今年出了一批新玩家。有些是作为协议,开发者可以低成本的在以太坊等公链里使用,有些是自己要做公链。玩家们的方案都差不多,基本都是采用可信计算环境,后续推进多方计算和全同态加密。能够率先做出可用产品,并把工业界的计算需求引进来的公链会获得竞争优势。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180731G1YNUW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励