零知识证明是现代密码学的几个重要组成部分之一。通俗的来讲,它指的是证明者能够在不向验证者提供任何有用的信息的情况下,通过「交互」使验证者相信某个论断是正确的。但其实零知识是一种广义的密码学协议属性,在几乎所有的密码学安全协议中都会涉及「零知识」这个概念。而这里的「证明」一词指的是一种交互式系统,也是涉及所有的密码学安全协议,甚至包括基本的加密,签名等基础模块。
零知识证明非常有趣,也非常反直觉,很多人在初步了解零知识证明的用处之后,都会感慨密码学的神奇。当你深入到零知识证明的原理层面后,你会更加惊奇于内部的精密构造,以及这个概念的伟大。零知识证明的底层理论基础是计算复杂性理论加上信息论,比如图灵机,P,NP问题,纸带,算法这些概念都被数学化,这是可以一路回溯到罗素、哥德尔、图灵等先驱的贡献,伴随着计算机互联网一路成长起来的理论技术。而我们通常所提到的零知识证明技术,狭义上是指一类构造零知识证明的通用技术,比如像zkSNARK,zkSTARK。
零知识证明这个概念最早诞生于 20 世纪 80 年代,由 S.Goldwasser、S.Micali 及 C.Rackoff 在一篇名为 「交互式证明系统的知识复杂性」的论文中提出。但是在随后的很长一段时间里,碍于一直没有较好的通用性方案和较高的运行成本,零知识证明一直停留在理论阶段而没有得到广泛的应用。
不过最近十年,零知识证明技术在理论上倒是得到了快速的发展。这段时间里有很多的传奇密码学家,可以说正是由于他们不懈的耕耘,才研究出了这么神奇的黑科技。比如其中一位,Jens Groth,他以前是 UCL大学的计算机系的教授,现在是 Difinity 的首席科学家,这个大神发表过很多的零知识证明论文。他在 2010 年发表的文章「Short Pairing-Based Non-interactive Zero-Knowledge Arguments」(简称 Groth10)为后来的零知识证明协议 Pinocchio 打下了坚实的基础。这篇论文也是目前最前沿的一些零知识证明系统,比如Marlin, Spartan, Sonics, Libra,Plonk 等等的重要基础。
而在2012年的时候,一篇里程碑式的论文出现了,简称 GGPR,这篇论文提出了 QAP 这个重要概念。这个大大提升了 Groth 10 算法的效率,它通过高效的多项式编码,使得证明尺寸被压缩到了常数级,而且特别特别小。到了2013年,Byan Parno,继续改进,提出了Pinocchio 协议,也就是Zcash 最早采用的零知识证明系统。Pinocchio 算是一个标志性的进展,让密码学家们看到了工程应用的希望。大家可以去看看 Pinocchio 论文,有一半的篇幅都在讲性能。
差不多2016年的时候,ZCash诞生,零知识证明与区块链技术一起走进了大众的视野。而随着这几年的发展,零知识证明已经成为了区块链不可或缺的一环,它可以很好的解决区块链在实际应用中面临的一些问题,比如保护用户的隐私数据,还比如区块链扩容,还有在区块链上实现公共校验等等,零知识证明真正在区块链领域引起广泛关注是从 2019 年才开始的,而它在区块链上的应用其实还有很多待挖掘的场景,相信很快大家就可以看到。