>>返回主页
华南理工大学教授唐韶华:区块链隐私计算框架

2019-12-07 15:10

微信图片_20191207183537.jpg

  各位尊敬的院士、领导、嘉宾朋友们,下午好!特别感谢大会主办单位对这次的邀请,给大家分享一下关于区块链隐私计算框架方面我们做的一些思考。

  这个是准备要讲的一个提纲,隐私计算其实它的概念是比较大的,我这个报告其实是特别侧重面向区块链当中智能合约的隐私计算的一个解决方案,来给大家分享我们的一些思考。那我们先看一下关于区块链智能合约隐私计算这方面相关的定义。

  我们说什么叫区块链,我们面向区块链,考虑区块链,我们说区块链它是一种分布式的架构和计算的范式,它利用点对点网络技术和共识算法来生成和更新数据,利用P2P的网络来更新数据,利用密码学保证数据传输、存储等方面的安全,利用代码智能合约来操作数据,所以我们在研究区块链这个技术的时候,其实我们把它当做一种分布式的计算架构,计算的模式来计算研究的。关于智能合约,所谓一个智能合约其实是依靠以数字形式定义的承诺,包括合约和参与方可以在上面执行这些协议,屏幕的右边显示的是智能合约,智能合约是附属在区块链里头的,智能合约它有一些存储的区域,这个存储把智能合约一些中间值、中间状态存储起来,更重要的是智能合约里面有代码部分,这个代码根据不同的条件执行相应的代码,所以智能合约本身是计算机的一段程序,我们通常也把他叫做图灵完备的程序。

  我们说区块链发展到今天已经经历了所谓1.0、2.0、3.0,区块链1.0我们把它叫做可编程的货币,2.0我们把它叫做可代表的区块链,区块链3.0我们把它叫做可编程的设备,区块链在各行各业会得到非常广泛的应用,一个基础的网络设施能支撑各个行业关键的应用,到了区块链3.0区块链会和其他一些技术,比如说安全、人工智能会有一个深度的融合。

  我们再看一下今天我要说的一个主体关于隐私计算,之前听过很多隐私保护、隐私计算,其实是这几年出现的一个名词,我们可以从狭义和广义来理解,所谓狭义的隐私计算 ,我们在计算的过程中需要保护一些隐私,这是最直截了当的定义,广义的定义有一篇参考文献,这个文献对于隐私计算给了这样一个定义,他就是面向隐私信息全生命周期保护的计算的理论和方法,是隐私信息的所有权、管理权和使用权分离时隐私泄露的代价,隐私保护和隐私分析复杂性的可计算模型供应化的系统,下面这个图形也给出了整个隐私的全生命周期里面涉及需要保护的计算方面的问题。这个报告没有牵涉那么广,还是属于比较狭义的隐私的计算,也就是说在某一些关键的环节来保护隐私来进行计算。

  我们先看一下在智能合约当中,其实会有什么样一些隐私的问题出现,我这里列了一些主要的问题,比如说用户身份隐私可能会泄露,然后执行智能合约的时候,它的输入输出、计算过程、计算结果里面的一些隐私可能会泄露,还有智能合约的代码私密性可能也会泄露,我们再详细看一下,我们结合一些案例来看一下区块链应用上面,这个案例是区块链上面进行一个匿名的竞拍,竞拍者在不公开自己报价的情况下,向拍卖者出价,大家是在网上进行竞拍,最后通过这套规则却能够让合适的竞拍者能够中标,是希望做到这样一个目的。其实智能合约实行过程中我们需要保证这样一些条件,首先我们说了第一个关键字它是匿名,我们是需要参与者参与竞拍的都是匿名的,希望大家都能够隐藏起来,不希望参加拍卖暴露了我个人身份的ID。第二个各方出价是私密的,我竞拍一个股东这个人可能出价15000、可能出价18000,还有可能2万,大家的出价都是保密的,我们列的这几点目前的区块链能不能很好的做到,其实我们提出几个问题,首先目前的区块链并不能够做到完全的匿名,这里要区分两个概念,一个是叫假名,一个叫做匿名。目前的比特币也好,以太坊也好等等很多的区块链应用当中,其实做到的是假名,他们不能做到匿名,我们就想什么是假名,就像比特币、以太坊这些系统当中没有使用真实的姓名,使用钱包的例子来代表使用者的身份,在不同的交易当中可以使用不同的钱包,所以让人家有一种假象以为他是真的匿名,其实他是一个假名。什么叫做匿名?没有关联性的假名叫做匿名,这几年的研究,像比特币很容易受到去匿名化的攻击,像比特币、以太坊不具备匿名性的,右边这个图就是说一个人可以开很多帐户跟钱包,其实通过一些关联的分析,可以把同一个用户多个例子能够关联到一个地址簇上面,我们就来看一下怎样做去匿名化的攻击,利用统计规律和对比来实施去匿名,首先根据大量交易的记录,对交易的例子进行关联,得到的两的地址,我们看到这个图,其实可以看到有不同颜色的圆圈,虽然你一个人 有很多的钱包、很多的交易的身份,但是我们可以通过一些关联把他具备,得到了地址簇,根据其中已经知道的地址,比如交易所的地址簇,交易所的地址簇大家都知道,以及某些虚拟货币的商家,我们对他贴标签,在结合现实当中的对比的知识,给个人的地址簇打上特征的标签,可以进行确定化的攻击 ,确定化可以包括比特币财产的交易的编号等等。这个其实很容易得到,比如你拿着比特币去咖啡店买一杯咖啡,公共场合有很多监控摄象头万一被拍下来,你的人的脸很容易就识别下来了,虽然你的交易的地址用的是假名,但是就可以跟你现实生活中真实身份对上了,经过这些 步骤其实也是一种大数据的分析,完全可以进行去匿名,目前的区块链系统并不能够真正做到匿名,只能做到假名。

  我们再看第二个问题,怎样保护竞拍数字的隐私,当一个用户调用合约 ,他的调用参数是存储的,对于用户的数据安全是一种泄露,我们举个例子 ,我们有一个程序员利用智能合约存储Hash值,希望用智能合约,你用户要验证你的身份需要输入你的口令,这个口令输入到智能合约中,和他已经存在系统当中的Hash来做对比,对比正确,你的身份表明就是正确的,这个可能没太大问题,我们现在很多的系统有是这么做的,但是这里有一个什么问题呢,要用智能合约的参数他其实是明文的,我们有一个交易(英文)直接就可以把他读出来了,轻轻松松我就可以把你输入的口令拿到了 ,这个时候你的隐私完全泄露了,我们怎样保护合约当中输入的机密性 ,输出的机密性是我们面临的一个挑战。

  第三个问题怎样保证智能合约代码的一个私密性,举个例子在以太坊当中智能合约生成的虚拟机,他的代码是全网公开的,因此可以通过反编译的方法得到智能合约的原代码,通过代码可以找到安全性的漏洞,然后实施攻击,这个图很像汇编的码一样,现在很多反编译的工具,反编译之后得到就是右边的图,右边的原码完全是清晰可读的,这个时候就可以分析这个代码具体有没有什么漏洞,非常遗憾智能合约当中有相当多的代码都是存在安全问题的,往往很容易实施攻击。

  这里就是面向智能合约的隐私计算,我们有什么样的一些技术手段去解决他?这里我就集中几个要点,这个主要是用到了密码学当中的一些技术,包括零知识证明,安全多方计算,可信计算环境等等,首先说零知识证明,我有一个定义我不告诉你,但是通过一定的协议可以向你证明我确实拥有这个证明,他的定义就是证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的,阿里巴巴知道了藏宝图藏在什么地方,但是他又不能告诉大盗,告诉了大盗就把他杀了,阿里巴巴又要想一个办法让他们知道确实他有一个藏宝图。这里有一个例子zk SNARK,在区块链当中尤其一些币就利用了这个零知识证明,(英文)利用零知识证明的协议来构造,这个技术达到什么目前,可以隐藏用户的身份和交易的金额,右边给了一个图,其实我们发现零知识证明我们其实也是能够用来解决智能合约的用户身份的匿名性,零知识证明是一个不错的技术手段。

  我们再看第二个技术手段叫做安全多方计算,我们首先来看一下有一个问题叫做百万富翁问题,简单来说有两个百万富翁,就他们两个人,在没有第三方存在的情况下,他们想要比一下究竟谁的钱更多,A百万富翁有150万,B有180万,但是他们相互都不能够把自己真实的财富告诉给对方,AB两个人在没有第三方的情况下,通过安全计算的情况下就可以算出来究竟是A的财富更多还是B的财富更多,姚期智在1982年提出百万富翁的问题,安全多方计算完整的描述我们简称NPC,他们在没有可信第三方的情况下安全进行多方协同的计算,也就是在分布式的网络当中多个参与者各自持有秘密的输入,这个输入我不告诉别人,各方希望共同完整对某个函数的计算,要求某个参与者除了自己的计算结果以外是不能够得到其他参与者输入的任何的信息的,这是关于安全多方计算的描述,我们一看安全多方计算其实跟区块链有一个天然的结合,他是无可信的第三方,我们区块链本身也是叫做去中 心的,不需要可信第三方的,他是在分布式的网络当中来执行的协议,我们区块链天然就是P2P点对点的网络,安全多方计算这么多特性真的能够跟区块链有一个完美的结合,这个结合其实已经有一个尝试,叫做HAWK这是2016年也是我们安全学术界一个隐讳。HAWK能够利用安全多方计算,保证智能合约执行过程当中数据的隐私,尤其输入的隐私,这个完美的做到了。

  我们简单看一下HAWK是怎样保护合约数据的隐私性的,右边这里我给了一段代码的例子,这个代码可以分为公有部分和私有部分,文字比较小,大家拍下来放大之后可以看到,有一个红色的字叫(英文)还有一个红色的字叫(英),私有的达到隐藏客户的身份的目的,公有提供押金的逻辑,保证交易方不能够在中途的退出,这里给我们留下一个思考问题的空间,为什么要押金,为什么不能够让参与计算的用户中途退出呢?这个其实就是我们来总结一下,HAWK他的一个局限性,目前安全计算的效率还是比较低的,计算的时间在以太坊当中消耗的油耗还是比较高的,然后刚才我们看到所谓的中途不能退出,他这其实是要求参与者中途是不能退出的,万一这个参与者我们说区块链他本身是一个点对点的分布式的网络,各个参与者各种各样的 原因可能确实要退出,并不是他刻意故意退出,比如网络不好,机器突然出了故障,一旦参与者退出,导致安全多方计算协议的执行会失败的,所以HAWK刚才有一个特别的规定,出乎意外HAWK仍然不能保证智能合约代码的私密性,我们仍然可以通过反编译的手段获得合约的代码。

  那怎么办?我们再看一下COCO,他理论上可以用来保护任意区块链系统的隐私性,这个只是说理论上,这个COCO里面的硬件也是问题百出的,COCO框架不是独立区块链的协议,提出信任的基础,可以整合现有的区块链的协议,COCO框架需要充分利用可信计算环境,需要有一个可信的芯片,比如SGX、AMD 、SEV,能够提供这样一个TE的软件环境,通过TE创建可信的网络,右下角左边是没有TE的支持,有了TE,COCO的框架能够运行智能合约的代码,节点和节点之间也能用安全的通道来解决问题,他能够保证代码运行的时候,内部的数据对外界是不可见的,整个运行是锁在保险柜的,也不能篡改里面的运行结果,还能保障区块链协议的数据的机密性和完整性,放在保险柜的代码对外界是不可见的,你想反编译这个代码你是做不到的,还有数据的完整性在保险柜完全得到保障,区块链运用在成员节点当中高效运行,这是COCO运行的原理,细节我就不展开了。

  我们分析一下COCO的优点,简单来说解决了性能、隐私、组织管理三大“顽疾”,吞吐和交易相应时间接近数据库的速度,支持更丰富灵活的隐私保护模型,提供可编程的管理模型以支持任意的分布式的管理策略,支持非确定性的交易与运算,他的局限是哪里?COCO理论上他可以兼容任意的区块链,但是其实目前很少有公链使用COCO的框架,需要特殊的硬件来支持,在普及上面存在一些问题,其实后面我们再看到可信计算环境的芯片硬件本身也存在一些安全问题,有什么安全问题我们来看一下,目前的可信计算环境芯片存在这样一些问题,我们以两家非常著名公司的可信计算芯片为例,Intel SGX目前很多文章推送出来,也存在一定的安全问题。另外一款芯片AMD的SDV他的设计存在非常严重的问题,虚拟机寄存器他的信息是明文保存的,这个其实很糟糕,他可以造成任意信息的泄露,物理内存加密缺乏完整性的验证,这个也是很严重安全性的漏洞,还有没经过保护的IO的操作也可以造成数据的泄露。

  造成芯片/硬件安全漏洞的核心原因,处理器性能优化机制存在安全风险,对处理器设计的优化、质管性的优化往往忽视了安全的因素,核心之一其实就是要解决安全问题,硬件软件、性能、安全要同时考虑。关于区块链隐私计算就是我们有这些问题其实是需要思考的,一个就是安全和教育,我们现在用了很复杂的密码协议可能很安全,但是往往的效率还不高,所以我们怎样保障安全的同时提高算法的效力是我们长期要做努力的方向。

  另外一个是集中式和分布式的问题,传统密码学的算法、安全多方计算往往是在协议设计的时候在集中式的计算模式方面来做的,区块链是典型的分布式计算,要用到区块链的时候,我们一定要用分布式的改造,还有同步网络和异步网络的问题,区块链分布系统往往可能是一个异步的网络,所以把密码这些技术用到这种分布式网络中,异步网络往往也是需要考虑的。

  还有一个是隐私保护和可监管性的问题,我们不能加强隐私保护使得区块链变成犯罪分子的天堂,零知识证明保护用户的身份隐私,安全多方计算保护合约数据的隐私,可信计算环境,保证合约代码的私密性,要特别重视安全芯片和区块链的结合,以上是我的一个分享。

0