专栏名称: 币行观察
有料、有趣、有个性的币圈老朋友在这里。我们对比特币、莱特币、以太坊等始终保持着敏锐的关注。我们的前面是一片星辰大海,一起来参与和见证时代的改变吧。
目录
相关文章推荐
锦州警方  ·  花灯璀璨元宵夜,警灯相映护平安 ·  10 小时前  
黑大帅资讯小站  ·  LAPD SWAT 2019造型 ·  2 天前  
黑大帅资讯小站  ·  LAPD SWAT 2019造型 ·  2 天前  
浙江之声  ·  黄某被策反,春节期间当间谍 ·  2 天前  
51好读  ›  专栏  ›  币行观察

Zcash、零知识证明、阿里巴巴与四十大盗 他们都在讲同一件事

币行观察  · 公众号  ·  · 2017-12-27 20:26

正文

在讲一些晦涩难懂的问题之前,我们先来看一个童话故事的片段。故事来源于《一千零一夜》中的“阿里巴巴与四十大盗”。(此阿里巴巴非彼阿里巴巴也)


阿里巴巴知道打开藏着财宝的山洞的咒语。强盗抓住他,让他说出咒语。如果阿里巴巴说出咒语,就会因为没有利用价值而被杀死。如果阿里巴巴坚持不说,强盗不会相信他真的掌握咒语,也会杀死他。


但阿里巴巴想了一个好办法,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”


强盗举起了右手,只见阿里巴巴的嘴动了几下,石门果真打开了,强盗举起了左手,阿里巴巴的嘴动了几下后石门又关上了。强盗还是有点不信,说不准这是巧合呢,他们不断地换着节奏举右手举左手,石门跟着他们的节奏开开关关,最后强盗们想,如果还认为这只是巧合,自己未免是个傻瓜,那还是相信了阿里巴巴吧。


这就是最简单易懂的零知识证明例子了,其中有一些小问题我们暂不细究。零知识证明可以说是验证者向验证者表明他知道某种秘密,不仅能使验证者完全确信他的确知道这个秘密,同时还保证秘密也不泄露给验证者。大致可以归纳为, 证明者能够在不向验证者提供任何有用信息的情况下,让验证者相信你。


这里需要强调其“零知识”性,即验证者不能在验证过程中获取新的知识 ,这里文末会举例说明。然后,这里的验证会存在误差,即恶意验证者,但是也存在有技术能将误差降低到可以忽略的值。


“零知识证明”-zero-knowledge proof,是由S.Goldwasser、S.Micali及C.Rackoff在20世纪1985年提出的。通过给传统的数学证明引入随机性和交互,即以问答方式进行证明,由此产生的交互证明系统(之后也有非交互性的),这给后来整个计算机科学和密码学的发展带来了深远的影响。


后来通过协议改进与工具支持,将零知识证明从理论带到了应用。 加密货币Zcash正是使用了这个理论。 Zcash一出生便受到了市场狂烈的追捧,上市之处达到了几十甚至几百个BTC换一个ZEC。不过后面价值瞬间幻灭,目前价值约0.036BTC。


可以看到最开始对BTC价格的瀑布下跌


我们重点看下Zcash的交易过程


Alice转1个ZEC给Bob。


转账前,Alice创建一张面额为1个ZEC的“支票”



这张“支票”包含了三个重要的东西:


①Alice确实拥有1个ZEC


②Alice的私钥签名证明她拥有转账权力。


③“支票代号”r1用来唯一识别该支票。


明确以上信息,Alice就可以进行ZEC转账了。


第一步:与比特币一样,要先为Bob新建一张“支票”。Bob的支票代号(r2)与Alice的支票代号(r1)不相同。



第二步:新的“资产所有权”生成的同时,必须要想办法销毁原来的“资产所有权”。即必须想办法让Alice手中的“支票”失效。与比特币简单粗暴的“直接撕毁”不同,ZCash采用“备注作废”的手段,达到同样的效果。怎么理解呢?就是在不对原先“支票”作任何处理的前提下, 新建一个作废文件列表,录入需要作废的“发票代号”。



从上图可以看出,原先的Alice持有的支票仍旧存在,并没有消失,只是这张支票已经被记入“作废列表”。 在确定资产所有权时要同时读取两个列表的信息 ,能确定Bob拥有资产所有权的判断方法是:作废列表中不存在Bob所持“支票”的代号。


上面例子中有涉及到的角色有转账双方Alice和Bob,以及记账者(矿工)。


Alice的支票开始就存在于整个ZCash网络,Bob的支票在生成后也会被广播到全网。 每笔交易矿工能接收到的东西只有一个发票代号(作废),和一张新的发票 为了隐藏交易者信息,两张支票进行了加密处理, 只有通过拥有者的私钥解密。


同时,因为资产只能有一份,所有矿工手里只有一个作废列表。矿工们能获取的信息相当有限,但是这并不影响对矿工对交易有效性的判断。这就是对零知识证明的一次应用,聪明的你理解了吗?


以上交易过程来源于知乎高超峰,做了一些改动。不过他接下来举了一个例子来说明零知识证明,但是有比较大的问题。我们来看看他的例子:


A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。这时有2个方法:


①A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。







请到「今天看啥」查看全文