https://link.springer.com/article/10.1007/s42452-019-0989-z
描述了构建零知识区间证明(ZKRP)的不同策略,例如2001年Boudot提出的方案;2008年Camenisch等人提出的方案;以及2017年提出的Bulletproofs。
总结并比较了保护链上私人信息的两类方式,引出主旨ZKRP:
ZKRP的应用案例:
在DLT和区块链的具体场景中重要的应用:
定义:非交互式零知识(Non-Interactive Zero Knowledge, NIZK)证明方案由算法Setup、Prove和Verify定义:
Fiat–Shamir 启发式:将 interactive ZKP转换成NIZK。
缺点是,它使密码系统在随机oracle模型(ROM)下是安全的。
零知识证明方案具有以下性质:
提交秘密的不同方式对应不同的ZKPR实现策略:
实现Boudot于2001年提出的ZKRP所需的算法。这个构建过程需要一些基本组件,比如零知识证明两个承诺隐藏着相同的秘密,以及零知识证明秘密是一个完全平方数。
g 1 D h 1 D 1 E − c = g 1 ω + c x h 1 η 1 + c r 1 g 1 − c x h 1 − c r 1 = Ω 1 g_1^Dh_1^{D_1}E^{-c}=g_1^{\omega+cx}h_1^{\eta_1+cr_1}{g_1^{-cx}h_1^{-cr_1}}=\Omega_1 g1Dh1D1E−c=g1ω+cxh1η1+cr1g1−cxh1−cr1=Ω1
注意:
E
=
F
x
h
r
3
=
g
x
2
h
r
2
x
h
r
1
−
r
2
x
=
g
x
2
h
r
1
E=F^xh^{r_3}=g^{x^2}h^{r_2x}h^{r_1-r_2x}=g^{x^2}h^{r_1}
E=Fxhr3=gx2hr2xhr1−r2x=gx2hr1
调用的参数
g
1
=
F
,
h
1
=
h
2
=
h
,
g
2
=
g
g_1=F,h_1=h_2=h,g_2=g
g1=F,h1=h2=h,g2=g
方案依赖于Boneh-Boyen数字签名:公私钥对
x
∈
R
Z
p
,
y
=
g
x
,
σ
=
g
1
/
(
x
+
m
)
x\in_R\mathbb Z_p,y=g^x,\sigma=g^{1/(x+m)}
x∈RZp,y=gx,σ=g1/(x+m),验证
e
(
σ
,
y
g
m
)
=
e
(
g
,
g
)
e(\sigma,yg^m)=e(g,g)
e(σ,ygm)=e(g,g)(q-Strong Diffie-Hellman assumption)
验证者最初为目标集合S中的每个元素计算数字签名。
证明者通过将其提升到随机选择的指数v ∈ ℤp对该数字签名进行盲化,使得确定签名的哪个元素是计算上不可行的。
C
c
h
z
γ
g
z
δ
=
g
δ
c
h
γ
c
h
m
−
γ
c
g
s
−
δ
c
=
D
C^ch^{z_\gamma}g^{z_\delta}=g^{\delta c} h^{\gamma c}h^{m-\gamma c}g^{s-\delta c}=D
Cchzγgzδ=gδchγchm−γcgs−δc=D
这个是用挑战c和所使用的随机值生成的response
z
δ
,
z
γ
z_\delta,z_\gamma
zδ,zγ的验证
e
(
V
,
y
)
c
⋅
e
(
V
,
g
)
−
z
δ
⋅
e
(
g
,
g
)
z
τ
=
e
(
V
,
g
)
x
c
⋅
e
(
V
,
g
)
−
s
+
δ
c
⋅
e
(
g
,
g
)
t
−
τ
c
=
e
(
V
,
g
)
−
s
⋅
e
(
g
1
/
(
x
+
δ
)
,
g
)
τ
(
x
c
+
δ
c
)
⋅
e
(
g
,
g
)
t
−
τ
c
=
a
e(V,y)^c\cdot e(V,g)^{-z_\delta}\cdot e(g,g)^{z_\tau}=e(V,g)^{xc}\cdot e(V,g)^{-s+\delta c}\cdot e(g,g)^{t-\tau c}=e(V,g)^{-s}\cdot e(g^{1/(x+\delta)},g)^{\tau(xc+\delta c)}\cdot e(g,g)^{t-\tau c}=a
e(V,y)c⋅e(V,g)−zδ⋅e(g,g)zτ=e(V,g)xc⋅e(V,g)−s+δc⋅e(g,g)t−τc=e(V,g)−s⋅e(g1/(x+δ),g)τ(xc+δc)⋅e(g,g)t−τc=a
详见https://blog.csdn.net/jiongxv/article/details/124133111或原文