员外外出打猎,误打误撞掉进了一个传说中的藏宝洞,传闻这个藏宝洞中有一个可以统领整个族人的权杖。员外心想自己终于可以万人之上了,然后便着急的想让族人知道他发现了这个藏宝洞,并且拥有了象征着权利的权杖。
现在,员外又两种方法来证明:
- 手持权杖回到族里,把大家聚集到广场,当着所有人的面,把权杖展示给大家,并找几个族里的长老鉴伪;
- 把全族的人都叫过来,让大家看到他确实找到了这个藏宝洞,和这个权杖;
这个故事中,员外用来证明自己拥有权杖的第一种方法里面,存在一种风险,就是大家都发现了这个藏宝洞,虽然员外拥有了权杖,但无法确保自己发现的宝物不被他人偷走,因为藏宝地已经公之于众了。
第二种方法就显得很是明智,因为拿到了只有藏宝洞中才有的权杖,只要把权杖拿给大家看,并得到族里长老的确认,就能让大家相信了他知道藏宝洞的地址,还确认了他拥有整个族里至高无上的权力,从此员外日日舞蹈,夜夜笙歌。
这种方法就是 零知识证明:不用告诉大家知道藏宝洞在哪,只需要拿出只有藏宝洞中才有的权杖,就能向大家证明他发现了这个藏宝洞。
在数字货币中,零知识证明被成功的应用在 ZCash 上,代币为 ZEC,它主要是让每个用户的资产隐私化,因为在比特币网络中,每个用户的资产都是透明的,只有拥有你的比特币钱包地址,就能查到你拥有多少比特币。但是总是有很多人不愿意让别人知道自己拥有多少资产,所以 ZCash 被创造出来用 零知识证明 完美的解决了这个问题。
应用
先说比特币中是如何转账的
比如大狗要给二狗转一个比特币,那过程大概是这样:
- 大狗用自己的私钥对这个比特币签名,证明自己有这个比特币的使用权;
- 系统给二狗创建一个比特币的证明,证明二狗有一个比特币的使用权;
- 系统销毁大狗手中的拿一个比特币,二狗手中的比特币就到账了。
在这整个交易过程中,矿工要保证整个比特币网络中的比特币总量是不变的,其他的只需要真实记录到区块内部就好了。这个过程结束后,所有的交易都有据可查。
再说 ZCash 是如何利用零知识证明做到交易匿名的。
假设大狗要给二狗转 1 个 ZEC,流程大概如下:
- 大狗用自己创私钥对这个 ZEC 的交易单子进行签名,证明自己有对这个 ZEC 的使用权;
- 此时这个 ZEC 的交易单子上多了一串随机字符串,该字符串具有唯一性,也就是单号;
- 系统为二狗也创建 1 个 ZEC 的交易单子,且该单子也有一个单号,也是唯一的;
- 要确认二狗的单子上有一个 ZEC 的使用权时,需要将大狗的单子上的 ZEC 销毁,但是 ZCash 不是直接销毁的,而是将大狗的交易单号放到一个作废列表中,这时二狗才能拥有这一个 ZEC 的使用权。
在确认二狗资产所有权的时候,需要读取这笔资产的单号是否在作废列表中,如果不在,二狗才有这个 ZEC 的使用权。在这个交易过程中,二狗是不需要看到大狗对这个 ZEC 的使用权的,但是交易却达成了。因为大狗只需要向矿工们提供自己的单号,矿工把这个单号放入作废列表中即可。