什么是零知识证明(Zero-Knowledge Proof)

要解释什么是零知识证明,那就先要从比特币讲起,众所周知,比特币网络中所有交易以明文方式记录在区块链上,虽然具有匿名性,但这种所谓"匿名性"并非真正做到完全匿名,而是属于匿名公开(Public Anonymous),也就是说所有比特币的交易细节其实是公开,可被查阅的,匿名的部份是指交易双方的身份。就如下图一样,任何人都可以清楚看到每笔交易的细节(包括交易双方的电子钱包地址、金额、交易时间等等)

甚至可以对这个电子钱包地址进行"起底",追踪这个地址得到所有的交易记录细节。

唯一无法确定的是交易双方的身份,所以你能从以上的钱包地址清楚双方的真实身份吗?

但这种"匿名公开"并不保障隐私,亦是比特币的主要缺点之一,后来大家一直为了这个隐私的问题,研究各种可行的解决方法。

零知识证明历史

以下是一些零知识证明过去的历史,有兴趣可继续看,不想看历史的可以直接跳到下一节

1985年,零知识证明 Zero-Knowledge Proof - 由S.Goldwasser、S.Micali 及 C.Rackoff 首次提出。

2010年,Groth实现了首个基于椭圆曲线双线性映射全能的,常数大小的非交互式零知识证明协议。后来这个协议经过不断优化,最终成为区块链著名的零知识证明协议 SNARKs 。

2013年,Pinocchio 协议实现了分钟级别证明,毫秒级别验证,证明大小不到300字节,将零知识证明从理论带到了应用。后来Zcash使用的 SNARKs 正是基于 Pinocchio 的改进版。

2014年,名为Zerocash 的加密货币则使用了一种特殊的零知识证明工具zk-SNARKs (Zero-Knowledge Succinct Non-interactive Arguments of Knowledge ) 实现了对交易金额、交易双方的完全隐藏,更注重于隐私,以及对交易透明的可控性。

2017年,Zerocash 团队提出将 zk-SNARKs 与智能合约(Smart Contract)相互结合的方案,

使交易能在众目睽睽下隐身,打造保护隐私的智能合约。

由1985年零知识证明被首次提出,至今已是重要的密码学基础组成部份。但当中一段很长时间内,零知识证明协议由于没有较好的运行效率及通用性,只是停留在理论阶段。

这些理论的零知识证明协议具有不同的特点:

有些协议只能证明某些特定的事情,比如,图同构问题;

有些零知识证明协议是通用的,只要你能用代码定义的问题,它都能证明(只是理论可行,不意味着有运行效率);

有些协议是交互式的,需要证明者和验证者来回发很多轮消息;

有些是非交互式的,证明者只需要根据协议向验证者发一次消息;

有的协议证明大小与问题规模相关,问题越复杂,证明越长;

而有些协议下,无论问题多复杂,证明大小都一样。

一个全能,非交互,常数大小的零知识证明协议,是密码学研究者们多年奋斗的目标。

零知识证明

零知识证明的定义为

"证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。"

当时第一时间看到这句说话,我感到这句说话有点矛盾,如何不向对方提供有用的信息下令他相信你?不过仔细一想,发现实际上是可行的,可以用以下这个简单例子理解:

假设有一个保险箱,箱内有一颗全世界唯一的红宝石,而且我告诉你,我知道保险箱的密码,但你不相信我知道密码,所以为了向你证明,我有两个做法可以令你​​相信:

1. 我直接告诉你密码,能够开启就代表我知道密码;

2. 我不告诉你密码,但我把保险箱内的红宝石给你看,那也能够代表我知道密码;

两种情况都可以成功向你证明我知道保险箱密码,但最大差别就是:

第一种方法虽能向你证明,但会向你泄露密码;而第二种方法,既能向你证明,又不会向你泄露密码。而这种情况就是可简单理解的零知识证明;

零知识证明的性质

根据零知识证明的定义可以得知零知识证明具有以下三个重要的性质:

1. 完备性 Completeness - 如果证明者和验证者都是诚实的,并遵守证明过程的每一步,进行正确的计算,那么这个证明一定会成功,验证者也一定能够接受证明者;

2. 合理性 Soundness - 没有人能够假冒证明者,从而使这个证明成功;

3. 零知识性 Zero-Knowledge - 证明过程执行完后,验证者只会得悉"证明者拥有这项知识",而没有获得关于这项知识本身的任何信息。

零知识证明的优缺点

优点

1. 在使用零知识证明时,不会降低安全性;

2. 具有完整隐秘性;

3. 安全性依赖于未解决的数学难题(如离散对数、大整数因子分解、平方根等等);

缺点

1. 在未经改良前生成证明的效率极慢,计算大约48秒完成,造成吞吐量低,近年升级后的计算时间可缩短至7秒;

2. 在如ZCash这种加密货币中使用,必须加入其他加密元素(如初始参数),在过程中会产生出私钥,而实际上利用私钥可以欺骗验证者,因此需要保证初始参数设置过程是绝对保密和安全;

Zcash 与比特币交易时分别

Zcash的理念是在实现点对点电子现金系统的同时,实现完整的隐私保护。与比特币相比,Zcash 集成了一种巧妙机制在转账自动隐藏发送方、接收方的地址,甚至转账金额。仅限定持有浏览权限秘钥的人员查看。而且可达成任意等级强隐私保护。

Zcash 在整个交易过程中,完全匿名。不同于比特币的交易,它同样也具备 UTXO,不过是完全封闭。

比特币中,A转账给B时,A会当B的面前将UTXO作废;

但是Zcash中,A转账给B时,会生成一个新的UTXO,原先的会发送到一个作废列表,但是这个列表记录的是之前的代号,从而证明之前的UTXO失效。所以在这个过程中B是看不到A之前的资讯,而且确保交易成功发生。

同理,矿工们也看不到之前的A的交易资讯,只是能确定之前的交易代号存在于作废列表中。

Zcash 的零知识证明

Zcash 使用了 SCIPR 实验室的零知识证明库 libsnark,在此基础上做了修改。

SCIPR实验室的libsnark  https://github.com/scipr-lab/libsnark

Zcash修改后的libsnark  https://github.com/zcash/libsnark

零知识证明白皮书  https://eprint.iacr.org/2013/507.pdf

零知识证明技术并不只有zk-SNARKs 一种工具,只是因为这个工具比较有名而已。零知识证明还有很多其他不同的工具。可以简单理解Zcash成一个完全匿名的比特币,当然其中UTXO的处理方法有所不同,Zcash会先生成一个新的UTXO,再将原来的UTXO送到到一个作废列表,而比特币则是在面前销毁,故方式有所不同,但零知识证明技术为加密货币带来的完全匿名,确实是一种很巧妙的机制。

本文链接地址:https://www.wwsww.cn/jishu/2085.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。