零知识证明

零知识证明

什么是零知识证明?

首先,我们先思考一个问题:如何在不说出秘密的前提下,让对方知道你已经知道了这个秘密?

例子1:用户注册

用户在进行系统注册的时候,系统并不会保存用户的密码明文,而是保存了用户密码的哈希值;用户在登录系统时,只需输入注册时的密码,系统会根据用户输入的密码产生的哈希值与系统数据库的哈希值进行比对,如果一致的话,则系统就能认定,当前用户知道该账号的密码。
在这里,用户不需要告诉网站密码,就能证明自己的身份,这其实就是一种零知识证明。

例子2:大学生实习

A想要去一家公司实习,该公司要求A在校期间所有功课都没有挂科,才有资格加入该公司。虽然A在校期间从未挂科,但是成绩也都在61、62左右徘徊,那么如何在公司不知道自己的成绩的情况下证明自己没有挂科呢?于是A委托学校开了一份证明,证明A在校期间所有成绩均及格,并交到了公司,加入了该公司。
在这里,A并没有暴露自己的确切考试成绩,又向公司证明了自己满足公司要求,这也是一种零知识证明。

零知识证明的定义

从字面义理解:零知识证明就是,既证明了自己想证明的事情,但同时透露给验证者的信息为“零”。

零知识证明是指证明者能够在不向验证者提供信息本身内容的情况下使验证者相信某个论断是真实可信的一种技术。
零知识证明可分为交互式和非交互式两种

交互式:

零知识证明协议的基础是交互式的。它要求验证者不断对证明者所拥有的“知识”进行一系列提问。证明者通过回答一系列问题,让验证者知道自己明确知道这些“知识”。
然而,这种情况下不能使人相信验证者和证明者都是真实的,两者可以提前串通好,就可以使证明者在不知道答案的情况下依然通过验证。

非交互式:

非交互式零知识证明不需要交互过程,避免了串通的可能性,但可能需要额外的机器和程序来确定实验的顺序。

区块链与零知识证明

现在这个时代,个人身份与许多信息产生了关联,姓名、手机号、银行卡号可能都关联在了一起,知道了你的手机号,就可以通过关联信息获取到更多的个人信息,这种关联是十分可怕的。
在区块链的世界中,用地址来表示交易双方,这样虽达到了匿名的效果,也就是链上信息是匿名的,但是通过链上信息绑定的链下信息,使匿名性荡然无存。(就比方说很多链上地址与链下银行账号、支付宝,使得可以很方便的追溯到真实世界的交易双方)
那么有没有一种方法,能够在隐藏发送方、接收方以及交易金额等其他细节下,保证交易有效呢?
解决方法就是–零知识证明。

ZCash零知识证明

什么是ZCash:
ZCash是第一个开放的、无需权限的加密货币,使用零知识密码技术充分保护交易隐私,为实现匿名性,ZCash使用了零知识证明。

普通比特币转账过程:

比如说,Alice要转账给Bob一个比特币
转账之前,Alice要事先准备一个比特币,从这一个比特币中,我们知道:
1.Alice确实有一个比特币
2.Alice使用私钥对这个比特币进行签名,证明Alice拥有对这个资产转账的权力
转账的过程:首先先给Bob新建一张一样的比特币,同时毁掉Alice手上的的那张比特币。

ZCash的转账过程:

比方说,Alice转账给Bob一个ZEC
1.首先,Alice确实有一个ZEC
2.同样的,Alice使用私钥对这个ZEC进行签名,证明Alice拥有对这笔资产转账的权力。
3.这张ZEC上多了一串随机数,这串随机数就好比“支票代号”,用来唯一识别该支票,比方说,Alice支票上的随机数用R1表示
转账过程:
1.与比特币一样,首先要先为Bob新建一张ZEC,Bob的编号为R2(与Alice编号不一致)
2.新的ZEC生成的同时,必须想办法销毁原先的ZEC,即想办法让Alice手中的支票失效,与比特币的简单粗暴销毁方式不同,ZCash采取“备注作废”的手段,就是对原先的ZEC不做任何处理的前提下,新建一个作废文件列表,录入需要作废的ZEC编号
原先Alice持有的ZEC仍然存在,并没有消失,只是这张ZEC已被计入“作废列表”,在确定资产所有权的时候要同时读取两个列表的所有信息,能确定拥有这个ZEC的方式是,作废列表中不存在Bob所持ZEC的编号
这就用到了零知识证明

举例说明,A要向B证明自己拥有某个房间的钥匙,且该房间只能用钥匙开锁,其他任何方法都无法打开这时,有两种方法:
方法一:A可以把钥匙交给B,B用这把钥匙打开房间的锁,从而证明A拥有该房间的钥匙。
方法二:A自己用钥匙打开房间,从房间里拿出一个物体出示给B,B知道这个物体存在于这个房间,从而证明自己确实拥有该房间的钥匙
方法二的好处就是B不能看到钥匙的样子,从而避免了钥匙的泄露

回到比特币和ZCash的例子:
比特币中的做法:Alice要当着Bob面将比特币销毁掉
而在ZCash中,Bob从未见过Alice的ZEC,但还是实现了资产的转移。
但其实在上述两种方法中,Alice和Bob的交易见证者还有矿工,矿工负责记录信息交易,同样的,矿工也无需看到传播的ZEC,只要能确定R1作废了就行。
完整的ZCash匿名交易过程:
首先,Alice要转一个ZEC给Bob,这个例子中牵扯到的角色有Alice,Bob,和矿工(记账)
这两张ZEC都是有效的,Alice的ZEC开始就存在于整个ZCash网络,BobZEC生成后与会被广播至全网
为了隐藏交易信息,要对两张ZEC进行加密处理,可以通过拥有者的私钥解密,同时,矿工手里有一份作废列表,Alice要广播自己的编号,收入作废列表中,发票代号同样也是加密的
所以,矿工能得到的信息也相当的有限,同时并不影响矿工对交易本身的判断,矿工也只需对比编号是否出现在作废列表中来判断该ZEC是否有效,整场过程中,每笔交易矿工能接收到的信息也只有一个编号,和一张新的发票,且这两样东西都是被加密的,矿工也并不知道转账双方,也不知道转账金额。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇

)">
下一篇>>