首页  >  要闻 >  区块链 >  区块链常识| 什么是零知识证明
区块链常识| 什么是零知识证明
 茨威格的猫    
2019年11月06日 09:30
  收藏
   

当今密码学世界有非常多的术语,对于刚刚进入币圈的小白来说,可能一直听到,但不懂什么意思,以至于导致了许多的错误理解和误用。许多人将零知识和“非常非常安全”划上了等号,还将它与加密系统或匿名网络联系起来——这些东西实上与真正的零知识协议毫无关系。


零知识证明是密码学家设计出来的最强大的工具之一,但同时,理解它的人也不多。今天,我将试着以通俗易懂的表达方式来介绍什么是“零知识证明”,并解释到底是什么让它如此特别。


在上世纪80年代初,“零知识”的概念最早由麻省理工学院的研究人员 Shafi Goldwasser, Silvio Micali和Charles Rackoff 所提出。当时他们正在研究与交互证明系统相关的问题,这系统使得甲方(证明者)可以和乙方(验证者)交换信息,并借此说服乙方接受(通过验证)某个数学论述为真。


零知识证明这个问题不是单纯的理论思考,而是在真实、具体的应用中,会面到临的问题。


我举个例子,在现实生活中,大家用账号密码的方式登录微信、微博等社交软件时,在输入密码后,APP会把你的密码发送给服务器(当然,这里应该会加密后再发送的),然后和服务器中的密码进行比对,一样的话,就可以成功登陆了。


可这里有个问题。大家发现了吗?实际上,服务器知道我们的密码。


大多数系统就是以这样糟糕的方式进行“证明”的,因此,如何保障密码安全呢?可能只有祈祷服务器不会遭受攻击了。


现在我们举个“真正的”零知识证明例子。想象一下,现在我是一个电信业巨头,积极参与到非洲地区的电信网络建设中来。现在我要部署一个新的蜂窝电信网络。(这里我还是解释一下为什么叫蜂窝网络吧。大家看下面第一张图,是移动网络拓扑图,有没有很像蜂窝呢?对!名字就是这样来的)

零知识证明

为了方便讲述,把网络架构图这样展示,如下。图中的每个顶点代表一个无线电塔,每一条连线代表无线电塔信号两两重叠的区域,这意味着连线上的信号会互相干扰。(相邻两个电塔(小区),信号频率相同,产生的同信道干扰)。


为了避免这样的干扰,在设计网络架构时,我就想到了用三种不同的频率来部署。

零知识证明

不过现在,我有了新的挑战!这个挑战来自我该如何部署不同的频率,使得相邻的每两个电塔不具有相同频率。我们现在用不同颜色来表示不同频率,可以很快找到一种解决方案如下图所示。

零知识证明

可能有很多了解过的朋友已经发现,我刚才讲的就是着名的算法问题——三色问题。大家也就知道,这个问题有趣的地方在:某些非常庞大的网路中,我们很难找到解,甚至连证明问题有解都办不到。


如果只是上面给的这种示例图,我们用手就能轻松找出解。但如果今天我的无线通信网络规模特别复杂而庞大,我以我所能调配的计算资源都无法找到解答的情况下,我该怎么办?我还可以把这个问题“外包”给拥有更庞大算力的人呀!比如去找谷歌帮忙啊。


但这又会导致一个问题。谷歌找到了有效着色方法,因此耗费了大量的算力。不过在我得到有效方法之前,我是不打算付钱的。同样,谷歌在收到钱之前,也不会愿意给我着色方法的副本的。以此,我们双方陷入了僵局。


现在有一个大仓库、大量的蜡笔和纸张。哦,对了,还得有C位选手——帽子!

零知识证明

下面是运作原理。


1、我进入仓库,在地板上铺满纸张,并在空白的纸上画出电塔图;


2、谷歌工程师进来,蜡笔中随机选三种颜色,然后照着他们已经算出来的解决方案进行着色(颜色不重要,方案有效就行)。着色完成后,每个纸上的电塔用帽子盖住,然后离开仓库。


我回到仓库,看到下图。很显然,谷歌的方案我是看不出来的,我也不知道他们的方案是否有效。

零知识证明

为了消除我的疑虑,谷歌工程师告诉我,可以随机选择其中一条线,然后要求他们揭开对应的帽子,这样我就能看到他们着色方案的一小部分了。如下所示。


谷歌工程师方案没问题的话,这两种颜色一定是不相同的。但我这时候会想,万一只是碰巧呢?在目前条件下谷歌仍有很大的可能是给了我一个无效的着色方案。假设一共有X条边,在仅仅是经过以此揭开帽子的观察后,我仍有高达 (X-1)/X 的概率被骗。


好了,谷歌也不想浪费了大量算力的方案,却得不到付款。就让我再一次,重新进行观察。


刚刚的运作原理,谷歌工程师再按照方案做一遍,只是蜡笔的颜色,换了。


我这时候再随机选择一条线,然后谷歌工程师揭开帽子,进行验证。这次情况会好些,我对他们有了更多的信心,但骗我的概率依然存在,概率为 [(X-1)/X]* [(X-1)/X](在1000条线的情况下,大约有99.8%的可能性,还是比较高。)


不过好在,这个挑战可以一直进行下去,不断重复以上操作,直到我们相信为止。


不过还是别这样了,太麻烦了,这时候还是写段代码来验证以上逻辑更加方便。事实上,我被骗的概率是一直存在的,但我可以把这概率降低到一个程度(进行X^2次挑战),那时候,谷歌只剩下微不足道的概率可以骗我,这概率低到我大可以放心付款。


在这整个过程中,不只有我需要保护,谷歌也需要。所以,在我进行“无数次”挑战时(随机选出一条线来验证的过程),我是无法推敲谷歌耗费了大量的算力得出的着色方案的,因为每次验证后,他们都会换三种颜色。我获得的信息,对我来说,毫无帮助,每次挑战的结果也无法被串联起来。


这就是零知识证明。

零知识证明特性


零知识证明有三个特性,任何零知识都必须满足。简单来说:

1、完整性(Completeness)。如果谷歌说的真话,那么他们最终能说服我(至少让我相信可能性非常高)。

2、安全性(Soundness)。只有当他们说的是真话时,谷歌才有可能说服我。

3、零知识性(Zero-knowledgeness)。我无法从中获得任何关于谷歌解决方案的信息。

币海启行微信公众号

关注币海启行微信公众号了解更多。

编辑: 茨威格的猫
更多财经请关注 WX: Chaocaijing123456
币海财经: 全球财讯门儿清 https://www.bihai123.com/
声明: 本文由入驻币海编者上传,观点仅代表编者本人,不代表币海财经赞同其观点或证实其描述,请自行判断。

延伸阅读