零知识证明-交互式_非交互式

1,069次阅读
没有评论

今天莫老师讲了零知识证明的相关的概念,首先讲讲零知识证明是用来干什么的,零知识证明是为了解决对象 a 向对象 b 证明自己有某种权限,但又不能泄露对象 a 的任何有用信息。

至于怎么零知识证明呢?请看下面的例子,零知识证明有两种实现方式,一种是交互式验证,还有一种是非交互式验证。

下面我将用 P 表示是示证者,用 V 表示验证者。同时我也会引入一个使用离散对数的场景,便于理解问题。

场景:

已知 y 和 g 求w,因为这是离散对数,所以即使知道 y 和 g ,以目前计算机的能力是算不出来w的。 $%

2、非交互式

方案1:

1)首先 V 给 P 发送一个数字 C ,C由01组成的一个序列(例如:010111010110001101),下面用 c 表示 C 中的一位。

2)然后 P 对数字 c 的每一位,都计算出$w_c=w_0(1-c)+w_1(c)$,设$g^{w_c}=g^{w_0(1-c)+w_1}=(y_0)^{1-c}*y_1^{c}$

3)之后,P计算出每个 c 对应的$w_c$,并把$w_c$,$y_0$,$y_1$放到集合 S 中。S={w_c, y_0, _y_1|w_c, y_0, _y_1|w_c, y_0, _y_1|……}

4)然后 V 开始验证每一个对$w_c$,$ y_0$, $y_1$,看是否满足$g^{w_c}=g^{w_0(1-c)+w_1}=(y_0)^{1-c}*y_1^{c}$。

方案2:

相比方案1减少了交互次数,更佳。

首先 P 和 V 共同定义一个哈希函数,例如H

1)首先 P 随机生成一个$ y_0 $$y_1$,然后计算出$c=H(y_0, y_1)$。

2)然后循环第(1)步,计算 n 个$w_a=w_0(1-c)+w_1(c)$,设$g^{w_a}=g^{w_0(1-c)+w_1}=(y_0)^{1-c}*y_1^{c}$

3)之后,把$w_a$,$y_0$,$y_1$放到集合 S 中。S={w_a, y_0, _y_1|w_a, y_0, _y_1|w_a, y_0, _y_1|……}

4)V 收到 P 发送来的集合 S,然后计算$c=H(y_0, y_1)$,然后看$g^{w_a}=(y_0)^{1-c}*y_1^{c}$,是否相等。

总结:

上课的莫老师讲的很透彻,通俗易懂,同时也感谢我的导师给我推荐了这门课,致敬。多听听大佬讲课,真的受益匪浅,要是本科的时候多听听清北的课岂不是要……,亡羊补牢,为时不晚,Just do it!

2
西园公子
版权声明:本站原创文章,由西园公子2021-07-18发表,共计972字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...