专栏名称: 雷峰网
中国智能硬件第一媒体
目录
相关文章推荐
TechWeb  ·  iPhone 17 Pro ... ·  3 天前  
51好读  ›  专栏  ›  雷峰网

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

雷峰网  · 公众号  · 科技媒体  · 2017-03-26 22:15

正文

雷锋网 AI 金融评论按:3 月 25 日,由开源社、TopGeek、汇智 Tek 联合主办的中国区块链和金融创新科技峰会(FTCon2017)在上海举行,微软亚洲研究院主管研究员闫莺,就基于以太坊的隐私保护技术,发表了她的观点。据雷锋网 AI 金融评论了解,闫莺曾获得微软学者、IBM 全球英才称号,发表国内外顶级会议期刊论文 30 余篇,专利 10 余项。

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

以下是雷锋网 AI 金融评论整理的演讲全文,并对其进行了不改变文章原意的编辑。

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

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

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

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

以太坊的兴起

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

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

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

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

区块链的 5 层

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

数据结构

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

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

一致性协议

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

智能合约

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

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

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

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

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

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

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

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

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

落地的隐私保护技术

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

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

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

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

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

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

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

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







请到「今天看啥」查看全文