收起
1分钟1小时1天1周1个月

直播 | “区块链100分”线上分享第四十期——分享嘉宾尹松

中关村大数据产业联盟“区块链100分”线上分享交流活动,将于今晚20:30正式上线第四十期。

2020年1月7日 15:55 区块链 底层架构


中关村大数据产业联盟“区块链100分”线上分享交流活动,将于今晚20:30正式上线第四十期。

主办方:中关村大数据产业联盟“区块链100分”& 31区

本期主题:《零知识证明的区块链应用 - 数资科技自研区块链的底层架构》

本期主持人:颜阳

主持人介绍:

颜阳,天津大学管理学博士,高级工程师,北京计算机学会理事、北京航空航天大学软件学院校外导师、国家信息中心深圳大数据研究院学术委员会委员,中国电子学会大数据专家委员会委员、中国大数据产业生态联盟专家委员、区块链+百人峰会联合创始人、中关村大数据产业联盟副秘书长、中科融数(北京)科技有限公司董事长。历任光大证券信息技术部副总经理、民族证券信息技术部总经理、民生证券技术总监等职,多次荣获中国优秀CIO称号。《区块链+赋能数字经济》中文及英文版作者,2019“财经智库”《金融科技的商业之道》作者,《互联网金融+——中国经济新引擎》专著编委,新华社及工信部旗下多家媒体区块链高端访谈嘉宾等。专注在区块链助力大数据智能化行业应用、金融科技应用、数联网理论及标准研究及其在金融、医疗和智慧城市领域实践。

本期分享者:尹松

分享者简介:

尹松,数资科技技术总监,前瑞星公司产品总监、架构师、区块链技术负责人,国家发改委微软架构师。资深研发及研发管理人员,信息安全专家,15年通用商业软件和计算机安全领域研发经验,有深厚的安全行业知识背景和应用领域经验,具备全面的软件研发及管理素质,工作经验丰富。后进入信息安全行业,参与国家信息保密标准制定工作。大数据挖掘及人工智能分析方面表现突出,获得相关国家专利。

好兵:本期分享8点30准时开始,有请主持人颜阳秘书长颜阳。

颜阳:今天的话题非常重要。

颜阳:大家赶快带上小板凳来围观。

颜阳:今晚我们继续与区块链安全方面相关话题:零知识证明(Zero—Knowledge Proof)。

颜阳:不仅非常烧脑,而且在应用过程中也比较有难度。

颜阳:我们有请数资科技技术总监尹松,来分享《零知识证明的区块链应用 - 数资科技自研区块链的底层架构》。有请尹总

尹松:大家好,我是数字科技的CTO,尹松。

尹松:感谢颜总推荐,也希望能够通过这次讲解,大家多交流一些技术方面的内容。

尹松:本次给大家介绍的是一个对于区块链开发者来说都比较难的话题:零知识证明。

尹松:说到零知识证明,需要先讲解一下我们的自研区块链底层的情况。

尹松:数资科技一直以来都坚持自主开发区块链内核,目前自研的区块链是Joinchain,项目版本代号为Pangu(盘古),我们的目标是建立完全自主知识产权的区块链底层,提供区块链的核心能力。实现高可扩展,功能模块化,服务插件化,功能高聚集,低耦合的可以根据实际需求提供定制服务,并能快速部署的区块链系统。

尹松:

尹松:这张架构图是盘古的最初架构。

尹松:从中大家可以看到,盘古的区块链功能及能力已经完全成熟。

尹松:给大家看下我们现在的区块链架构图。

尹松:


尹松:这张图是我们目前的整体架构,和原来相比,很多的细节都有了具体的体现。

尹松:今年的架构图上,已经更加细化,并明确了我们的特点和优势。在进行区块链底层开发的过程中,我们也一直不断收集关于区块链应用的需求。去年与久其软件一起发布的区块链+政务蓝皮书中,我们根据实际场景分析,获得很多潜在的需求。

尹松:其中一点是对于区块链很重要的隐私保护方向。我们发现,很多的时候大家对于区块链的理解就是公开的去中心化数据库,所以有很多人担心:我的数据全部放在区块链上,如何保证我的隐私,是否有一种方法,既不需要我提供隐私数据,又能够证明我拥有这个隐私数据呢?针对这个方面,我们数字科技进行了广泛探讨和深入的技术研究。其中核心的一点就是零知识证明技术。

尹松:我们都知道:在信息安全方面,安全的密码算法和完善的密码协议一直都是研究的两大重点和方向。对于安全算法,从最初的对称密钥密码学算法到非对称密码算法,从经典的RSA算法到椭圆曲线算法,再到AES算法,算法已经具备了相当的安全性。但即使有了非常安全的密码算法,如果对应的密码协议是不健全的、存在漏洞的,那么整个系统还是很易遭受攻击者攻击,甚至击破。

尹松:所以密码协议安全的研究一直是密码学研究的热点之一。而零知识证明,实质上就是一种涉及两方或者更多方的协议,无数的事实证明零知识证明在密码学当中非常有用,同时其的证明验证在区块链技术中也起着重要作用。

尹松:零知识证明(zero knowledge proof),是由S.Goldwasser、S.Micali以及C.Rackoff在20世纪80年代提出的。从本质上讲,零知识证明是一种协议。所谓协议,就是两个或两个以上的参与者为完成某项特定的任务,而采取的一系列步骤,包括以下三个特征。

尹松:

1)协议自始至终是有序的过程,每一步都必须依次执行,在前一步未执行完之前,后面的步骤不可执行
2)协议至少需要两个参与者,一个人可以通过执行一系列的步骤来完成某项任务,但这无法构成协议
3)通过执行协议必须能够完成某项任务

尹松:零知识证明还有一个特点就是在完成协议基本证明任务的基础上,没有向验证者透露所证明内容的相关信息,很好的保护了隐私。

尹松:零知识证明协议至少包括两方,一方为证明者,一方为验证者。证明者是试图向验证者证明其拥有某项知识、或某个论断、或某个能力是正确的,其是拥有的,但却不向验证者透露任何“有价值的”信息,一定程度的保护了自身的隐私。我们一般将零知识证明中的证明者用P表示,而验证者用V来表示。

尹松:我想大家看到这里的时候,可能有一部分人已经晕了,下面我会举个例子来给大家讲解一下零知识证明,更容易理解。

尹松:有关于零知识证明最经典的模型,是Jean Jacques Quisquater和Louis Guillou提出的洞穴模型。

尹松:


尹松:这里有张图片,更容易让大家理解。

尹松:这是一个介绍零知识证明的基本思想的著名故事。在这个故事中,佩吉(Peggy)发现了用来在山洞中打开魔法门的秘密单词。洞穴的形状像一个环,入口在一侧,魔术门挡住了另一侧。

尹松:维克多想知道佩吉是否知道这个秘密词。但佩吉(Peggy)不想向维克多(Victor)透露自己的知识(秘密词)或向整个世界透露自己的知识事实。

尹松:这样,Peggy如何向Victor证明自己知道秘密词,而不让Victor知道秘密词的内容呢?

尹松:他们标记了从入口A和B进入的左右路径。首先,当佩吉(Peggy)进入时,维克多(Victor)在山洞外等着。然后,维克多(Victor)进入山洞,大喊他想让她用来返回的路径名称,随机选择A或B。只要她确实知道魔术字,这很容易:她在必要时打开门,然后沿着所需的路径返回。

尹松:


尹松:如果Peggy不知道魔术字(秘密词),当维克多(Victor)给出与他输入的路径相同的路径的名称,则他只能按命名路径返回。由于Victor会随机选择A或B,因此他有50%的机会正确猜测。如果他们要重复多次(连续说10次),他成功预期到Victor的所有请求的机会就会越来越小,甚至最后趋近于零。

尹松:因此,如果佩吉(Peggy)反复出现在维克多(Victor)的名字出口处,他可以得出结论,佩吉确实很可能知道这个秘密词。

尹松:分割选择协议是交互式零知识证明协议的雏形,其类似于如下将任何东西等分的经典协议:
1)P将东西分成两半。
2)V给自己选择一半。
3)P拿走剩下的一半。

尹松:分割选择协议之所以起作用,是因为P没有办法重复猜出V要他从那一边出来。如果P不知道洞穴密门的咒语,那么其只能从进去的路原路返回。在协议的每一轮中,其有一半的机会猜中V将叫他从哪一边出来,也就是说,有一半的机会骗V。但经过n次之后,P能欺骗V的机会是2的n次方分之一。

尹松:我们总结一下,当P与V完成一个协议后,这个协议是否是零知识证明协议,其必须满足下面三个条件:
1.完备性。当P向V的声称是真的,V有一个大的概率接受P的结论。
2.有效性。当P向V的声称是假的,V有一个大的概率拒绝P的结论。
3.零知识性。当P向V的声称是真的,V在不违背协议的情况下,无论V采用任何手段,只能接收到P给出的结论,而无法得到其它任何信息。(无法得知秘密的本身)

尹松:以上是零知识证明的原理,大家不理解也没太大的关系。只要记住一点就可以抓住零知识证明的精髓。

尹松:无须向别人展示你掌握的秘密信息,即可让别人相信你掌握了这个秘密。

尹松:下面我来讲下,我们怎么在区块链中运用零知识证明技术的。

颜阳:应用很关键。

尹松:大家都知道:区块链上的全部数据都是天然全公开的,所有人都可以查看,翻阅和验证。比特币、以太坊的地址仅仅做到了匿名方式(隐蔽了地址后面的真实身份),一旦某个人知道了钱包地址对应的身份(比如交易所需要实名认证),他就可以通过这个地址的交易信息不断挖掘关联交易的账号,确定新的身份。不仅可以看到你的余额、你所有的转账记录,还能找到和你有关系的其他人员身份。这个我们称之为隐私数据的雪崩效应。

尹松:零知识证明这个密码学相关技术,其最大解决的痛点就是匿名性,也就是说其能很好的保护 “隐私” ,有很好的隐私保护,也可以说是一种安全性的提高。

尹松:也就是说无论是个人还是机构,不想让第三方看到的“东西”,有一个叫零知识证明的技术提供技术支撑。

尹松:说一个实际的场景,和医疗、保险有关系的场景。

尹松:设想一下医疗保险的一个场景,购买保险需要提供个人的体检报告来证明健康状况。如果用区块链来实现的话,代表着个人的体检报告就要记录到区块链上,昭告天下了,我感觉这样子对于任何人来说都是不妥当的。

尹松:这么隐私的数据,没有任何人愿意被别人知道。那么区块链是不是就解决不了这些问题了呢?

尹松:这里我们要说到一个大的概念:隐私计算。

尹松:零知识证明正好是隐私计算中的一种技术。

尹松:私密计算就是用来解决这样的问题。私密计算支持在区块链上记录计算结果,用共识完成对于计算结果的验证,而不暴露计算所用到的原始数据。

尹松:我们用哈希计算举个例子:我手中有个原始数据(可以是任何隐私数据),我先在区块链上记录一个哈希值(隐私数据的哈希值)。如何来证明我知道这个哈希值的原始数据(隐私数据),但是不暴露这个原始数据。

尹松:目前研究的技术主要是安全多方计算(MPC)和零知识证明。现有的匿名交易的实现主要有三类:使用环签名的比如Monero,使用零知识证明的ZCash,还有最近火起来的使用Mimblewimble协议的Grin等。

尹松:Mimblewimble协议的交互需要双方见面,或者同时在线,这会导致其应用场景比较受限。而环形签名如果没有足够多的人一起的话,匿名性是不高的。

尹松:零知识证明的方法就好很多了:对于隐私交易,我们可以把整个区块链系统想象成一个大的地址。所有人都往这个地址里转Token,所有人都可以从这个地址里把Token转走。不像环形签名,所有人之间不需要合作,转账随时可以进行,无需等待。另外,整个系统中,历史上所有的隐私交易都被混合在一起,使整体的匿名性、隐私性也要高很多。

尹松:那么零知识证明是怎样实现转入和转出的分离,并且可以被验证呢?

尹松:每个人在转入Token的时候,都自己生成一个数字(秘密数据),转账的时候在Token上附带一个用这个数字生成的哈希值A,写入区块链系统。

尹松:在提取Token的时候,只需要向区块链系统证明: 我知道一个秘密(私有数据),这个秘密生成的哈希值是A。区块链上的共识层在确认这个证明是有效性后,放行Token的提取。因为哈希值A在区块链上,说明转入的Token是确实存在的,而谁有哈希值A背后的数字,说明那个人真的是转入Token的人。

尹松:而零知识证明保证了在整个操作过程中,没有人知道我的数字(秘密数据)是什么,也就无法伪装成我把Token提取走。

尹松:到此为止,问题仍然存在:上面的这个证明并没有实现转入和提取的隔离。在提取的时候暴露了哈希值A,任何人通过A就可以找到转入的那笔交易,从而把两笔交易关联起来。这个问题如何解决?

尹松:那么我们需要把证明过程升级一下。所有的转入交易都会附带一个哈希值,我们把所有的哈希值组成一个哈希值列表。我的哈希值A也在这个列表中。如果我可以证明:我知道一个秘密,这个秘密生成的哈希值在哈希值列表中。那么我的哈希值A没有暴露,也就没人能把我的转入交易和提取交易关联起来了。

尹松:上面所讲的,就是零知识证明可以做到的事情。当然零知识证明不仅仅可以用来作匿名交易这个事情。比如上面的买医疗保险的例子,同样可以使用零知识证明来实现。

尹松:今天讲解的内容比较深,专业度可能比较大。当然群里也有很多的专家在,如果大家觉得还可以接受,我下面就开始讲解本次最烧脑的部分了。

尹松:我们如何在区块链中运用零知识证明,是一个很大的话题。数资科技的区块链底层正在尝试利用零知识证明来打造一个能够处理隐私数据的区块链核心。

尹松:为了便于理解,我仍然拿上面的哈希值来做例子。大家可以随时把源数据换成隐私数据就行,便于大家的理解。

尹松:我们都知道哈希运算是一个函数,我们需要先把哈希函数转换成一个代数表达式(高中的代数)。哈希函数本身可以就看作一个特别复杂的代数表达式,所以这一步很容易。

尹松:但是对于逻辑语句、控制语句的函数,就不太容易直接用代数表达式了,这也是目前区块链中应用零知识证明的一个瓶颈。我的思路是利用LUA语言进行扩展,对逻辑处理进行优化处理,并形成代数表达式的固定处理模型。

尹松:下面操作涉及的数学知识较多:变成代数表达式以后,我们需要构造一组多项式,使得代数表达式满足条件的一组解,成为这组多项式的系数。

尹松:这样处理的结果是:这组多项式可以互相整除。

尹松:我们的核心思想是对计算过程的抽样检验。在零知识证明中,任何人都不知道原始数据是什么样的,只能进行点点抽查。在抽查点上,计算是不是符合规则。把计算过程表示成多项式,这样抽样检查使用这个多项式,就可以通过有限的(与多项式的次数有关系,次数越少,检查点越少)抽样获得最后的结果了。

尹松:验证的过程是一个交互的过程,这个过程涉及到了两个人之间的交互。有没有方法在区块链上进行实现验证过程呢?区块链上只有用节点来验证结果,如果没有人生成随机的点,那么采用上面的方法就无法实现自动化处理了。

尹松:我们可以把随机的点换成固定的点,提前部署区块链上,就无须交互过程了。但是这样就引入了一个新问题出现:如果提前知道了采样的点,即使没有符合条件的多项式,也可以伪造一个“只在采样点上符合条件的多项式”。就是说可以通过伪造证明,来达到目的。

尹松:这里需要对整个的处理过程再优化一下:引入同态加密。通过同态加密的方法,把固定的采样点藏起来,把加密后的数据写入区块链,一样可以完成验证,同时还不暴露采样点的信息,这样就形成了我们最终的一个方案。

尹松:同态加密这个知识领域不是本次分享的重点,在此就不展开了。

颜阳:正想问。上次陈博士分享过同态加密。

尹松:如果有机会的话,我们还有很多知识点需要展开说明。作为一个技术人员,本次讲解的内容更多的涉及到了区块链的底层逻辑,数学方面的知识,和以前分享的内容不太一致。

尹松:对,上次陈博士讲的同态加密对我们的启发很大。也希望能多和各位老师学习。

尹松:分享的内容虽然不一样,但是大家学习区块链的知识,了解区块链的方向还是相同的。希望群里对技术方面有兴趣的朋友一起多交流。

程清寰:请问尹总您的零知识证明,加减乘除的运算都支持吗?

尹松:当然,我们目前遇到的问题仍然有很多,从函数到代数表达式,再到多项式的转换,实际实现起来难度太高。我们引入LUA也是为了减少相应的难度。

尹松:也许各位有更好的方法,也希望不吝赐教。

颜阳:重庆分群问:反复计算和私密计算是否会影响系统效率?怎么解决。

尹松:我们的零知识证明目前还在开发中,目标是基本运算都能支持。

尹松:对于反复计算和私密计算,肯定会给系统带来一定的负担。但是这些计算主要是运行在节点上的,如果节点能够承担运算是最好的。

程清寰:请问每个节点的tps做到多少了?

尹松:如果节点运算负担太重,可以由专门负责计算的设备完成(怎么感觉变成了矿机的模型)

尹松:其实计算机发展过程中,曾经有过一段时间,除了CPU负责运算外,还有个芯片叫“协处理器”。可能思路和目前的解决方法类似。

尹松:我们目前对于区块链的tps不是很关注,或者说tps不是我们目前最重要的问题。

尹松:我们最重要的问题是实现完全自主可控的区块链底层,利用区块链底层技术对外提供完善的服务支撑。

尹松:tps的问题,会在我们把主要功能或问题解决后,由中间层或业务层来优化。

尹松:我们的设计也是遵循功能高聚集,关系松耦合的方式来做的,尽量让专业的模块做专业的事情。

程清寰:您是主要在联盟链上应用零知识证明吗?

尹松:毕竟,tps可以通过layer2的方式来进行优化。

尹松:我们目前没有为零知识证明的使用限制范围,虽然目前我们是在联盟链上。

尹松:零知识证明等相关的课题我们也在与高校合作,希望能够在某些领域(比如:账号、密码、内容..)做出不一样的应用场景。

程清寰:现在fimax支撑了广东第一个区块链贷款,就是使用了3d零知识证明和全同态加密,效果可能还不错。

尹松:颜总,希望这次没有把大家讲晕了。我们坚信:最终技术的问题总会被新技术所解决。零知识证明为区块链带来的保护隐私的特性,有可能会为区块链带来下一个爆发点。

尹松:凡是与隐私相关的,肯定无法避开零知识证明和同态加密。

尹松:不过,也许不久的将来还能有更好的技术方案出现,大家一起拭目以待。

程清寰:谢谢,您讲的很棒,受教了。

尹松:大家共同学习,共同进步。也希望大家对我们的思路提供更好的建议!

颜阳:这个主题关注的人很多,有机会再请尹博士来分享一下同态计算及其他隐私计算的话题。

颜阳:今天因为时间关系,先到这里。非常感谢尹总分享。大家有问题可以继续与尹总私聊。