前置知识
群
令
G
G
G为一个非空集合,
∙
\bullet
∙是
G
G
G上的一个二元运算,这意味着对于任意的两个
a
,
b
∈
G
a,b \in G
a,b∈G,都有
a
∙
b
∈
G
a \bullet b \in G
a∙b∈G
例子:
G
=
Z
14
=
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
G=Z_{14}={0,1,2,3,4,5,6,7,8,9,10,11,12,13}
G=Z14=0,1,2,3,4,5,6,7,8,9,10,11,12,13 "
∙
\bullet
∙"是模14下的加法
4
∙
12
=
4
+
12
m
o
d
14
=
2
4 \bullet 12= 4 + 12 mod 14 = 2
4∙12=4+12mod14=2
G
=
Z
14
∗
=
1
,
3
,
5
,
9
,
11
,
13
G=Z_{14}^*={1,3,5,9,11,13}
G=Z14∗=1,3,5,9,11,13
"
∙
"
"\bullet"
"∙"是模14下的乘法
5
∙
9
=
5
×
9
m
o
d
14
=
3
5\bullet9 = 5\times9 mod 14 = 3
5∙9=5×9mod14=3
G
G
G如果满足以下性质,则
G
G
G是一个群
- 封闭性: ∀ a , b ∈ G , a ⋅ b ∈ G \forall a,b \in G ,a \cdot b \in G ∀a,b∈G,a⋅b∈G
- 关联性: ∃ \exist ∃元素 1 ∈ G 1 \in G 1∈G 满足 1 ⋅ a 1 \cdot a 1⋅a = a ⋅ 1 a \cdot 1 a⋅1 对所有的 a ∈ G a \in G a∈G
- 可逆性:
∀
a
∈
G
,
∃
一
个
唯
一
的
b
∈
G
\forall a \in G, \exist 一个唯一的 b \in G
∀a∈G,∃一个唯一的b∈G
满足 a ⋅ b a \cdot b a⋅b = b ⋅ a b \cdot a b⋅a =1;b是a的逆元,记为 a − 1 a^{-1} a−1
群的阶
一个群的阶是这个群的大小,也就是群中含有的元素个数
记
G
G
G为阶为
m
m
m的群,则
a
m
=
1
a^m=1
am=1
对于任意的
i
∈
Z
,
a
i
=
a
i
m
o
d
m
i\in Z,a^i=a^{i mod m}
i∈Z,ai=aimodm
代表元:
生成元与循环群
交互式证明(Interactive Proofs)
一个交互式证明系统包含两方:证明者(Prover)和验证者(Verifier)。给一个陈述,验证方会对证明方提出询问,经过几轮交互之后决定是否这个陈述是真的。直观上说,一个像这样的证明系统满足两个性质:
1、完备性:所有真的陈述都必须有证明。也就是说,经过验证方和证明方的交互后,验证方有能力得出陈述为真的结论。
2、健全性:所有假的陈述都没有证明,恶意的证明者不能说服验证者假的陈述为真。
进入正题
令 p p p 为一个素数, q ∣ p − 1 q | p-1 q∣p−1,且 g g g是 Z p ∗ Z_p^* Zp∗中阶为 q q q的生成元。假设一个证明者(prover) P P P在 Z q Z_q Zq中随机选择了一个 w w w,并且发布了 h = g w m o d p h=g^wmodp h=gwmodp。一个验证者(Verifier)V得到了 p , q , g , h p,q,g,h p,q,g,h能够检查 p , q p,q p,q是否为素数,以及 g , h g,h g,h是否拥有阶 q q q。因为在 Z q ∗ Z_q^* Zq∗下只有一个阶为 q q q的子群,所以 h ∈ < g > h\in<g> h∈<g>,存在 w w w使得 h = g w h=g^w h=gw,但这不代表 P P P知道 w w w.
Schnorr协议
1、
P
P
P随机在
Z
q
Z_q
Zq中选择一个
r
r
r,将
a
=
g
r
m
o
d
p
a=g^r mod p
a=grmodp送给
V
V
V
2、
V
V
V选择随机一个在
Z
2
t
Z_{2^t}
Z2t中的挑战信息
e
e
e送给
P
P
P。这里
t
t
t的范围固定为
2
t
<
q
2^t<q
2t<q
3、
P
P
P将
z
=
r
+
e
w
m
o
d
q
z=r+ew mod q
z=r+ewmodq送给
V
V
V,
V
V
V检查
g
z
=
a
h
e
m
o
d
p
g^z=ah^emod p
gz=ahemodp,如果是则接受
一个恶意的证明者 P P P如果不能得到 w w w的值,则 P P P一次最多只能正确获得一个挑战信息 e e e
证明
假如某一证明者
P
∗
P^*
P∗,发送
a
a
a,能够正确得到两个不同的挑战信息
e
e
e,
e
′
e'
e′。这意味着他可以产生
z
,
z
′
z,z'
z,z′同时满足,
g
z
=
a
h
e
m
o
d
p
g^z=ah^emodp
gz=ahemodp和
g
z
′
=
a
h
e
′
m
o
d
p
g^{z'}=ah^{e'}modp
gz′=ahe′modp。两个等式两边相除,我们可以得到
h
=
g
(
z
−
z
′
)
(
e
−
e
′
)
−
1
m
o
d
p
h=g^(z-z')(e-e')^{-1} mod p
h=g(z−z′)(e−e′)−1modp,则
w
=
(
z
−
z
′
)
(
e
−
e
′
)
−
1
m
o
d
q
w=(z-z')(e-e')^{-1} mod q
w=(z−z′)(e−e′)−1modq,那么
P
∗
P^*
P∗就get到了
w
w
w。
注:恶意的 P P P可以先通过计算 a a a,然后再通过等式 g z = a h e g^z=ah^e gz=ahe计算 z z z的值,因为恶意 P P P不知道 w w w的值,也可以自己随便选一个 z z z
解释:因为如果 e − e ′ ≠ 0 m o d q e-e' \neq 0 mod q e−e′=0modq,恶意证明者就可以获取 w w w,反之如果 e − e ′ = 0 e-e' = 0 e−e′=0,则不能获取 w w w,不能获取的概率为 1 / 2 t 1/2^t 1/2t(挑战信息 e e e的长度为 t t t)
Σ \Sigma Σ协议