Comunion 区块链深度学习系列|零知识证明原理

Comunion 是一个基于区块链的组织形式 (DAO) 与创业互助网络,为超级个体提供面向数字时代的全新商业基础设施和价值转化机制,致力于让劳动价值 像 资本一样自由流通、交易和积累。

本系列内容包含:基本概念及原理、密码学、共识算法、钱包及节点原理、挖矿原理及实现。

在引入零知识证明是什么的时候?我们通过一个例子一起来摸索一下。

使用红、黄、蓝(r,y,b)三种颜色对下图中的点着色,使得任意两个相连的点的颜色不一样?




大家可以花大约30秒时间来思考一下如何着色


我们一起来看一下这个问题。

首先这个问题肯定是可解的,下图是其中一种着色结果。






那么如何在不透露自己着色结果的情况下,说服其他人,使得其相信已经正确着色了呢?

证明方式如下:

1.将已经着色好的结果盖住;

2.开始向其他人证明声明者知道最终结果,但不会透露;

3.允许验证人打开任意两个相邻的盒子;

4.任意两个相互链接盒子里面的点颜色是不一样的。

此时验证人会提出一个问题:会不会是声明人运气好,而验证人运气不好,正好选中的相邻盒子的颜色不相同?所以需要重新验证一次。

当验证者提出此种请求时,声明者必须要满足。

此时声明者需做的工作如下:

1.改变自己着色的结果。

为什么需要改变结果呢?因为在图中点的位置是不动的,如果不改变结果的话,那么验证者可以采用排除法,依次将盒子翻开,造成的结果是在翻5次盒子之后,验证者会知道所有着色结果。

而作为证明者,是不想让其他人知道最终结果的。在这里会用到零知识证明的知识,即证明的时候不透露最终结果。

比如:将红色变成蓝色,将蓝色变成黄色,将黄色变成红色。




第二种着色情况


2.将第二次着色情况盖住。

3.让验证者进行第二次验证。

需要注意的是,声明人只打开验证人要验证的位置,例如红色的圈圈起来的盒子,其它盒子是不打开的。

这样验证人在进行第二次验证时,也会发现验证结果是正确的,但不会知道所有结果。






可有可能验证者会觉得两次验证不够,想要继续验证,这也是可以的,此时再次重复之前的步骤:盖住所有结果->改变做事方式->得出结果->进行验证。

这样做的意义是:保证验证者每次的验证结果均为真,但不知道事件最终结果。声明人通过这种不泄漏自身成果的方式,说服验证者其成果的正确性。

在这个过程当中,与零知识证明的具体联系是:

声明人表述一个问题的时候,不仅知道问题的答案,并且要说服任何人其知道这个答案,却不会透露这个答案的任何消息。

例如,刚刚的问题是着色,声明人的答案是着色的结果,并且已经正确的着色。声明人向验证者证明的时候,并没有透露其着色的结果,但是却可以证明其知道正确的做事结果。

这就是零知识证明的过程,了解这个过程主要是为了学习区块链应用到密码学中的离散对数问题,我们将在下篇文章进行讲解。

写评论,请先登录