零知识证明的三个典型案例
零知识证明(Zero-Knowledge Proof,ZKP)是一种在不泄露陈述内容的情况下证明陈述有效性的方法。它是一个证明系统,包括证明者、验证者和挑战,使用户能够公开分享知识或所有权的证明,而不揭示其细节。
在密码学中,零知识证明允许用户在不透露秘密内容的情况下,说服其他用户知道某事或已经做过某事,它是迄今为止最强大的密码学工具之一。在本文中,我们深入探讨了零知识证明的概念,并提供不同的示例,以帮助读者理解它们的工作原理。
ZKP的简要历史
密码学中的零知识首次出现在1985年的论文《互动证明系统的知识复杂性》([GMR85])中,由先驱者Shafi Goldwasser、Silvio Micali和Charles Rackoff提出。他们提供了今天广泛使用的零知识证明定义:
“零知识协议是一种方法,通过该方法,一方(证明者)可以向另一方(验证者)证明某个陈述为真,而不揭示任何信息,除了这个特定陈述为真。”
零知识证明必须满足三个性质:
完备性:如果陈述为真,诚实的验证者将被诚实的证明者说服。 严密性:如果陈述为假,没有不诚实的证明者能够说服诚实的验证者。证明系统是诚实的,不允许作弊。 零知识性:如果陈述为真,没有验证者会获得除了这个陈述为真之外的任何信息。
交互式零知识证明要求证明者和验证者进行来回对话,以完成证明。非交互式零知识证明是指证明者向验证者发送单个消息,验证者能够在不需要证明者进一步通信的情况下检查证明的有效性。
zk-SNARK(Succinct Non-Interactive Arguments of Knowledge)可能是最流行的零知识证明形式,最早出现在2011年的Bit+11论文中。到2013年,多亏了Pinocchio PHGR13论文,零知识证明可以在现实应用中使用,该论文使zk-SNARKS适用于一般计算,尽管速度较慢。2016年提出的Groth16算法大大降低了计算复杂性,使zk-SNARKS非常高效,至今仍然是标准。
然而,可信设置对于这些零知识协议的安全性至关重要。必须使用初始过程生成加密参数,以便能够运行零知识协议。由第三方执行此操作,以确保加密参数是随机、不可预测和安全的。
随后在2017年引入了Bulletproofs(BBBPWM17),在2018年引入了zk-STARKs(BBHR18)。与前任不同,它们是不需要初始可信设置的范围证明类型。2019年的PlonK论文实现了通用零知识证明算法,这意味着只需要启动一次可信设置,而与之相比,Groth16需要每个电路都有一个单独的可信设置。
由于领域的发展,零知识证明已经从纯理论过渡到在区块链、安全通信、电子投票、访问控制和游戏中具有有用的实际应用。随着它们继续投入商业应用,将会有更多令人兴奋的发展来推进技术。
以下是一些概念性示例,以帮助你在不涉及复杂理论和高级数学的情况下直观地理解不同级别的零知识证明(ZKP)。
第1级:向孩子们解释ZKPs-示例:《瓦利在哪里?》
在不泄露其位置的情况下,最简单的证明自己知道某事的方法可以通过常用的“瓦利在哪里?”示例来展示。
你和朋友想要找到瓦利。你知道瓦利在图像中的位置,但你的朋友不相信。你如何向朋友证明你知道瓦利在哪里,同时又不泄露他的位置?
你拿出一张大纸,盖住整个图像,通过一个切口向朋友展示瓦利的图像。你可以证明你真的知道瓦利的位置,但你的朋友不会获得瓦利的位置,因为相对于图像的确切坐标对他来说仍然是未知的。
这是一个非交互式零知识证明的简单类比。透过孔隙看到瓦利的任何人都能够证明瓦利的存在,以及证明者知道他在哪里,同时又不泄露任何其他信息。
第2级:向朋友解释ZKPs-示例:成员证明
另一种思考零知识证明的方式是通过这个锁定保险箱的示例。
你遇到一个不认识的人,但她声称也是你所在团队的成员。你如何知道是否可以信任她?幸运的是,你的团队有一个带锁的保险箱,只有你的团队成员知道秘密组合密码,可以打开保险箱。因此,写一条秘密信息并放入锁定的保险箱中。
验证者写一条秘密信息并放入锁定的保险箱中。
符合要求的证明者具有组合密码的知识,打开锁定的保险箱。
证明者将秘密信息交还给验证者。
验证者确信证明者真的知道组合密码,因此可以信任。
如果这个陌生人是她所说的那个人,她会知道组合密码。因此,她将能够打开锁定的保险箱,找到你的秘密信息,从而向你证明她实际上是你团队的受信任成员。
这是交互式零知识证明的类比。只有真正是该团队的成员才会知道秘密组合代码,从而能够访问锁定的保险箱,从而在不泄露任何其他信息的情况下证明他们的成员资格。
够证明瓦利的存在,以及证明者知道他在哪里,同时又不泄露任何其他信息。
第3级:向团队解释ZKPs-示例:不透明定价
在这个示例中,您和竞争对手发现您正在从同一供应商购买相同的材料。您想知道每千克是否支付相同的价格。但是,您之间缺乏足够的信任来透露各自的价格,您还受到不得分享此信息的合同约束。
假设材料的市场价格只能为100、200、300或400每千克,我们可以为这种情况设置一个零知识证明。让我们按照以下步骤解释这个想法:
您和竞争对手想要知道是否支付相同的价格,同时不泄露各自支付的金额。
我们获得了4个带锁的锁盒,每个盒子上有一个只能放一张纸的小插槽。它们分别标有每千克的价格100、200、300和400,并放置在一个安全的私人房间中。
您首先独自进入房间。由于您每千克支付200,您拿走了标有200的锁盒的钥匙,并摧毁了其他盒子的钥匙。然后您离开房间。
您的竞争对手独自进入房间,带有4张纸,其中1张上面有支票,另外3张上面都有叉号。由于您的竞争对手每千克支付300,他们将带有支票的纸张放入标有300的锁盒中,并将带有叉号的纸张放入其他锁盒中。然后他们离开房间。
在他们离开后,您可以带着只能打开标有200的锁盒的钥匙返回。您会发现一张上面有叉号的纸,现在您知道您的竞争对手没有与您支付相同的金额。
您的竞争对手回来后,看到您手上有一张上面有叉号的纸,所以现在他们也知道您没有与他们支付相同的金额。
如果您得到一张上面有支票的纸,您俩都会知道您支付相同的金额。由于您得到的纸上有叉号,您俩都知道您没有支付相同的金额,但也不知道对方支付了多少。
您俩离开时只知道您没有支付相同的金额,但您俩都没有获得对方支付了多少的知识。
这是使用原始半范围证明的交互式零知识证明的另一个类比。重要的是要注意,所有这些示例都有限制,并且必须采用某些假设,但它们足够形象地说明了它们的工作方式。
ZKP的简要历史ZKPs如何帮助业务发展
零知识证明和协议并不是魔法,但它们是区块链技术中令人兴奋的前沿。它们在需要敏感信息的各种应用中具有巨大的潜力,例如提供密码证明、身份证明和成员证明。
像Monero和ZCash这样的加密货币利用ZKPs为其用户保持高水平的用户和交易隐私,而像Nuggets和Mina这样的公司也使用ZKPs,允许用户使用经过验证的现实世界信息进行身份验证,而不会危及其个人数据。甚至ING银行也实施了ZKPs的使用,使他们的客户能够提供诸如在抵押贷款申请中证明银行账户中的金额而不泄露金额,或证明他们居住在欧盟国家而不泄露国家等证明。
作者:Tian Daphne
原文:https://www.circularise.com/blogs/zero-knowledge-proofs-explained-in-3-examples
热门文章:
招标 | 近期隐私计算项目招标中标42(广西电网公司、云南农业职业技术学院、中国电信)