1. sigma-protocol的定义
在论文《On Σ-protocols》中,有如下定义:
- relation DL,其中的
w
w
w可称为a witness for
x
x
x:
D L = { ( x , w ) ∣ x = ( p , q , g , h ) , o r d ( g ) = o r d ( h ) = q , h = g w } DL=\{(x,w)|x=(p,q,g,h), ord(g)=ord(h)=q,h=g^w\} DL={(x,w)∣x=(p,q,g,h),ord(g)=ord(h)=q,h=gw}
其中,
p
,
q
p,q
p,q为素数,
g
,
h
∈
Z
p
∗
,
w
∈
Z
q
g,h\in Z_p^*,w\in Z_q
g,h∈Zp∗,w∈Zq,R为二进制relation,R表示为
{
0
,
1
}
∗
×
{
0
,
1
}
∗
\{0,1\}^*\times \{0,1\}^*
{0,1}∗×{0,1}∗。
满足上面条件的
(
x
,
w
)
∈
R
(x,w)\in R
(x,w)∈R成立。
以上,
x
x
x对于Prover P和Verifier V均可见,为public input,而满足
(
x
,
w
)
∈
R
(x,w)\in R
(x,w)∈R的
w
w
w为Prover P的private input,对Verifier V不可见。
场景描述为,
p
p
p为素数,
q
q
q为
p
−
1
p-1
p−1的最大素数因子,
g
为
Z
p
∗
g为 Z_p^*
g为Zp∗中order为
q
q
q的元素,某
w
w
w仅P可知,
h
=
g
w
m
o
d
p
h=g^w\ mod\ p
h=gw mod p,
x
=
(
p
,
q
,
g
,
h
)
x=(p,q,g,h)
x=(p,q,g,h)对P/V均可见,为public input。在实际应用时,
p
,
q
p,q
p,q通常长时间固定不变,关于
p
,
q
p,q
p,q的素数性V可以鉴定一次即可,不需要每次都鉴定。
详细的流程分为三大步:
- 1) P选择随机数 r ∈ Z q r\in Z_q r∈Zq, r r r仅P知,对V不可见,P计算 a = g r m o d p a=g^r\ mod\ p a=gr mod p,P将 a a a值发送给V;
- 2) V选择 t − b i t t-bit t−bit的随机数challenge e ∈ Z 2 t e\in Z_{2^t} e∈Z2t(此处的 t t t为固定的,且 2 t < q 2^t<q 2t<q),V将 e e e值发送给P;
- 3) P计算 z = r + e w m o d q z=r+ew\ mod\ q z=r+ew mod q,P将 z z z值发送给V,V判断 g z ? = a h e m o d p g^z?=ah^e\ mod\ p gz?=ahe mod p是否成立,若成立,则V接受认为P确实知道正确的 w w w值(满足 h = g w m o d p h=g^w\ mod\ p h=gw mod p)。
以上流程错误判断的概率为 1 2 t = 2 − t \frac{1}{2^t}=2^{-t} 2t1=2−t。
Sigma-protocol的定义如下:
上面定义的第二条,指的是:若Prover P*对于两个不同的challenges
e
,
e
′
,
e
!
=
e
′
e,e',e!=e'
e,e′,e!=e′,则有相应的
g
z
′
=
a
h
e
′
,
g
z
=
a
h
e
g^{z'}=ah^{e'},g^z=ah^e
gz′=ahe′,gz=ahe,两者相除有
g
z
−
z
′
=
h
e
−
e
′
m
o
d
p
g^{z-z'}=h^{e-e'}\ mod\ p
gz−z′=he−e′ mod p,当
e
−
e
′
!
=
0
e-e'!=0
e−e′!=0时,有
h
=
g
(
z
−
z
′
)
(
e
−
e
′
)
−
1
=
g
w
m
o
d
p
h=g^{(z-z')(e-e')^{-1}}=g^w\ mod\ p
h=g(z−z′)(e−e′)−1=gw mod p,从而有
w
=
(
z
−
z
′
)
(
e
−
e
′
)
−
1
m
o
d
q
w=(z-z')(e-e')^{-1}\ mod\ q
w=(z−z′)(e−e′)−1 mod q。
上面定义的第三条,指的是:仿真时,可选择随机数 z ∈ Z p ∗ , e ∈ Z q z\in Z_p^*,e\in Z_q z∈Zp∗,e∈Zq,计算 a = g z h − e m o d p a=g^zh^{-e}\ mod\ p a=gzh−e mod p,从而使得流程中第三步Verifier的验证可通过。
2. sigma-protocol的作用
sigma-protocol可用于知识证明及OR证明(OR-proof)。
关于OR证明,在论文《Proof Systems for General Statements about Discrete Logarithms》中的Example 3是一个OR-proof举例,设计巧妙。
参考资料:
[1] 论文《On Σ-protocols》
[2] https://en.wikipedia.org/wiki/Sigma_Protocol
[3] https://www.youtube.com/watch?v=nwsmG3S9wIc