什么是零知识证明
零知识证明 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