
之前看区块链项目白皮书经常会看到白皮书中提到的“零知识证明”,但是一直没有真正搞懂他到底什么意思,听了Ulord的学习课程终于搞明白“零知识证明”的意思,现摘录如下文。
白话零知识证明
查阅许多资料后发现,文献大概有两个派系,一派举例派,通过很多通俗易懂的例子来解释什么是“零知识证明”,一派是学术派从“零知识证明”的概念、原理、发展等进行详细阐述。作者认为两个派系各有千秋吧,至于出现的一些批评某些实例不严谨的文章,这里只能呵呵了。
到底什么是“零知识证明”?简而言之,证明自己能做某事,但又不泄露与做某事有关的重点信息,这一过程就可以说是零知识证明过程。
这里的“知识”用“信息”替代可能更便于理解。还是说一个例子吧,如你想证明你能打开某个房间的锁,但你不是出示自己的钥匙,而是在房间被锁的情况下拿出来房间里面的某件物品。这样做有什么好处呢?如果直接出示钥匙,可能有被人复制钥匙的风险,这里钥匙就是“重点信息”。可能让我们感到困惑的是“零”这个字了,太绝对,不论用什么方法来证明,应该都会留下蛛丝马迹,确实如此,这也是很多人攻击所举实例不严谨的原因所在,所以本文更多的用是否体现“零知识证明”思想来描述某一场景。
为什么需要它?数字货币为什么需要“零知识证明思想”?这个问题应该从比特币谈起,在比特币系统里,用户拥有很多地址,我们可以把这些地址想象成银行卡账号,而且这些地址与用户的真实身份没有联系,所以比特币系统有一定的匿名性。
然而,比特币这种设计足够安全吗?或者说隐去真实身份后,会不会有其他重要信息的泄露?随着专业人员的研究,答案是肯定的。由于比特币用户参与的每一笔交易都非常清楚的记录在区块链上,所有交易信息完全公开,通过对每笔交易的输入地址和输出地址进行仔细分析,我们能够知道很多地址之间的关联性,进而知道哪些交易属于同一用户。反过来,一个人如果通过跟你的一次转账,得到了你的一个比特币地址,他就有办法得到你的其他一些地址,最后得到你更多地址的信息。从这一点来看,比特币系统确实是有泄露个人隐私的风险。我们需要一个更安全的方法,在完成一笔交易的同时,不会或者尽量少地在链上留下对别有用心者有用的信息。用另一句话来描述就是,你向矿工证明你可以使用某一笔钱(你有相应的私钥),使用完成后不会留下一些泄露你隐私的信息(你其他比特币地址的信息或用户信息)。
怎么使用它?现在的问题就是,如果A要转10个币给B,他应该怎么做?如果直接按照比特币的方法,会有隐私泄露的风险。我们不妨这样来做,A把自己的10个币分成若干份随机投入一系列中间公用的“混合容器”(其他交易参与者也可以将自己的币投入进来),容器将内部所有的币再随机拆分成若干份,最后将总量为10个币的数份转给B。这种方法的好处就是,我们成功地证明了10个币属于A,但不能通过交易知道B的10个币是A转过来的,成功地保护了用户的隐私。
百度百科的描述
“零知识证明”-zero-knowledge proof,是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于验证,将可以有效解决许多问题。
网友评论