零知识证明是什么?
零知识证明用一句话讲,就是:A手中有信息,B要负责验证A的确拥有这个信息,但B不能知道A的信息是什么。
零知识证明最早被发明出来的原因,是为了保护用户的隐私。我们既希望市场上有足够多的资讯让我们和交易对手之间的信息足够对称,又希望自己真正的私密信息不要泄露出去。
夫妻之间也是一样的,就算双方可以做到大部分真诚公开透明,也还是希望自己有部份的私人空间是另一半无法窥探的。总而言之,我们都需要适度的隐私作为安全感的外衣。
在区块链的世界里,如果所有的历史交易资讯都在链上,个人的隐私要如何被保护呢?
我们首先要知道一个大前提,比特币的安全性和可靠性是透过验证来实现的,而网络中所有的参与者都能独立验证某笔交易。所以保护隐私的机制必须被设定为:允许证明者和验证者证明某个交易信息是真实的,而且无需泄露除了”它是真实的”之外的任何信息数据,这就是零知识证明使用的密码学技术。
在一些婚姻关系中,夫妻之间可能存在这样一个分工的关系,一方上班赚钱,另一方在家做家事顾小孩。日子一久,待在家里的那方感到缺乏安全感,希望配偶的薪资能够交给他保管,而另一方也害怕自己辛苦赚来的钱就这样被另一半随意花掉了,怎么办?
于是双方达成下列约定:
- B的银行卡平常归A保管,A设了提款密码,A不知道里面有多少钱,也无权去查询馀额,但A被分配到每月固定的限额,可以用于日常开支,剩下的钱就是家庭的储蓄。
- B知道自己银行卡中有多少薪水,但他不知道提款密码,所以他自己无权动用,但是可以监控A的消费金额。
在上面这个交易中,证明者是A,而验证者是B。
假设今天B看到银行卡馀额减少了1,000块,转帐的流向不明,但是晚上回到家的时候,发现晚餐既没有变丰盛,也没有多了什么电器家具,甚至也没有新衣服,当他质问A又质问不出金钱的流向时,他可以合理怀疑下列两种可能情况:(1) A有隐瞒和欺骗的行为; (2)银行或其他不知名的人士偷了他的钱。
如果这笔钱确实是A提领走的,A要向B证明A没有乱花钱,A可以从房间拿出一个礼盒,对B说:”宝贝,这是我今天用你的薪水给你买的生日礼物,你看看喜不喜欢?”,双方一下子就冰释前嫌了。
以上就是零知识证明,从头到尾B不知道A设的提款密码是什么,但B可以合法验证一笔交易:A从银行中领了1,000块,买了B的生日礼物。
零知识证明的验证过程
从上述例子中,我们可以归结出,零知识证明的验证过程是这样的:
- 证明交易的人有权发起这笔交易:A是唯一有密码的人,是合法发起交易的请求者。
- 交易的发送方发出的金额等于接收方收到的金额:银行帐户减少了1,000块,B必须要看到家中出现1,000块的等价物。
- 发送方的馀额的确减少了:银行帐户减少1,000块是事实。
有哪些项目采用了零知识证明呢?
Zcash
Zcash就是最好的例子。Zcash集成了一种机制,在转账时自动隐藏发送和接收方地址、甚至转账金额,仅限定持有密钥的人可以查看。
Zcash官方网站:[https://z.cash/]
以太坊
Vitalik 曾表示,将利用四种技术来保障以太坊的隐私性:通道(Channels)、混合器(Mixers)、环签名(Ring Signature)及零知识证明(Zero knowledge proofs)。
通道是建立在交易的当事人之间,也就是说,通道之内的交易不走链上,只有当事人才有办法察看交易的细节。
混合器是一个中心化的处理器,一笔链上交易中会包含多个发送方和多个接收方,但你没有办法对应个别交易是由特定哪个发送方传给哪个接收方。
环签名是一个签名群组,我今天要发送一段信息,有以下几步骤:
1、密钥生成:为环中每个成员产生一个密钥对(公钥和私钥)。
2、签名:我用自己的私钥和任意n个环成员(包括自己)的公钥为信息生成签名。
3、签名验证:验证者根据环签名,和我发出的信息,验证签名是否为环中成员所签,如果有效就接收,否则丢弃。
零知识证明可说是四种方式中最强大的,隐私性保护程度最高,但未经改良前生成证明的效率极慢,计算需要48秒才能完成,据说今年升级后计算时间可缩短至7秒。
零知识证明的未来
有暗网的地方就有隐私需求,虽然目前来说零知识证明最大的障碍在于它的计算效率,一旦效率升级,普世化指日可待。