什么是零知识证明

零知识证明 zero-knowledge proofs,简写为 ZKPs,最初由 S.Goldwasser、S.Micali 及 C.Rackoff 在 1985 年的论文《互动证明系统的知识复杂性》提出.

零知识证明:指的是证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。允许证明者 prover、验证者 verifier 证明某项提议的真实,却不必泄露除了「提议是真实的」之外的任何信息。

其实质是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用,尤其在 NP 问题、身份验证、数字签名、水印检测、密钥交换等,可以有效解决许多问题。加密数字货币与区块链为零知识证明的应用提供了新的方向。

零知识证明(Zero—Knowledge Proof)起源于最小泄露证明。设P表示掌握某些信息,并希望证实这一事实的实体,设V是证明这一事实的实体。假如某个协议向V证明P的确掌握某些信息,但V无法推断出这些信息是什么,我们称P实现了最小泄露证明。不仅如此,如果V除了知道P能够证明某一事实外,不能够得到其他任何知识,我们称P实现了零知识证明,相应的协议称作零知识协议。

综上,零知识证明是一种特殊的交互式证明,其中证明者知道问题的答案,他需要向验证者证明「他知道答案」这一事实,但是要求验证者不能获得答案的任何信息。

童话里的零知识证明

  • 举个最简单的阿拉伯童话《一千零一夜》里的零知识证明:阿里巴巴与四十大盗的故事其中一个片段。

  • 阿里巴巴会芝麻开门的咒语,强盗向他拷问打开山洞石门的咒语,他不想让人听到咒语,便对强盗说:「你们离我一箭之地,用弓箭指着我,你们举起右手,我念咒语打开石门,举起左手,我念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。」

  • 这个方案对阿里巴巴没损失,也能帮助他们搞清楚阿里巴巴到底是否知道咒语,于是强盗们同意。强盗举起了右手,只见阿里巴巴的嘴动了几下,石门打开了;强盗举起了左手,阿里巴巴的嘴动了几下,石门又关上了。强盗有点不信,没准这是巧合,多试几次过后,他们相信了阿里巴巴。

  • 这即是最简单易懂的零知识证明。

  • 零知识证明的性质

  • 根据零知识证明的定义和有关例子,可以得出零知识证明具有以下三个性质:

    • 完备性 completeness:如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。

    • 合理性 soundness:没有人能够假冒证明方,使这个证明成功。

    • 零知识性 zero-knowledge:证明过程执行完之后,验证方只获得了「证明方拥有这个知识」的信息,而没有获得关于这个知识本身的任何信息。

  • 零知识证明及其相关的协议的优点

    • 随着零知识证明的使用,安全性不会降级,因为该证明具有零知识性质。

    • 高效性。该过程计算量小,双方交换的信息量少。

    • 安全性依赖于未解决的数学难题,如离散对数、大整数因子分解、平方根等。

    • 许多零知识证明相关的技术避免了直接使用有政府限制的加密算法,为相关产品的出口带去优势。

零知识证明在区块链的应用

  • 那么,利用了区块链技术的ZCash,就是利用“零知识证明”实现的匿名性。

  • 相对于ZCash来说,比特币的转账并不是完全匿名的,只要知道了一个比特币地址,任何人都可以通过这个网站,查到这个地址的所有“消费”行为和关联。比如给谁转了账,又从谁(的比特币地址)那里收到过转账,在以区块链技术为基础的“账本”上都“本本份份”地记录着。

  • 例如A有3个BTC,要给B转账1个BTC,那么在账本上就会记录着:A转出了两笔BTC,一笔为1BTC,转给了B;另一笔为2BTC,转给了自己。

  • 那么利用了“零知识证明”的ZCash是怎么做到的所谓匿名呢?

  • ZCash的代币为ZEC。同样假设A有3个ZEC,要给B转账1个ZEC。

  • 首先,A会将自己的1个ZEC分成若干份随机投入一系列的“混合容器”中,指定接收方B的地址,同时混入的时候还有其他交易方输出的若干份ZEC。这些ZEC又被混合容器随机拆分,再从这些被拆分生成的所有的ZEC中取出合计为1ZEC的若干份,转移到B的地址中,同时在发送的时间上也可以设置一定的延迟[3]。

  • 其中的“混合容器”,就是一条“公有链”。经过这条公有链一系列的“混币”过程,就使得包括交易地址和具体金额在内的交易信息变得无从考证了。

  • 当然,虽然ZCash以其匿名性使其市场热度一度很高,但其仍面临诸多障碍与“原罪”。

  • 首先,要实现匿名性,其所需要的证明信息所花费的计算资源就非常多,带来了大量的资源浪费,也导致了其可扩展性面临巨大挑战。

  • 另外,匿名性会带来大量的额外监管问题,一旦有不法份子利用其用户黄、赌、毒等违法领域,将会给追踪与监管带来非常大的挑战,造成一系列社会问题。

零知识证明有三个特性,任何零知识都必须满足。简单来说:

1、完整性(Completeness)。如果谷歌说的真话,那么他们最终能说服我(至少让我相信可能性非常高)。

2、安全性(Soundness)。只有当他们说的是真话时,谷歌才有可能说服我。

3、零知识性(Zero-knowledgeness)。我无法从中获得任何关于谷歌解决方案的信息。

Last updated