区块链应用开发指南:业务场景剖析与实战
上QQ阅读APP看书,第一时间看更新

3.2 零知识证明使用场景案例

3.2.1 场景一:万圣节糖果

故事是这样的:一年一度的万圣节到来,小丽和小明分别领取到了一定数量的糖果。他们想知道他们是否收到了相同数量的糖果,却不想透露糖果的数量,因为他们不想彼此分享。

现在我们假设,他们袋子里可能装有10、20、30个或40个糖果,如图3-1所示。

图3-1 万圣节糖果

这时小明想了个办法,为了比较他们拥有的糖果数量,小明拿到4把钥匙和盒子,盒子上分别写上10、20、30、40,分别对应糖果的数量。小明最后只保留了自己糖果数量跟盒子数字一样的钥匙,其他3把钥匙就丢弃了(假设小明只保留了写着20的盒子的钥匙)。

然后,小丽在4张纸条上,其中一张写上“+”,另外三张写上“-”。然后,把写有“+”的纸条放到跟自己糖果数量是相同数字的盒子里,其余纸条放到其他盒子(假设小丽把“+”放到写着30的盒子)。

这时,小明回来后打开他有钥匙的那个盒子(写着20),然后看它是否包含“+”或“-”的纸条。

(1)如果纸条上写着“+”,说明两个人的糖果数量一致

(2)如果纸条上写着“-”,说明两个人糖果数量不一致,但是并不知道对方糖果的具体数量。

(3)这里小明看到纸条上写着“-”,意味着两人的糖果数量不一样,但是小明无法知道小丽的糖果数量。这时候,小丽看到小明手上拿着一张写“-”的纸条,那她也知道两人的糖果数量不一样,但是也无法知道对方拥有糖果的确切数量。

上面这个过程,就是一个零知识证明。

ZKP(“零知识证明”的英文缩写)允许我们证明自己在通信的另一“端”知道某个人的某个秘密(或许多秘密),而没有实际透露出秘密。术语“零知识”源于以下事实:第一方没有透露有关机密的信息(“零”),但是第二方(被称为“验证者”)确信第一方(被称为“证明者”)知道有关机密。