微软亚洲研究院闫莺:以太坊的性能与隐私保护如何兼得?
- A+
- A-
您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
导语:闫莺说道,"区块链根本做不到匿名,只能算别名"。那这时,以太坊的隐私保护就成了一个问题。我们既需要掩盖交易细节,又要验证交易的正确性
雷锋网3月25日消息,由开源社、TopGeek、汇智Tek联合主办的中国区块链和金融创新科技峰会(FTCon2017)在上海举行,微软亚洲研究院主管研究员、区块链实验室负责人闫莺,就基于以太坊的隐私保护技术,发表了她的观点。
"我们要分清楚匿名与别名",闫莺说道,"区块链根本做不到匿名,只能算别名"。那这时,以太坊的隐私保护就成了一个问题。我们既要掩盖交易细节,又要验证交易的正确性,那么,业界已落地的通用做法是什么呢?如何兼顾隐私保护与性能呢?对此,闫莺做了详细解答。
以下是雷锋网整理的演讲全文,雷锋网(公众号:雷锋网)对其进行了不改变文章原意的编辑。
大家好,我今天很高兴在这里跟大家一起来聊聊:区块链的隐私保护技术。我今天主要从三方面来讲。
第一为什么会有隐私保护这样的问题?我们先说一下区块链的情况,以及为什么会有隐私的问题。
第二个是现有的、实实在在的已经落地的隐私保护的技术,以及以太坊现在比较活跃的基于企业的架构。
如何兼顾隐私保护与性能?我将会分享一下微软的做法。
以太坊的兴起
我们先从区块链的历史讲起,2008年,一个人提出了比特币,接下来他和合伙人一起合作开发这个东西上线,但当时,比特币还没有什么价值。但是很快,在之后一个月,其价格涨了10倍,大家才意识到它的价值。到了2011年,比特币等于一美元。2013年,出现了一个少年,他是比特币的爱好者,想开发一个新的币种,那他就必须重新实现一下,使得后面的新币种,比较容易在同样的框架下去开发。就这样,他提出了"以太坊"。
以太坊和比特币的区别就是智能合约,实际上智能合约就是代码,代码可以定义钱怎么转,并且资产都是可以代码化的。
有了这个想法之后,他就退学了,然后公布了他的白皮书,之后又和合作伙伴写了一个比较详细的黄皮书。之后就开始筹款,以太坊是最成功的筹款。2014年底,以太坊正式上线了,第一个版本就已经非常稳定了。并且如果你发现了以太坊的bug,提出来,并且被接受了,你就会得到比特币的奖励。以太坊一上线就支持七种语言,可以避免一种语言带来的局限。
在下面这个图上,大家可以看到,以太坊现在的发展状况有点像三年前比特币的发展情况。我们可以发现,以太坊还有发展空间,挖矿的人越多,宝藏越稳定,推动的人越多,技术越好。
区块链的5层
可能大家也看到过区块链的各种定义,但是没串起来,我今天把区块链的基本定义串一下。区块链有好几个部分,当有人跟你谈起他在做区块链项目时,你可以问一下他在做哪一块?因为它包括存储、智能合约、上层应用等5层。
数据结构
首先,数据结构是比较基础的部分,正如它的名字一样,区块链是一块一块的交易连在一起,那么,怎么连呢?用一些密码。这种数据结构的特点是:如果你改了其中一块数据的内容,比较容易连接起来。
那以太坊怎么存在呢?不就是一个系统,怎么搞的这么复杂?
它就是这么复杂,以太坊到现在已经有七千多个结点,来自不同国家,不同目的的人。以太坊是一块一块的数据节点连在一起,彼此完全是不信任的,存储层面上,是每个结点高冗余的存储数据。链就是是区块链。
一致性协议
如果存在不同的结点,那如何保证数据的一致性呢?这就是我们经常谈的一致性协议,每时每刻我们都需要一个人,这个人负责写下一块,然后记录下来。那么,谁来领导呢?
智能合约
我再谈谈智能合约,什么是智能合约呢?就是一段代码。解决什么问题呢?刚才讲到用比特币赚钱,其它人需要查询你的余额够不够,发起方是不是你,智能合约就要解决这样的问题。那我们能不能把这个做的更灵活?我们举一个例子。
假设即将举办一场球赛,我和Edwin打赌,如果A赢了,他给我100元,如果B赢了,我给他100元。这种场景在线下怎么做呢?我们每个人先把钱给一个第三方,等结果出来之后,谁赢了把钱发给谁,第三方在其中收取一些手续费。智能合约就是想去掉这个第三方,它是一段代码。足球比赛结果出来之后,我们可以触发这个合约,它就自动把钱转到赢的人手里。智能合约就是一段代码,之后会生成一个地址,别人可以转给你。自己还有一个存储空间,智能合约在区块链上的运行时,输入是区块链上的数据,经过梳理之后,再写回区块链。
听完这个例子大家可能明白了,我们所有的程序都能写到区块链上,这就是以太坊,它就是这样开发的。数据所有的结果都在区块链上。
有人可能有这样的疑问,我写一个循环代码,是不是就可以了?
以太坊也有解决方案,它的运行不是免费的,要收油钱,具体怎么收呢?按照你所消耗的资源,比如CPU资源、存储资源来收,如果你想循环运行的话,没有巨额资金也运行不起来,用这样的方式,可以降低黑客攻击的成功率。
基于区块链的交易过程到底是怎样的?
讲完区块链的几要素之后,我们再深入一点,在以太坊中,我转了一笔钱,交易过程到底是怎样的?
假设我要给一个人转50元,我在客户端提示转50块钱给他,就会生成一个交易,网络上所有人都可以看到,从谁到谁转多少钱。这个交易就存在整个网络当中,其它结点收到了我的转账,这个帐本就更改了。于是我就有了两个状态,我现在的余额再生成一个新的结点。所有的交易组织成一个数,根结点也计算出来,我们就把整个值都放到块的头部,最后把这个块跟前面的块连在一起,就完成了转账。
那中间为什么有数字呢?为了验证区块链的完整性,当有人篡改的时候,可以从中间看出来是不是被人篡改了。可以通过这个数找到我现在的状态,这是数的作用。
实际上我的交易被存成什么样的结构呢?上面所有的信息都是用这个存起来的,key是结点。那中间结点是什么呢?实际上在每个结点上,如同下面表显示,我们都可以通过它们的信息可以找到对应数值。
显而易见,这种方式查询起来效率不高,因为这个过程中,我们需要频繁查询数据。智能合约也是类似的,也是一段交易的内容,代码也是以数的形式存储上去的。
落地的隐私保护技术--拼车与烟雾弹
现在,我们有了一个稍微具体一点的认识,我们发现区块链基本上都是明文,除了地址和本身不是那么对应之外,所有的信息都是对应的。
这时问题就产生了,不是说匿名吗?我们要区分匿名和别名,如果你的名字和线下的人没有关联,就是匿名。实际上区块链根本做不到,为什么呢?
比如说我买了一个比特币,我总要通过一些支付途径来支付,在美国交易2000美元以上都是需要实名的,这个地址总是通过某种形式与实际的人有联系。所以区块链并不是匿名的,只能说是别名,既然不匿名了,我们怎么解决隐私问题呢?
首先交易的内容要隐藏好,不要让人看到;但同时别人还要验证这个交易是不是错了,不能都加密。这两者存在矛盾,实际上这是隐私保护技术上的挑战。
现在实际上已经落地应用主要有两种解决办法。
一种是密码学的原理,先加密,遇到了之后通过一种方法验证。
另一种是侧链,这个状态下,不需要看见的人看不到,需要验证的人通过验证能见到。
拼车
我觉得,加密的解决方法类似拼车的概念,我转给某个人钱容易暴露,那我就联合一堆人一起转,你不知道具体谁转给了谁。拼车的生意谁做呢?我们需要在网络中建立几个结点,这几个结点是将转账的兄弟姐妹连在一起,但是这个主结点却容易泄露。这时,我们可以不用一个主结点,用多个主结点去拼,这样的话,除非都找到,否则很难知道用的是哪一个。
烟雾弹
另外一种技术有点像烟雾弹的模式,之前拼车是几个人都有转账意愿的人拼在一起。但这种技术是找一些无辜群众拼在一起。
这个技术具体就是,当我想发起交易的时候,我就用我的私钥和一群人的公钥一起发起,这样就不知道是谁发起的。但其中存在一个问题:如果他们知道你选择的地址,你就暴露了。所以这不是完全的隐私保护,只能说是一部分隐私保护,至少你是在发起人里面的。
这个技术本身不是什么新技术,80年代已经出现了,我们也看到这个技术的复杂度,还有它理论上的重要性。目的是让验证者不知道事实本身的时候,还能知道事情的真假。
在这其中,存在一种Zero-Knoeledge Proof,我们举一个例子来说明。
南北分支是连着的,有一个钥匙可以连上。老王自称有这扇门的钥匙,但是不愿意直接展示出来。他不愿意把钥匙交出来,我们怎么知道有这把钥匙呢?我们找了一个测试者,同时要防止测试者和老王联合作弊,具体怎么做呢?测试者把眼睛蒙上,然后老王随意走到一个分支,测试者随机要求老王从某一个分支出来,老王都能出来。那能不能说老王有钥匙呢?不能。如果老王进去的分支和测试者是一边的话,也可以出来。所以这种测试要多做,如果老王每一次都能出来,我们就猜测老王是有钥匙的。但是这个验证效率很低。
还有一种是非交互性的,即做一次测试就能判断真假。判错的概率低,但也不能百分之百的保证。从比特币到ZCash有一个过程。我需要证明时,给出序列号,证明我是这个币的拥有者。这样就把详细的信息隐掉了,同时可以验证。
另外有一种侧链的方式,它现在很受欢迎,原因是整个过程完全给予代码,而且它的白皮书上也说了:经过一些验证和测试。目前这个架构,基本上可以满足所有的金融需求。它是怎么做的呢?其实很简单,我们公开链以及状态,结果是其他人只知道我产生了一个交易,但是看不到内容,这样就可以更好的防篡改。
隐私与性能如何兼得?
我们要做隐私保护,势必会影响系统性能。一方面要注意隐私,一方面要兼顾性能,这种情况下,我们应该怎么做呢?我在这里分享一下微软的做法。
一个是做硬件,硬件是非常常见的,不用去购买。比如说SGS,有了它之后,我们就能很好解决隐私的问题,同时保障性能,因为那是完全可信任的。
另外,我们在和客户交流过程中,发现他们有一些需要与第三方合作以维护数据的诉求,但不需要用区块链方法解决。我们现在做了一个大家共同拥有、可编程的,共同管理的云数据库。现在,基本上所有的供应商都有相应的云数据库。大家觉得在云端处理数据,稳定性和隐私性都有保障。有许多用户喜欢这个产品,但其中也有局限性,它只有一个owner,你跟我合作可以给你访问权限,但我也可以篡改权限。
有些超市希望用区块链的技术,那样就可以监控养猪、屠杀,以及肉的处理过程猪肉的质量。其实在类似的供应链里面,我们也需要做数据存储沟通的,问题任何人来做,都有人不放心,那谁来做这个第三方呢?
所以我们现在需要一个云数据库,理想状态是几家共同管理,而不是单独一方管理。区块链应用过程中,经常找不到可信任的第三方。
如何定义可信任呢?
首先要具备稳定性,但这并不意味着数据没有人篡改,而是用去中心的方式处理。如果在云端数据库上加入区块链,这样共同维护数据库的每个人的交易都可以去查询。
另外在整个数据库的用户群中,有完善的规则定义。谁能访问哪个表、谁能更改数据、谁可以加入等,都能得到较好的管理。
那么,这样的数据库具有什么样的特点呢?不限量。
我们还是用传统数据库,上层用户不能直接访问,并且定一个规则,明确谁可以查询、谁可以生成,如果产生需求,它会首先进入数据库,判断其是否符合定义权限,如果符合的话发给所有人,这就能起到数据库的目的,同时保护云数据库。
所有云供应商都可以做类似方案。并且关于区块链的新闻也很多。技术有两方面的作用,一方面技术是敲门砖,更重要的是背后的资本运作、管理以及如何落地。如果你清楚需求,总有办法去实现,而不是做一个非常泛的平台,并且要保证其各方面的性能都很好,这是很难的。
搞笑阅读排行
-
16 阅读 2017-03-27 11:31
-
14 阅读 2017-03-27 11:30
-
12 阅读 2017-03-27 11:30
-
10 阅读 2017-03-27 11:30
-
9 阅读 2017-03-27 11:30
搞笑热门推荐
-
0 阅读 2017-03-27 11:32
-
0 阅读 2017-03-27 11:32
-
0 阅读 2017-03-27 11:31
-
0 阅读 2017-03-27 11:31
-
2 阅读 2017-03-27 11:31
评论