在密码学中,零知识证明(zero-knowledge proof)是一种证明方法,指一方(证明者)向另一方(验证者)证明一个陈述是真实的,且除了该陈述是真实的之外,不透露任何信息。
日常生活中的证明并不是零知识的。例如,当购买者必须证明自己超过 21 岁才能购买酒精时,他们会出示带有出生日期的身份证明。但这种证明方法存在缺陷,因为在证明满足年龄要求的同时,这种方法同时会披露其他不相关但敏感的信息,例如姓名和地址。
相比较而言,零知识证明更优越,因为它不需要证明者透露关于陈述本身或他/她是如何发现真相的细节。假设 Alice 是色盲,分不清蓝球和红球。Alice 认为两个球是一样的,但 Bob 想用零知识的方式向Alice 证明这两个球是不同的。Bob 可以依赖以下机制。
Bob 让 Alice 双手各拿一个球并将双手放在背后,左手是蓝色,右手是红色。Alice 可以决定是否将左右手上的球交换。之后,Alice 再次向 Bob 展示两个球,Bob 则告诉 Alice 她有没有将球互换。
Alice:我把球换了吗?(左手由蓝色变为红色)
Bob:是的。
Alice:我把球换了吗?(左手依然是红色)
Bob:不,上次没有。
Alice 和 Bob 不断重复这个过程,直到 Alice 确信这两个球确实是不同的,否则 Bob 将无法始终准确地判断 Alice 在背后做了什么。注意,在这个过程中,Bob 不需要告诉 Alice 哪个球是蓝色的,也不需要阐述他是如何知道的。
上面的零知识证明例子是交互式的。虽然它很容易理解,但作为一个实际的解决方案来讲不太现实,因为它需要双方在建立证明之前多次相互通信。
研究人员发明了非交互式的零知识证明来解决这些问题。非交互式证明只需要证明者和验证者进行一轮通信。证明者将信息输入到一个特殊的算法来计算零知识证明。然后验证者可以检查证明以确保秘密信息的有效性。非交互式证明的另一个好处是,一旦证明生成,任何人都可以验证它。
在区块链领域,零知识证明主要应用于 rollup 场景里。它使得底层区块链能够将计算外包,同时保证计算结果的可验证性。链下的计算机执行交易,然后提交结果以及正确执行交易的证明。这减少了链上网络拥塞并提高了交易速度。
零知识证明允许底层区块链在不重新执行的情况下验证链下交易。虽然零知识证明在技术上是优越的,但围绕该主题的研究仍处于早期阶段。在零知识证明技术被实际采用之前,至少还需要几年的时间。
你可能会对以下内容也感兴趣:
- 什么是拜占庭将军问题