什么是零知识证明?

  1985年,来自MIT的S.Goldwasser、S.Micali 及 C.Rackoff 在研究论文《互动式证明系统的知识复杂性》中首次提出零知识证明。这是一种用于证明者在不泄漏任何有效信息的情况下证明其知识正确性的验证协议。

  为了方便理解,不妨举个例子:

  小O拥有一个带密码的盒子,他想在不告诉小K真正密码的情况下,让他相信自己知道盒子密码。那怎么做呢?

  小O想出了一个办法:他让小K写下一个全世界只有他才知道内容的纸条,然后由小K亲手放进打开的盒子中并锁上。然后小O将盒子拿走后利用密码取出小K放在盒子里的纸条,第二天再将纸条给到小K。在这个过程中,小K并没有得知任何此前自己不知道的信息(盒子的密码),但还是必须相信小O知道密码这件事情。这个验证过程就是零知识证明。

  简单来说,零知识证明就是以最小的信息交换量在双方之间建立信任,在不透露更多信息前提下,A可以向B证明某件事/某个结论是正确的。

  根据证明过程中的交互方式,可分为“交互式零知识证明”和“非交互式零知识证明”两大类。

  交互式零知识证明,是指为了证明某件事,证明者需要和验证者反复互动,就像是测谎仪一样:验证者不断提出问题来挑战证明者承诺的真实性,证明者则需要不断回应这些挑战,直到使验证者相信。其流程如下所示:

  早期的零知识证明都是交互式的。这种方式很直接,但过程冗长且效率低下:双方必须同时在线完成验证,并且每次只能取信于一个验证者,如果要取信多人,则要重复上述过程。这个过程,想想就累。

  于是,非交互式零知识证明出现了。在非交互式零知识证明中,证明者和验证者提前约定验证规则,证明者按照承诺提供数据,验证者则可随时验证这些数据的正确性。这种非交互式验证,双方不用同时在线,并且证明者只需要提供一次证明。实际场景中应用的基本都是非交互式零知识证明,比如ZK-SNARK和 ZK-STARK。

什么是零知识证明?

扫一扫手机访问

发表评论