隐私问题一直是区块链应用落地的障碍问题之一,如何既能满足监管,又能不侵害数据隐私,是行业都在攻克的问题。那么,到底隐私问题为何难?有什么解决思路,以及实践创新呢?零知识证明、同态加密等技术,又能否解决问题呢?裸数据交易应如何控制?
雷锋网AI金融评论报道,在5月11日由北京国家会计学院主办,区块链初创公司灵钛科技,能源区块链实验室,众安科技、新加坡第三方支付公司Omise协办的 “区块链在中国的应用与产业发展主题论坛” 上,Chinaledger技术委员会主任白硕老师围绕“区块链中的隐私保护”的主题进行了讲述。
白硕老师,现为Chinaledger技术委员会主任,先后就读于清华大学、北京大学,1990年获得理学博士,曾任中科院计算所研究员、博士生导师,软件方面首席科学家,2002年起任上海证券交易所总工程师。
据雷锋网(公众号:雷锋网)AI金融评论现场了解,演讲上,白硕老师除了介绍了Chinaledger提出的基于中央对手方案,也对其他方案进行了拆解分析。他认为,在区块链隐私问题上,目前技术的发展程度对隐私的保护还很差,但也不能认为这就是区块链的固有局限,它还有可以改进的空间。
隐私保护是很重要的,而且有现实的需求;如果说马上就要实现,等不得那些非常完美的方案,就要兼顾隐私强度和去中心化的程度,根据自身的应用场景找一个适当的平衡。隐私保护可以为区块链进一步赋能,保护区块链落地;同时可以把密码技术加上区块链在一起,加上原有的大数据,实现大数据的互通有无,催生化学反应和增值。
因此,从途径看,长治久安型的理想的解决方案确实要抓紧研究,尤其是我们的密码学界和区块链跟落地直接相关,和跟技术、商业直接相关的这两方要加快对接。此外短平快的解决方案能落地的也要尽快落地,大家要认清楚什么是可以牺牲的,什么是不能牺牲的,在里边找一个适合自身的方案。
以下是白硕老师演讲原文,雷锋网AI金融评论做了不改变原意的编辑:
原来是很多单位各记各的账,但是这个账本之间是有关联的,如果上了链,大家就可以记同一本账,这个逻辑上就集中了。然而,记这本账的物理位置是分散的,但机器之间还要互相达成共识。所以,集中是逻辑的集中,分散是主宰权的分散。
但是,大家都记一本账的场景之下就会出现一个问题:现金是私人的领域,包括其他区块链上记载的信息,也都需要隐私保护。而关于这个问题业界存在一些误解,其中是两种互相矛盾的说法:一个说法是公开透明的,一个说法是区块链是匿名的,但是这个匿名只有地址是匿名的,而账目是公开透明的。但是,区块链只能是这样了吗?其实不是,还可以改进;另一个是说区块链隐私保护已经很好了?也不是,在这个问题上隐私保护还很差。
隐私问题从何而来
账户
我们具体说账户:
一个账户由地址来标定,而一个地址的身份同一性无法掩盖——这次用这个地址,下次用这个地址,当然长时间跨度,一个地址可能会转给另一个人,但是在一段确定的时间范围内,这个地址是同一个身份的人在用,这个无法掩盖。
另外不同地址之间如果出现稳定的关联交易,也是无法掩盖的,还是有痕迹可以寻找。
第三,不同的地址之间还有一些趋同交易,就是一个人有个人的手法、有个人的密码,或者说像指纹一类的验证信息,体现在人的交易行为中。这些交易行为如果出现趋同性,那是这个人不自觉留下的,也是无法掩盖。
正因为有这些无法掩盖的东西,看起来账户是匿名的,但是依然抵抗不了强监管。
账目
对于账目问题,行业在往两个方向使劲:一个是往右,就是去中心化,指集体见证——我希望你是公开透明的,一公开透明就可以集体见证。但是另一方面,无论是法律法规的要求还是个人隐私权利的要求,还是几个人私下之间做一件事,希望无关人士回避等这样的要求,都要求这目不对无关的人开放。但是这样就出现一个问题——不开放怎么集体见证?
这看起来好像是矛盾的,但是这个矛盾是可以通过高级的技术来化解。
不同区块链模型的解决方法和矛盾
首先我们要区分两种见证:
一种是所谓的事件的时序或者时间顺序的见证。区块链提供了时间先后顺序不可更改的确定的时序,通过一种集体见证的方式在区块链上得到见证。
同时还有所谓有效支付的见证,比如要防止双花、透支、出负,这些工作在不同的区块链模型下有不同的解决方法。
UTXO模型
UTXO模型,比如这样的场景:一张一张的支票,每个支票上有不同的面额,在支付的时候要把面额的总额和将要支付的标的进行比较,只有当总额大于标的的时候,支付才有效。余额模型会把这些都合并出余额,把历史上收到的些钱汇聚成一个总的余额,这个余额和你将要支付的标的之间也要进行比较。
这两件事情,在比特币也好、以太坊也好,是通过一个环节完成的,但是实际上是两件事情。在保护隐私的时候,其实就是希望还要对事件的顺序,对有效支付都要有一个见证,但是有效支付的见证提出了更高的要求——我不看见这些具体的值,时间顺序好像没有什么问题,加了密,它是这个时间发生的,我仍然可以确认它是这个时间发生的。
但有效支付这个要求是有问题的——在看不见这些数额的时候,我又要确定谁比谁大;而如果我看见了,那隐私就泄露了。又不要让人看见,又要确定谁比谁大,这比较难处理。我们可以把目前看到的一些解决隐私问题的技术投影到一个二维平面,这个二维平面其中一个坐标讲的是隐私性本身的强和弱,另一个坐标讲的是去中心化程度的强和弱,就是弱中心化和强中心化。
按照这样的划法,我们就看到直线区分出两个集团。线的右上角是比较完美的,它能够彻底地或者说理想地去解决刚才说的这个问题——在不见到数额的情况下去做见证。而线的左下方采用的这样一些技术,其实它是有所牺牲的,要么牺牲了去中心化的特点,要么牺牲了隐私强度的特点,它可能去中心化做得很好,但是只能保证很弱程度的隐私保护,再强就保护不了了。要么是隐私保护得很好,但是去中心化特点没有办法完美地保证。
而在这个线的底下,我们看到一种马上可用,但是是牺牲了一些东西的方法。而在这个右上方,我们看到的是理想的,两边都不牺牲的,但技术上还没有成熟的方法——它们在实现当中效率等各方面还达不到实用,或者很少有能达到实用。所以是尺有所长、寸有所短。
零知识证明
这里是零知识证明:
S先生、M先生、P先生,M先生是一个中间人,他出题,想了两个数,这两个数都是100以内的整数,然后把这两个数加起来的和告诉了S先生,把两个数的积告诉了P先生,然后我们就听到了对话。S先生说我不知道A、B是多少;P先生说,我知道你不知道,我也不知道;S先生说,现在我知道了;P先生说,现在我也知道了。
假定诸位是旁边的旁观者U先生,听到了他们的对话,如果没有强大的数学知识,你会说我也知道了。整个这个过程看起来是不知道A、B是多少,但是这个过程已经不是零知识交互了,对这个状态有所泄露,P先生说这个话又进一步有所泄露,而一来一去大家都知道了。
这是一个数独的题目,有人已经做出来了,他声称做出来了,但是又不想让人知道是怎么解的,怎么办呢?大家就可以交互,因为数独要满足行、列加起来,都是1-9不重复。这样的特性可以把翻过来的纸片拿下来洗牌,洗完牌以后再翻开给大家看是不是1-9。每出示一个新的行、列或者小块,大家对他解出来这个事情就多了一份信任。这就是零知识交互的过程,在整个过程当中,他没有泄露任何跟他解法有关的东西,只是把结果告诉大家。
采用这个原理做的,大家比较熟悉的就是去年年底上线的ZCash。ZCash的原理是非交互式的零知识证明——一次性出示一个证明,而对方拿到这个东西可以一次性验证,不需要再交互。我们可以把这个过程分成三个区域,底下的是用户自己收到的支票,中间黄颜色的是当前这笔交易,我们看到一般的交易只有三要素,就是谁给谁多少钱,发放方的地址、接收方的地址和转账的数额。
但是ZCash就多了一个要素,就是零知识证明的信息。这个信息可以证明,虚线的最上面那个区域就是无关方面,他们又要代记账,需要为你背书,又不知道谁给谁转了多少钱;但是这个零知识证明的信息传上来了,可以验证够不够支付。
基于零知识证明这个比较高深的密码学原理,就能够验证你是否足够完成本次支付。这种方法在不泄露本次转账的金额、发送方、接收方的地址,也不泄露之前的支票发送方、接收方的地址的情况下,就能够做出是有效支付还是无效支付的判断。对于有效的支付,他们就可以从挖矿的角度给予确认。
同态加密
除了零知识证明,还有一个叫同态加密,我们可以看成在A和B之间存在一种数学运算——进行了这个数学运算就可以得到一个结果C,相关方看到的都是明文,但是无关方不需要看见A,也不希望看见B,也不希望看见C;如果等于C,就知道这个转账的来往,从而确认。因为价值是守恒的,等式要成立。
同态加密想的办法是做变换,把A、B、C变成FA、FB、FC,然后A和B之间的运算变成FA和FB之间的另外一种运算。但是这种运算是所谓同态映射,同态映射能够做到先运算后加密和先加密后运算结果是一样的。
有这个保证,我们就可不管用户转了多少钱,只需知道账是平(守恒)的,映射完后价值没多没少,之间是如何分配不用管,这就是同态加密的方法。
Chinaledger提出基于中央对手的方案
Chinaledger提出了基于中央对手的方案,这个方案分成A链和B链,事件时序的见证在一条链上,而有效支付的见证在另外一条链上。这个实践顺序加密提交,提交为CCP——中央对手方,由中央对手方来解密、检验签名、检验余额,如果是有效就实现过户,然后加密再回去。
也就是说,时间顺序在A链上进行了背书,而交易的有效性在B链上进行了背书,但是B链上并不是所有的参与者,而只是法律上大家赋予了它这个职能的中央对手方。而中央对手方方案显然有中心化色彩。所以结果是中心化色彩很强,但是隐私保护也很强。
但是为了防止CCP本身去做坏事,还可以在B链上设置监管用户——监管用户既可以看到A链,也可以看到B链,只要CCP和监管方不是共谋的,那么监管方还可以把CCP的所有事情再检验一遍,这个就是Chinaledger的方案。
以太坊基于State channel的隐私保护方案
以太坊社区也提出了一个基于State channel的隐私保护方案:
一个账本统一打一笔钱到智能合约里,智能合约实现加密,中间的明细怎么改变价值最终的版本等外边是看不见的;等到最后交易完成,再把结果显回到基础上。所以中间过程部分的隐私是保护了,但是总额进来多少、出去多少,这些保护不了。
基于Tear-off的隐私保护方案
这个是基于Tear-off的隐私保护方案,相当于撕去敏感信息的盲签名,对敏感信息和非敏感信息进行分组,让敏感信息不出现。这样的话相关人能看见敏感信息,也能看见上边的,无关人只能看见上边的。这种方案一定程度能保护隐私,比如交易的有效性,就需要敏感信息,而敏感信息是看不见的,交易的有效性在无关人就没有办法做背书,只能由相关人做背书。
所以,这就引进了公证人这样的角色——公证人属于相关人,能够接收到敏感信息,所以能够对交易的有效性进行验证,但是公证人又不同于交易双方,Chinaledger做的就是基于CCP的公正,其实道理是相同的。
现存大数据交易方案存在哪些弊端?
裸数据交易的痛点
区块链上价值是守恒的,也知道数据是不守恒的,很低的成本就可以拷贝。裸数据交易其实有很多的痛点,大家都觉得这是不可行的。
首先,卖出去的数据就像泼出去的水,一扩散出去就别想控制它向更远的地方扩散了。
还有数据的权属问题,有没有权利卖?它是在经营过程当中形成的,但是数据的所有者可能不是你。举个例子,病历是病人在医院看病的过程当中形成的,但是病历的所有者是病人,不是医院,医院没有权利卖这些数据。
还有是泄密。不是所有数据都可以卖,有些数据很敏感,卖出去以后是泄露别人的秘密。
但是不卖的话,数据在自己手里能够带来的价值又很有限,所以卖也不是,不卖也不是。
不卖裸数据,而卖数据API ?
那么,如果不卖裸数据,而卖数据API的使用权,就是卖一种服务行不行?但这遇到两个问题:
第一个是拖库,我卖的是f(x);再一个是计量记账的问题,用了多少次这个数据,没有公认的计量的话就说不清楚。当然也有好处,反正这个x是没拿走的,只是卖一个f(x),那个x不是自己的也没关系,只是卖一种服务。
另外一种可能是以物易物。给别人开放一个接口,别人也给我开放一个接口,但问题是:使用权是不是成立?
智能合约:暴露了场景和接口,后果不堪设想
智能合约也有一个问题,就是智能合约资源的控制——资源的使用是花费的。智能合约有一个GAS的概念,举一个场景的例子:大家各自拥有自己的数据,X和Y是不曝露出来的,而曝露出来的是场景和接口,输出的是服务——这些服务在用户使用的时候,实际上可以用区块链进行计量,那么交易明细实际上可以直接跟付费挂钩,银行可以直接转走这个付费,也可以在区块链使用代币来进行支付,这样区块链大数据的使用就完蛋了。
数据单独的使用价值有限,而不同领域的数据一旦实现关联,可能就会出现化学反应,从而给数据带来增值。所以我们看到三个空间,自己的数据放在封闭空间里,然后经过接口曝露,放出来的服务数据在开放空间里,而这个数据的化学反应是在增值空间里。
背靠背求交集
背靠背求交集,这是一种竞合关系,两方又要同时跟对方共享两个集合的交集,但是又不想对方看到这个全集。这个曾经有一个不靠谱的做法,就是引入第三方——为了求交集,第三方拿到了并集——第三方太便宜了,我们可能还要给他付费,而付费还不便宜,这样的做法很危险。
也有一些没面子的做法,实在是没有技术手段了才这么办?大家带着盘到现场,紧盯着对方操作,操作完了以后看着对方把硬盘砸掉。
都用哈希?
如果大家都用哈希怎么样呢?也不行,如果一方老实地把自己的集合拿出来;不老实的一方,把电话号码做一个全集,一求交集就把你的数据拿出来了。也可以穷举,这个也是不灵的。
那怎么办?解决的途径是混淆,通过混淆能够实现背靠背求交集,自己不曝露自己的全集,而且一方面想拿到另一方的全集——事实上这样计算上付出的代价也很大,实际上是不可能的一件事情,这样给大家背靠背求交集带来了一种希望。
结论
隐私保护是很重要的,而且有现实的需求;如果说马上就要实现,等不得那些非常完美的方案,就要兼顾隐私强度和去中心化的程度,根据自己的应用场景找一个适当的平衡。
从途径看,长治久安型的理想的解决方案确实要抓紧研究,尤其是我们的密码学界和区块链跟落地直接相关,和跟技术、商业直接相关的这两方要加快对接。此外短平快的解决方案能落地的也要尽快落地,大家要认清楚什么是可以牺牲的,什么是不能牺牲的,在其中找一个适合自己的方案。
隐私保护可以为这个区块链进一步的赋能,在一些如果没有隐私保护区块链就没有办法落地的场景上,保护区块链落地;隐私保护也可以为大数据护航,把密码技术加上区块链,加上原有的大数据,从而实现大数据的互通有无,实现化学反应和增值。