对零知识证明的一些整理(未完待续)
1,同态隐藏(Homomorphic Hidings)
- 给定E(x),很难反推出x的值
- 若x != y, 则E(x) != E(y)
- 若已知 E(x) 与 E(y),则可计算出E(x+y)
举例说明同态隐藏在零知识证明中的作用:
假设Alice知道 x 和 y的值使得 x+y=7,利用同态隐藏,Alice可以在不泄露x和y具体值的情况下像Bob证明她的确知道x和y的值,过程如下:
- Alice将 E(x) 和 E(y) 发送给Bob
- Bob通过 E(x) 和 E(y)计算出E(x+y),同时计算一下E(7)
- Bob检验E(x+y)是否等于E(7)
上面的验证过程保留了Alice的秘密,同时又能让Bob信服,那么问题是,什么样的E(x)才满足我们的期望呢? E(x) = x^2 这种普通的加减乘除的函数肯定不行。。。。
取模运算mod
7
m
o
d
4
=
3
7 mod4 = 3
7mod4=3,或者
7
∣
∣
m
o
d
4
=
3
7||_{mod4} = 3
7∣∣mod4=3有时我们也会把mod写在右边,记为
7
=
3
(
m
o
d
4
)
7 = 3 (mod4)
7=3(mod4)
本文我们统一用第二种。
模p乘方(p为质数,此处取5)
对于整数集合{1…p-1},对集合中任意元素求乘方后取模
x | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 x ∥ m o d 5 1^x∥ _{mod5} 1x∥mod5 | 1 | 1 | 1 | 1 |
2 x ∥ m o d 5 2^x∥ _{mod5} 2x∥mod5 | 2 | 4 | 3 | 1 |
3 x ∥ m o d 5 3^x∥ _{mod5} 3x∥mod5 | 3 | 4 | 3 | 1 |
4 x ∥ m o d 5 4^x∥ _{mod5} 4x∥mod5 | 4 | 1 | 4 | 1 |
我们把集合{1…p-1}与在集合上的求乘方后取模合称为 群
Z
p
Z_p
Zp,集合元素有限的群称之为有限群。当p取质数时,群
Z
p
Z_p
Zp会出现一个特征-——循环群,以上表为例,
2
x
∥
m
o
d
5
2^x∥ _{mod5}
2x∥mod5 这行,完美生成了集合中的每一个元素,这种群称之为循环群,2称之为这个群的生成元g。利用循环群的特性,我们可以构造一个符合要求的E(x)
令E(x) =
2
x
∣
∣
m
o
d
5
2^x||_{mod5}
2x∣∣mod5
我们检验**E(x)**是否满足同态隐藏的三个条件:
- 给定E(x)的值,很难反推x。(当p取5,g取2时当然不难,当p,g很大时,反推非常困难)
- 由于循环群的特性,x不同,E(x)也不同
- E(x+y) =
2
x
+
y
∣
∣
m
o
d
5
2^{x+y}||_{mod5}
2x+y∣∣mod5 =
(
2
x
∣
∣
m
o
d
5
∗
2
y
∣
∣
m
o
d
5
)
∣
∣
m
o
d
5
(2^x||_{mod5} * 2^y||_{mod5})||_{mod5}
(2x∣∣mod5∗2y∣∣mod5)∣∣mod5 =
E
(
x
)
∗
E
(
y
)
∣
∣
m
o
d
5
E(x)*E(y)||_{mod5}
E(x)∗E(y)∣∣mod5
故上述E(x)能满足同态隐藏的特性。
此处假设Alice要想Bob证明她拥有x+y=4这个问题的答案(例如x=3, y=1), 不想泄露xy的具体值。于是可以这么干:
- Alice将E(3) 的值3、E(1) 的值2发送给Bob
- Bob计算E(x+y) = 3 ∗ 2 ∣ ∣ m o d 5 = 1 =3*2||_{mod5}=1 =3∗2∣∣mod5=1
- Bob计算E(4)的值, = 1,
- 经过比较,Bob确信Alice确实知道x+y=4的答案。此过程中,Bob并不知道x,y的具体值,达到了隐藏的目的。
2,多项式盲计算
接下来,我们把要证明的问题变复杂点,假设Alice知道多项式
P
(
x
)
=
a
0
+
a
1
x
+
a
2
x
2
.
.
.
a
d
x
d
P(x)=a_0+a_1x+a_2x^2...a_dx^d
P(x)=a0+a1x+a2x2...adxd的系数,她要向Bob证明她有这样一组系数{
a
0
,
a
1
,
.
.
.
a
d
a_0,a_1,...a_d
a0,a1,...ad},同时不泄露各项系数。我们假设Alice手中的
P
(
x
)
=
1
+
2
x
+
3
x
2
P(x)=1+2x+3x^2
P(x)=1+2x+3x2,
E
(
x
)
=
2
x
∣
∣
m
o
d
5
E(x)=2^x||_{mod5}
E(x)=2x∣∣mod5,
p
=
5
p=5
p=5
那么问题来了,Alice如何证明自己呢?
我们先看这个问题比上面的x+y=4难在哪里
- 前者是个等式,且右边是个已知的常量
- 后者是个多项式
- 假如Bob取一个验证点,例如令x=2, 发给Alice,Alice计算 P ( 2 ) = 1 + 4 + 12 = 17 P(2)=1+4+12=17 P(2)=1+4+12=17,然后将17发送给Bob,此时Bob并无从验证17是否是正确的。另外Bob也不想直接把x=2发给Alice——他更想让Alice在不知道x的取值的情况下,证明自己知道多项式的系数。
首先,Bob的想隐藏x=2这一点是容易实现的——再用一次同态隐藏即可:
E
(
a
+
b
x
+
c
x
2
)
=
2
a
+
b
x
+
c
x
2
∣
∣
m
o
d
5
=
E
(
a
)
∗
E
(
x
)
b
∗
E
(
x
2
)
c
∣
∣
m
o
d
5
E(a+bx+cx^2)=2^{a+bx+cx^2}||_{mod5}=E(a)*E(x)^b*E(x^2)^c||_{mod5}
E(a+bx+cx2)=2a+bx+cx2∣∣mod5=E(a)∗E(x)b∗E(x2)c∣∣mod5
于是,Bob仅需将
E
(
x
)
E(x)
E(x)与
E
(
x
2
)
E(x^2)
E(x2)在x=2时的值发给Alice即可做到隐藏x=2的目的,同时又不影响Alice的证明。
E
(
x
)
=
2
2
∣
∣
m
o
d
5
=
4
E(x)=2^2||_{mod5}=4
E(x)=22∣∣mod5=4
E
(
x
2
)
=
2
4
∣
∣
m
o
d
5
=
1
E(x^2)=2^4||_{mod5}=1
E(x2)=24∣∣mod5=1
Alice拿到上述两个值,带入计算
E
(
P
(
x
)
)
=
2
1
+
2
x
+
3
x
2
∣
∣
m
o
d
5
=
E
(
1
)
∗
E
(
x
)
2
∗
E
(
x
2
)
3
∣
∣
m
o
d
5
E(P(x))=2^{1+2x+3x^2}||_{mod5}=E(1)*E(x)^2*E(x^2)^3||_{mod5}
E(P(x))=21+2x+3x2∣∣mod5=E(1)∗E(x)2∗E(x2)3∣∣mod5
E
(
P
(
x
)
)
=
2
∗
16
∗
1
∣
∣
m
o
d
5
=
2
E(P(x))=2*16*1||_{mod5}=2
E(P(x))=2∗16∗1∣∣mod5=2
最大的问题在于,当Alice计算出结果发送给Bob之后,Bob该如何验证呢?假如Bob知道
P
(
x
)
=
1
+
2
x
+
3
x
2
P(x)=1+2x+3x^2
P(x)=1+2x+3x2,那验证是比较简单的
E
(
P
(
2
)
)
=
E
(
17
)
=
2
E(P(2))=E(17)=2
E(P(2))=E(17)=2
但是,Bob不知道P(x),他该怎么去验证呢…
这个问题分两部分
zk-SNARKs最精彩的部分来了!!!!!