什么是零知识证明(Zero Knowledge Proof, ZKP)?ZKP意味着A可以向B证明,他知道特定的信息,而不必告诉对方自己具体知道些什么。在这个例子中,A是证明者,B是验证者。在密码学中,这尤为有用,因为这将为证明者提供一层额外的隐私保护。
运行一个ZKP,要满足以下这些参数:
完整性:如果陈述属实,那么诚实的验证者能被诚实的证明者说服。
可靠性:如果证明者不诚实,他们无法通过说谎来说服验证者相信陈述是可靠的。
零知识:如果陈述属实,那么验证者无法得知陈述的内容是什么。
举一个零知识证明的例子。让我们观察一下阿里巴巴洞穴是如何运作的。在这个例子中,证明者(P)对验证者(V)说,他知道洞穴后面暗门的密码,并提出在不向验证者透露密码的情况下证明此事。那么,其验证过程如下图所示:
-Image courtesy: Scott Twombly (YouTube channel)-
证明者可以走路径A或者路径B,假设他们一开始决定通过路径A到达暗门。同时,验证者V来到入口,他对证明者选择哪条路径并不知情,并宣称他们希望见到证明者在路径B出现。
如图所示,证明者确实出现在路径B上,但万一这仅是巧合呢?也有可能是证明者凭运气在出发时选择了路径B,却因不知道密码被困在了门口。
所以,我们需要通过多次试验来确定测试的有效性。如果证明者每次都能出现在正确的路径上,那么证明者的确可以在不向验证者透露密码的情况下,证明自己知道密码。
区块链中的零知识证明是如何应用的?
许多基于区块链的技术都在使用Zk-Snarks。事实上,以太坊在大都会阶段就计划引入Zk-Snarks,并且将其加入以太坊的功能库。Zk-Snarks是“零知识简洁无交互知识认证”的简称,是一种在无需泄露数据本身情况下证明某些数据运算的一种零知识证明。
以上内容可用来生成一个证明,通过对每笔交易创建一个简单的快照来验证其有效性。这足以向信息接收方证明交易的有效性,而无需泄露交易的实质内容。
这就实现了以下两种情况:
实现了交易的完整性和隐私性。
实现了系统的抽象性。由于无需展示整个交易内部的工作方式,因此系统非常易用。 因此,以上就是区块链使用的一些重要的加密函数。现在,让我们观察其第二个支柱,经济学。