FTCon2017|微软亚洲研究院闫莺:以太坊的性能与隐私保护如何兼得?

本文作者:张利2017-03-26 14:18

导语:闫莺说道,“区块链根本做不到匿名,只能算别名”。那这时,以太坊的隐私保护就成了一个问题。我们既需要掩盖交易细节,又要验证交易的正确性

雷锋网3月25日消息,由开源社、TopGeek、汇智Tek联合主办的中国区块链和金融创新科技峰会(FTCon2017)在上海举行,微软亚洲研究院主管研究员闫莺,就基于以太坊的隐私保护技术,发表了她的观点。

“我们要分清楚匿名与别名”,闫莺说道,“目前的比特币和以太坊区块链做不到匿名,只能算别名”。于是,隐私保护就成了一个问题。我们既要掩盖交易细节,又要验证交易的正确性,那么,业界已落地的通用做法是什么呢?如何兼顾隐私保护与性能呢?对此,闫莺做了详细解答。

以下是雷锋网(公众号:雷锋网)整理的演讲全文,雷锋网对其进行了不改变文章原意的编辑。

大家好,我今天很高兴在这里跟大家一起来聊聊:区块链的隐私保护技术。我今天主要从三方面来讲。

第一为什么会有隐私保护这样的问题?我们先说一下区块链的情况,以及为什么会有隐私的问题。

第二个是现有的、实实在在的已经落地的隐私保护的技术,以及以太坊现在比较活跃的基于企业的架构。

如何兼顾隐私保护与性能?我将会分享一下微软的做法。

以太坊的兴起

我们先从区块链的历史讲起,2008年,第一次提出了比特币,2009年初系统上线。但当时,比特币还没有价值。直到2010年中,比特币有了它的价值,1万个比特币换了2个披萨。在之后一个月,其价格涨了10倍,大家才意识到它的价值。到了2011年,比特币等于一美元。2013年,出现了一个少年Vitalik,他是比特币的爱好者,想开发一个新的币种。那他就必须重新实现一下类似比特币的系统。他想,是否可以有一个更通用的系统架构支持各种不同的数字资产的定义,就这样,他提出了“以太坊”。

与比特币相比,以太坊最主要的不同就是引入了智能合约。实际上智能合约就是一段代码,这段代码可以定义数字资产,可以定义数字资产转移的规则。

有了这个想法之后,他就退学了,然后公布了他的白皮书,之后又和合作伙伴写了一个比较详细的黄皮书。之后就开始ICO,以太坊是迄今最成功的ICO。2014年底,以太坊正式上线了,第一个版本就已经非常稳定了。并且如果你发现了以太坊的bug,提出来,并且被接受了,你就会得到比特币的奖励。以太坊一上线就支持七种语言,可以避免一种语言带来的局限。

在下面这个图上,大家可以看到,以太坊现在的发展状况有点像三年前比特币的发展情况。我们有理由相信,以太坊还有发展空间。

FTCon2017|微软亚洲研究院闫莺:以太坊的性能与隐私保护如何兼得?_第1张图片

区块链的5层

可能大家也看到过区块链的各种定义和介绍,为了理解隐私问题,我今天再把区块链的基本定义回顾一下。区块链包括几个部分,当有人跟你谈起他在做区块链项目时,你可以问一下他在做哪一块?因为它包括存储、智能合约、上层应用等5层。

FTCon2017|微软亚洲研究院闫莺:以太坊的性能与隐私保护如何兼得?_第2张图片

数据结构

首先,数据结构是比较基础的部分,正如它的名字一样,区块链是一块一块的交易连在一起。这种数据结构的特点是:如果你改了其中一块数据的内容,很容易会被发现。

那以太坊怎么实现的呢?大家看到这个架构图觉得特别复杂。是的,它就是这么复杂,以太坊到现在已经有七千多个结点,来自不同国家,不同目的的人。节点和节点之间彼此完全是不信任的。这些复杂的设计就是考虑到安全性和性能。存储层面上,是每个结点高冗余的存储数据。

一致性协议

如果存在不同的结点,那如何保证数据的一致性呢?这就是我们经常谈的一致性协议,每时每刻我们都需要选一个节点负责决定哪些交易属于下一块,然后广播给大家记录下来。这个lead节点的选取和激励机制是一致性协议研究的重点。

智能合约

我再谈谈智能合约,什么是智能合约呢?就是一段代码。解决什么问题呢?刚才讲到用比特币转钱。那我们能不能把这个做的更灵活?我们举一个例子。

假设即将举办一场球赛,我和Edwin打赌,如果A赢了,他给我100元,如果B赢了,我给他100元。这种场景在线下怎么做呢?我们每个人先把钱给一个第三方,等结果出来之后,谁赢了把钱发给谁,第三方在其中收取一些手续费。智能合约就可以取代这个第三方,它是一段代码定义了上面描述的逻辑。它有自己的账户,可以把钱转给它,足球比赛结果出来之后,结果注入到区块链,我们可以触发这个合约,它就自动把钱转到赢的人手里。智能合约自己的存储空间,智能合约在区块链上的运行时,输入是区块链上的数据,经过处理之后,结果再写回区块链。

FTCon2017|微软亚洲研究院闫莺:以太坊的性能与隐私保护如何兼得?_第3张图片

有人可能有这样的疑问,如果有的人写的代码运行时间特别长,区块链系统会拥堵住吗?

以太坊也有解决方案,它的运行不是免费的,要收燃料费,具体怎么收呢?按照你所消耗的资源,比如CPU资源、存储资源来收,如果你想不停的运行的话,没有巨额资金也运行不起来,用这样的方式,可以降低黑客攻击的成功率。

基于区块链的交易过程到底是怎样的?

讲完区块链的几要素之后,我们再深入一点,在以太坊中,我转了一笔钱,交易过程到底是怎样的?

假设我要给一个人转50元,我在客户端提示转50块钱给他,就会生成一个交易,网络上所有人都可以看到,从谁到谁转多少钱。这个交易就存在整个网络当中,其它结点收到了我的转账,这个帐本就更改了。于是我就有了两个状态,我现在的余额再生成一个新的结点。所有的交易组织成一个Merkel树,根结点也计算出来,我们就把整个值都放到块的头部,最后把这个块跟前面的块连在一起。

实际上我的交易被存成什么样的结构呢?上面所有的信息都是以KV对的形式存储在LevelDB中,key hash值,Value是内容。Merkel树中间结点的内容就是它的孩子节点。如同下面表显示,我们都可以通过它们的信息可以找到对应数值。

FTCon2017|微软亚洲研究院闫莺:以太坊的性能与隐私保护如何兼得?_第4张图片

显而易见,这种方式查询起来效率不高,使用leveldb主要是为了“写”优化。智能合约也是类似的,也是一段交易的内容,存储内容也是以Merkel树的形式存储上去的。

落地的隐私保护技术

现在,我们有了一个稍微具体一点的认识,我们发现比特币或者以太坊的区块链基本上都是明文,除了地址和本身不是那么对应之外,所有的信息都是对应的。

这时问题就产生了,不是说匿名吗?我们要区分匿名和别名,如果你的名字和线下的人没有关联,就是匿名。实际上区块链根本做不到,为什么呢?

比如说我买了一个比特币,我总要通过一些支付途径来支付,在美国交易2000美元以上都是需要实名的,这个地址总是通过某种形式与实际的人有联系。所以区块链并不是匿名的,只能说是别名,既然不匿名了,我们怎么解决隐私问题呢?

首先交易的内容要隐藏好,不要让人看到;但同时别人还要验证这个交易是不是错了,不能都加密。这两者存在矛盾,实际上这是隐私保护技术上的挑战。

现在实际上已经落地应用主要有两种解决办法,分别是:

一种是密码学的原理,先加密,在加密域上进行验证。

另一种是引入侧链,私有状态下,不需要看见的人看不到,需要验证的人通过验证能见到。

形象一点来形容,这两种方法可以称为拼车与烟雾弹。

拼车

我觉得,加密的解决方法类似拼车的概念,我转给某个人钱容易暴露,那我就联合一堆人一起转,你不知道具体谁转给了谁。拼车的生意谁做呢?我们需要在网络中建立几个主结点,主结点是将转账的兄弟姐妹连在一起,但是一个主结点容易被攻击。这时,我们可以不用一个主结点,用多个主结点去拼,这样的话,增加被攻击的难度。

烟雾弹

另外一种技术有点像烟雾弹的模式,之前拼车是几个人都有转账意愿的人拼在一起。但这种技术是找一些“无辜群众”拼在一起。

这个技术具体就是,当我想发起交易的时候,我就用我的私钥和一群人的公钥一起发起,这样就不知道是谁发起的。但其中存在一个问题:如果他们知道你选择的地址,你就暴露了。所以这不是完全的隐私保护,只能说是一部分隐私保护,至少你是在发起人里面的。

零知识证明

这个技术本身不是什么新技术,80年代已经出现了,我们也看到这个技术的复杂度,还有它理论上的重要性。目的是让验证者不知道事实本身的时候,还能判断事情的真假。

南北分支是连着的,有一个钥匙可以连上。老王自称有这扇门的钥匙,但是不愿意直接展示出来。他不愿意把钥匙交出来,我们怎么知道有这把钥匙呢?我们找了一个测试者,同时要防止测试者和老王联合作弊,具体怎么做呢?测试者把眼睛蒙上,然后老王随意走到一个分支,测试者随机要求老王从某一个分支出来,老王都能出来。那能不能说老王有钥匙呢?不能。如果老王进去的分支和测试者是一边的话,也可以出来。所以这种测试要多做,如果老王每一次都能出来,我们就猜测老王是有钥匙的。但是这个验证效率很低。

FTCon2017|微软亚洲研究院闫莺:以太坊的性能与隐私保护如何兼得?_第5张图片

还有一种是非交互性的,即做一次测试就能判断真假。判错的概率低,但也不能百分之百的保证。ZCash铸币过程,给出序列号,同时用zk-SNARK证明我是这个币的拥有者。这样就把详细的信息隐掉了,同时可以验证。

另外有一种侧链的方式,如Quorum,它现在很受欢迎,原因是基于以太坊并且开源,Quorum目前架构,基本上可以满足所有的金融需求。它是怎么做的呢?它引入一个私有状态,只有私有状态允许的人可以看到。私有状态的哈希值和公共状态一起被链接到区块链上,保证数据的完整性。

隐私与性能如何兼得?

我们要做隐私保护,势必会影响系统性能。一方面要注意隐私,一方面要兼顾性能。我们的研究就是如何兼顾两方面,我在这里分享一下微软研究院关于这方面的两个工作:

一个是结合硬件技术,比如说SGX,联盟链中有了它之后,我们就能很好解决隐私的问题,同时保障性能。这个项目还在开发测试中,计划5月份有一个发布。

另外,我们在和客户交流过程中,发现他们有一些需求是可以用区块链来解决,但用传统的区块链系统并不是唯一最好方法解决方案。客户更需要的是一个大家共同拥有、可编程的,共同管理的云数据库。现在,基本上所有的云供应商都有相应的云数据库。比如微软AzureSQL Database 拥有每天上千万客户机时。目前的云数据库确实有局限,就是它只有一个owner,拥有admin权限。在多机构合作中问题来了,谁来做这个共有数据库的owner?

区块链应用过程中,我们经常说,解决了找不到可信找的第三方的问题。那这个可信的定义是什么呢?

如何定义可信任呢?

可信任包括两个方面:

一、可验证可追踪。如果我的数据和更改都可以验证和追踪,等于说无需信任。

二、系统需要稳定性、可靠性和可用性。

区块链解决方案用它的数据结构解决,一的问题可以用分布式存储和一致性协议保障,在云数据库中,二的问题自然被解决。那么,我们如何给云数据库加入可验证追踪的属性呢?于是我们研发了联盟数据库(ConsortiumDB)系统。该系统以传统云数据库为存储,有完善的机制管理membership和rule。

例如,用户可以定义谁能访问哪个表、谁能更改数据、谁可以加入等,都能得到较好的管理。所有规则的管理和执行已经日志的组织利用了区块链的技术,进而实现其他机构对数据库的操作可验证可追踪。

最后,想说的是,区块链技术是基础,是敲门砖,更重要的是思考实际中如何在应用中利用这个技术的优势。隐私保护技术和系统的性能优化只有在明确的应用需求下才能更好的设计。

你可能感兴趣的:(FTCon2017|微软亚洲研究院闫莺:以太坊的性能与隐私保护如何兼得?)