Zcash核心:零知识证明(一)
Crazy Social Engineer. Cypherpunk Follower in China. 丧心病狂的社会攻城狮,加密朋克追随者。Weibo.com@Warrior比特币玩家,twitter『Bitcoin Warrior!』。
在Zcash:黑夜中潜行一文中曾提到Zcash的突破之处在于使用了零知识证明(zero knowledge proof)实现了私密交易与去中心化共存,那么,零知识证明究竟是什么?
它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。比如证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。 其中又分为交互式零知识证明和非交互式零知识证明。
交互式证明
举个例子,如何向色盲证明两个球颜色不同。
假设A有一个红球和黄球,她的一个色盲朋友B不相信A的球颜色不同,A如何才能让B相信这是真的呢?一个简单的办法如下:
- A把两个球给B,B每只手拿一个球
- A转过身背对B
- B抛一枚硬币,如果正面朝上,则保持不动,否则交换左右手的球
- A转过身,B问A是否交换过球
- 如果A回答错误,则B不相信;否则,重复100次实验,如果A都回答正确,则B相信这两个球是不同颜色的
为什么?如果两个球颜色不一样,那么A每次都应该能分辨;如果两个球颜色一样,则不管B有没有交换过,A都无法分辨,只能乱猜。这样每次猜对的概率只有1/2,重复100次,都猜对的概率将小到可以忽略,所以A将必然猜错。
这就是交互式零知识证明的一个例子,上述证明有三个特点:1)交互过程,整个证明需要A和B进行交互才能完成;2)具有随机性,即B需要抛一枚硬币,来决定是否交换球;3)零知识,虽然B最终相信了这两个球是不同颜色的,但B还是不知道这两个球是什么颜色的。
(未完待续)