区块链学习第六期

myBlog

零知识证明基础

[toc] ---

零知识证明(Zero-Knowledge Proofs ZKP)

零知识证明技术是现代密码学三大基础之一,由 S.Goldwasser、S.Micali 及 C.Rackoff 在 20 世纪 80 年代初提出。早期的零知识证明由于其效率和可用性等限制,未得到很好的利用,仅停留在理论层面。直到近年来,零知识证明的理论研究才开始不断突破,同时区块链也为零知识证明创造了大展拳脚的机会,因而走进大众视野。
零知识证明这项“黑科技”随着它的热度逐渐增加,相关的学习资源也慢慢丰富起来了。但是由于,一方面零知识证明背后的原理颇为复杂,且内容繁多;另一方面,针对零知识证明的学习资源质量参差不齐,尚未形成系统。因此对绝大多数读者来说,学习零知识证明的难度依然很大。


简单理解ZKP

通过间接方式证明某事物的存在。所谓的零知识,就是指验证方除了对论断判断的结果(错或对)之外,无法获取任何额外信息

ZKP分类

  • 交互式
    需要通过反复确认(比如验证者问我问题我每次都可以答对)

  • 非交互式
    区块链更常使用的是「非交互式zk」,简称「NIZK」。区块链上的一个交易会分发给多个矿工进行验证,如果每个矿工都进行交互式的验证,那耗时将是难以想象的。而NIZK在证明者进行一次证明之后,能够取信多个验证者,所以更加适合区块链上的场景

零知识证明三大性质

  • 完备性(Completeness):若一个证明方确实掌握了某论断的答案,则他肯定能找到方法向验证方证明他手中掌握的数据的正确性,即真的假不了。(对应上面药丸的例子,就是拥有药丸的证明方肯定能想办法说服验证方,证明他手里真的有药丸。)
  • 可靠性(Soundness):若一证明方根本不掌握某论断的答案,则他无法(或只能以极低概率)说服验证方他手中所谓答案的准确性,即假的真不了。(对应上面药丸的例子,就是证明方若手中无药丸则没法蒙混过关让验证方误以为他有药丸。)
  • 零知识性(Zero-knowledgeness):验证方除了知道证明的结果外,对其他信息一无所知。

零知识证明构造方法的三段论

  1. 证明方先根据论断内容向验证方发个交底材料,这个样例论断需要是随机的或加密的;
  2. 验证方随机生成一个试探(学术名词是挑战,challenge),发给证明方;
  3. 证明方根据该试探和交底材料生成证明信息发给验证方。验证方自己将信息和交底材料一合计,判断证明方是否通过了该试探。

零知识证明的优点

安全,随着零知识证明的使用,安全性会大大提高。
高效,零知识证明过程计算量小,双方交换的信息量会大大减少,因此较为高效。

零知识证明的应用

  • 身份验证
  • 数字签名
  • 认证协议

密码学常用公钥密码

验证某人是否有私钥

  1. 用公钥加密某x
  2. 让对方出示加密的内容
  3. 如果正确则拥有公钥

零知识证明形象化举例

A有一个开房间R的钥匙🔑,B怎么在不知道A有钥匙🔑的情况下相信A有钥匙呢?
答:A可以把门打开,拿出其中的一把椅子,B看了之后就知道,A肯定有钥匙,不然怎么开门呢。此时A并没有给B看到钥匙,仅仅是通过给出在有钥匙才能办到的事这个结果,让B相信有钥匙。