零知识证明(Zero Knowledge Proof,ZKP)并非新鲜事物,其概念初见于1985年的论文《互动证明系统的知识复杂性》。ZKP是一种密码学技术,允许两方(证明者和验证者)来证明某个提议是真实的,而且无须泄漏除了它是真实的之外的任何信息。在密码学货币和区块链中,这通常是指交易信息数据。
有人借用最简单的阿拉伯童话《一千零一夜》对零知识证明做了通俗、形象的介绍。阿里巴巴掌握着让芝麻开门的咒语。强盗向他拷问打开山洞石门的咒语时,他不想让人听到咒语,于是想了个好办法。他对强盗说:“你们离我一箭之地,用弓箭指着我。你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门。如果我做不到或逃跑,你们就用弓箭射死我。”强盗们同意了,因为这能帮助他们搞清楚阿里巴巴到底是否知道咒语这个问题。强盗举起了右手,只见阿里巴巴的嘴动了几下,石门果真打开了。强盗举起了左手,阿里巴巴的嘴动了几下后石门又关上了。强盗还是有点不信,说不准这是巧合呢。于是不断地换着节奏举右手、举左手,石门跟着他们的节奏开开关关。最后强盗们想,如果还认为这只是巧合,自己未免是个傻瓜,那还是还是相信阿里巴巴吧。这就是最简单易懂的零知识证明。大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于验证,将可以有效解决许多问题。
零知识证明具有以下3条性质:
①完备性。如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。
②合理性。没有人能够假冒证明方,使这个证明成功。
③零知识性。证明过程执行完之后,验证方只获得了“证明方拥有该知识”这条信息,而没有获得关于该知识本身的任何一点信息。
零知识证明及其有关协议的主要优点:
①随着零知识证明的使用,安全性不会降级,因为该证明具有零知识性质。
②高效性。该过程计算量小,双方交换的信息量少。
③安全性依赖于未解决的数学难题,如离散对数、大整数因子分解、平方根等。
④许多零知识证明相关的技术避免了直接使用有政府限制的加密算法,这就给相关产品的出口带来了优势。