区块链学习笔记 (1):零知识证明的江湖

2009年1月3日,比特币网络发行了最初的50个比特币,从此,一个新的时代开始了。随着比特币币值的一路飙升,比特币受到了越来越多的关注,比特币系统中的一些缺陷也获得了越来越多的关注与讨论。缺乏隐私保护是比特币系统的主要缺陷之一,比特币网络中的所有交易以明文的方式记录在区块链上。虽然比特币系统使用的是与身份无关的地址,通过追踪货币在地址之间的流动,依然可以分析出来哪些地址属于同一个用户。


为了解决比特币的隐私保护问题,一系列的解决方案被提出。其中2015年提出的 Zerocash[1] 使用了一种特殊类型的零知识证明工具 zk-SNARKs 实现了对交易金额与交易方的完全隐藏。2017 年,Zerocash 团队提出了将 zk-SNARKs 与智能合约结合的方案[8],使零知识证明 zk-SNARKs 获得了更高的关注度。越来越多的人在讨论,zk-SNARKs可以为区块链技术解决什么问题?


其实,零知识证明技术就像一个江湖,而 zk-SNARKs 是只是比较著名的门派。而在这个江湖中,还有很多其他的门派,他们风格各异,使用的武器也不尽相同。


从1985年零知识证明被首次提出[2],到今天已经是重要的密码学基础构件。但是在很长一段时间内,零知识证明协议由于没有较好的运行效率和通用性,只是停留在理论。这些理论的零知识证明协议具有不同的特点。有的协议是专职的,只能证明某些特定的事情,比如,图同构问题。有些零知识证明协议是全能的,只要你能用代码定义的问题,它都能证明(只是理论可行,不意味着有运行效率)。有些协议是交互式的,需要证明者和验证者来回发很多轮消息,有些是非交互式的,证明者只需要根据协议向验证者发一次消息。有的协议证明大小与问题规模相关,问题越复杂,证明越长。而有些协议下,无论问题多复杂,证明大小都一样。而一个全能的,非交互的,常数大小的零知识证明协议,是密码学研究者们多年奋斗的目标。

2010年,Groth实现了首个全能的,非交互的,常数大小的零知识证明协议[3],基于椭圆曲线双线性映射。因区块链而著名的零知识证明协议 SNARKs 便是这一协议的“子孙”。经过不断的优化,2013年,一个叫做 Pinocchio[4] 的协议实现了分钟级别证明,毫秒级别验证,证明大小不到300字节,将零知识证明从理论带到了应用,并获得当年安全顶会 Security & Privacy 的最佳论文奖。Zcash使用的 snarks 正是基于 Pinocchio 的改进版。


混淆电路是设计零知识证明协议的另一个工具。混淆电路是我国唯一图灵奖得主姚期智院士在1982年首次提出的,它允许双方在不泄露隐私的前提下,使用各自的隐私计算一个公开的结果。例如,两个百万富翁不想让对方知道自己有多少资产,但是都希望知道谁的钱比较多。两个企业,一个企业有机器学习的模型,另一个企业有数据,他们不希望让对方知道自己的模型和数据,但是希望共同计算预测结果。2013年,Jawurek等人在前人工作的基础上,将基于混淆电路的零知识证明优化到了毫秒级别证明和验证,3MB 左右的证明长度(证明 SHA2 的计算)[5]。但是这一算法是交互式的,需要证明方和验证方同时在线。这也意味着,这一类证明在区块链上部署会很没有效率。


3年后,这篇论文的作者之一发表了另一个协议,命名为 ZKBoo[6]。这一协议基于一个叫做 MPC-in-the-head 的零知识证明协议设计理念。实现了与上一协议接近的证明和验证时间,大约25%的证明大小,而且是非交互式的。也就是说,ZKBoo 和 zk-SNARKs 一样,不必要证明方和验证方同时在线。


最近,zk-SNARKs 的主要研究者 Eli Ben-Sasson 也提出了另一个具有竞争力的零知识证明协议,但目前只有一些视频、海报、博客文章等资料[9,10],还没有论文公开。笔者将持续关注这一工作。


到目前为止,具有应用前景的零知识证明工具可以分为两类,一类证明慢、验证快、证明体积小,另一类证明快、验证快、证明体积大。第一类由于验证快,不占用空间的特点,得到了区块链开发者的青睐,随着Zcash而闻名,其代表协议 zk-SNARKs 还有社区开发的 C++ 库。第二类证明快的特点使得其在移动设备,嵌入式设备的部署成为可能,而隔离见证等技术有望缓解其证明体积较大的问题,在区块链领域的也是前途无量。


第二类与第一类相比,存在另一个明显的优势,第一类协议中,在零知识证明协议部署前,需要一台机器生成一些初始参数,这些参数将在每一次证明与验证中被用到。参数生成后,参数生成算法运行中使用的所有数据必须销毁,否则整个协议将不安全。协议的安全性依赖于一台机器的数据销毁,那么最简单粗暴的想法就是在所有人的见证下毁掉这台机器。当然,也有一些多方安全计算的算法[7],由多方控制的多台机器共同生成初始参数,除非所有人串通,才能危及协议的安全性,只要有一方销毁了全部数据,协议就是安全的。但无论如何,将整个协议的安全建立在几台执行初始化的机器上,与区块链的去中心化初衷总是不太相符。而第二类零知识证明协议不依赖于参数生成算法的安全性,自然没有这类问题。在未来,这两类协议可能在不同的应用需求下有各自的地位。


笔者期待,随着理论研究的突破与应用场景的结合,零知识证明工具可以为区块链上的数据安全提供高效有力的保护,使隐私问题不再成为区块链发展的一个束缚。


在随后的几篇中,计划介绍 zk-SNARKs 的设计思路以及在区块链上的应用,MPC-in-the-head 的设计思路与算法调研等。


参考文献:

[1] Sasson, Eli Ben, et al. "Zerocash: Decentralized anonymous payments from bitcoin." Security and Privacy (SP), 2014 IEEE Symposium on. IEEE, 2014.

[2] Goldwasser, Shafi, Silvio Micali, and Charles Rackoff "The knowledge complexity of interactive proof systems" (extended abstract). 17th Annual ACM Symposium on Theory of Computing, May 6-8, 1985, Providence, Rhode Island, USA (1985), pp. 291–304.

[3] Groth, Jens. "Short non-interactive zero-knowledge proofs." International Conference on the Theory and Application of Cryptology and Information Security. Springer Berlin Heidelberg, 2010.

[4] Parno, Bryan, et al. "Pinocchio: Nearly practical verifiable computation." Security and Privacy (SP), 2013 IEEE Symposium on. IEEE, 2013.

[5] Jawurek, Marek, Florian Kerschbaum, and Claudio Orlandi. "Zero-knowledge using garbled circuits: how to prove non-algebraic statements efficiently." Proceedings of the 2013 ACM SIGSAC conference on Computer & communications security. ACM, 2013.

[6] Giacomelli, Irene, Jesper Madsen, and Claudio Orlandi. "ZKBoo: Faster Zero-Knowledge for Boolean Circuits." IACR Cryptology ePrint Archive 2016 (2016): 163.

[7] Ben-Sasson, Eli, et al. "Secure sampling of public parameters for succinct zero knowledge proofs." Security and Privacy (SP), 2015 IEEE Symposium on. IEEE, 2015.

[8] An Update on Integrating Zcash on Ethereum (ZoE) - Ethereum Blog

[9] youtube.com/watch?

[10] STARKs, Part I: Proofs with Polynomials



作者:李辰星(lylcx2007@gmail.com)。欢迎讨论、建议与错误指出。

本文允许非商业目的规范转载,请注明作者及出处。

本文已使用法链存证,存证ID: 8000e30524f11be8ae966fdb1c5a9fc97eb62d74ad54ede91a6fa971fc2bfaf1


上一篇:

下一篇:

编辑于 2018-08-16 15:06