问题引入:假设你的手里有红绿两个小球,假如你有一个对颜色不敏感的朋友,你不能告诉他你两个球分别是什么颜色,但是却要让他相信那是两个不同颜色的球?这时你该如何做呢?
解决办法:先将红绿两个球分别放在他的两只手中,并记住初始状态左右手中的颜色;让他将手放背后,随机决定是否在背后交换手中的球,然后将手中的球展示给你并让你判断他是否在背后交换了手中的球,这时,你通过对比他手中球的颜色来回答他的问题。
实验结果:由于你能分辨出两个球的颜色,自然根据颜色是否交换你就能判断出他是否在背后交换了两个球。而他知道自己是否交换了球的顺序,因此可以证明你的判断是正确的。经过多次的重复试验,你每一次的判断都是正确的,这种情况的偶然性几乎不存在,因此可以说明这两个球的颜色是不同的。
结果分析:在这个过程中,你是证明者,你向他证明两个球的颜色是不同的;他是验证者,通过试验来验证你的结论。但是在这个过程中,你并没有向他透露任何的有关球的颜色的具体信息,他也无法自行判断球的颜色,因此在这个过程中并没有传递任何关于被证明消息的有用的信息。
另一个例子:有一个环形走廊,出口与入口在一个位置,中间被一道上了锁的门隔断, B声称他有钥匙,那么A如何在不拿到钥匙的情况下知道B真的有钥匙。这时,A只需要看到B从入口进入,并从出口走出,这样A便可以相信B持有门的钥匙这一事实。
两个问题的相同点在于,证明者都没有向验证者传递关于被证明消息的有效信息,即你的朋友不知道这两个球的颜色,A也没有见过B手中的钥匙,以及一个经典的例子“阿里巴巴与洞穴”,用一句话来讲就是一个人可以在不泄漏任何秘密的情况下证明他知道这个秘密,这就是“零知识证明”。
定义:“零知识证明”-zero-knowledge proof,指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
性质:
完备性:在证明者与验证者都是诚实的情况下,证明过程符合规则并且正确,那么这个证明一定是成功的,验证者就能够接受证明者。
可靠性:没有人能够冒充证明者,即只有证明者能够做出证明。
零知识性:证明过程执行完之后,验证者只获得了“证明者拥有这个知识”这条信息,而没有获得关于这个知识本身的信息。
功能:零知识证明技术作为现代密码学的重要组成部分,它能够在不泄漏任何秘密信息的前提下完成对此秘密信息的验证。零知识证明技术对于解决当前信息安全中的诸多问题,如数据安全、隐私安全、监管检查等都能够发挥重要的作用。零知识证明与区块链的完美结合很好的解决了区块链当前面临的困局。一方面,零知识证明能够保护数据的隐私性,在不泄漏数据的条件下对其进行证明,用以零知识证明为代表的密码学方案去解决这类问题隐私问题具备极好的优势;另一方面零知识证明仅需要生成很小数据量的证明就可以完成对大批量数据的证明,它在压缩数据量提高性能方面可以发挥很大的作用。
交互式零知识证明过程:
非交互式零知识证明过程:
应用:从应用分类上,零知识证明技术在区块链应用上可以大致分为隐私保护和扩容两大类。
参考资料:
[1]https://blog.csdn.net/triaslab/article/details/83312988
[2]How to explain Zero-Knowledge protocols to your children.
[3]https://baike.sogou.com/v9050697.htm
[4]https://ethfans.org/posts/zero-knowledge-proofs-illustrated-primer
[5]https://ethfans.org/posts/zero-knowledge-proofs-an-illustrated-primer-part-2
[6]https://mp.weixin.qq.com/s/MWniT9KSXKfYiyQL8DbY2g
[7]https://zhuanlan.zhihu.com/p/115422206
[8]零知识证明技术发展报告_陀螺研究院_2020年5月