Try   HackMD

一个对SDH问题解的ZKPoK协议

Strong Diffie-Hellman (SDH) 问题定义如下:

给定

(q+2)长的元组
(g1,g2,g2γ,g2(γ2),,g2(γq))
作为输入,输出
(g11/(γ+x),x)
,其中
xZp

SDH假设就是,不存在多项式时间算法可以以不可忽略概率解决SDH问题。

Schnorr协议,是一个证明「知道离散对数」的ZKPoK。以下ZKPoK协议是对Schnorr协议的扩展,可以以零知识的方式证明「知道SDH问题的解」。(至于我为什么要介绍这个协议,以后就慢慢知道了。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

秘密值:

γ
公开值:
g1,u,v,hG1,g2,wG2
, 其中
w=g2γ

要证明的witness是SDH问题的解:

(A,x),其中
AG1
xZp
,满足关系:

Aγ+x=g1
e(A,wg2x)=e(g1,g2)

协议

证明者选择随机数

α,βRZp,计算:
T1uαT2vβT3Ahα+βδ1xαδ2xβ

接下来证明者和验证者执行ZKPoK协议,证明拥有满足如下五个关系的知识

(α,β,x,δ1,δ2)
uα=T1vβ=T2e(T3,g2)xe(h,w)αβe(h,g2)δ1δ2=e(g1,g2)/e(T3,w)T1xuδ1=1T2xvδ2=1

注意第三个等式是由
e(A,wg2x)=e(g1,g2)
变形而来。

具体ZKPoK协议如下:

  1. Prover计算并发送
    R1R5

    R1urαR2vrβR3e(T3,g2)rxe(h,w)rαrβe(h,g2)rδ1rδ2R4T1rxurδ1R5T2rxvrδ2
  2. Verifier采样挑战值
    c
    并发送给Prover。
  3. Prover计算:
    sαrα+cαsβrβ+cβsxrx+cxsδ1rδ1+cδ1sδ2rδ2+cδ2
  4. Verifier验证:
    usα=?T1cR1(1)vsβ=?T2cR2(2)e(T3,g2)sxe(h,w)sαsβe(h,g2)sδ1sδ2=?(e(g1,g2)/e(T3,w))cR3(3)T1sxusδ1=?R4(4)T2sxvsδ2=?R5(5).

证明

完备性

对一个拥有SDH对

(A,x)的诚实证明者:

usα=urα+cα=(uα)curα=T1cR1,
所以前两个验证方程成立。
T1Sxusδ1=(uα)rx+cxurδ1cxα=(uα)rxurδ1=T1rxurδ1=R4,

所以最后两个验证方程成立。

e(T3,g2)sxe(h,w)sαsβe(h,g2)sδ1sδ2=e(T3,g2)rx+cxe(h,w)rαrβcαcβe(h,g2)rδ1rδ2cxαcxβ=e(T3,g2x)ce(hαβ,wg2x)c(e(T3,g2)rxe(h,w)rαrβe(h,g2)rδ1rδ2)=e(T3hαβ,wg2x)ce(T3,w)c(R3)=(e(A,wg2x)/e(T3,w))cR3=(e(g1,g2)/e(T3,w))cR3.
所以验证方程(3)成立。

知识证明

抽取器rewind证明者到收到挑战

c前的时间点,对于不同的挑战
cc
,证明者给出不同的一组应答
sα,sβ,sx,sδ1,sδ2
,且都满足5个验证方程。

Δc=cc,Δsα=sαsα,
Δsβ,Δsx,Δsδ1,Δsδ2
同理.
对验证方程(1) ,两个实例相除得到:
uΔsα=T1Δc
.
α~=Δsα/Δc
. 于是有
uα~=T1
.

类似地对于验证方程(2),可以得到

β~=Δsβ/Δc 使得
vβ~=T2
.

对验证方程 (4),两个实例相除得到

T1Δsx=uΔsδ1,减掉
T1=uα~
得到
uα~Δsx=uΔsδ1
Δsδ1=α~Δsx
.
类似地对验证方程(5),得到
Δsδ2=β~Δsx
.

最后,对两个验证方程(3)的实例相除,得到:

(e(g1,g2)/e(T3,w))Δc=e(T3,g2)Δsxe(h,w)ΔsαΔsβe(h,g2)Δsδ1Δsδ2=e(T3,g2)Δsxe(h,w)ΔsαΔsβe(h,g2)α~Δsxβ~Δsx

取第

Δc个根,且令
x~=Δsx/Δc
,得到
e(g1,g2)/e(T3,w)=e(T3,g2)x~e(h,w)α~β~e(h,g2)x~(α~+β~)

重写为
e(g1,g2)=e(T3hα~β~,wg2x~)

或者如果令
A~=T3hα~β~
,为
e(A~,wg2x~)=e(g1,g2).

于是抽取器得到了SDH对
(A~,x~)

零知识性

输出协议脚本的模拟器构造如下:

ARG1
α,βRZp

计算
T1uα,T2vβ,T3Ahα+β
.

如果判定性线性假设[1]

G1上成立,那么模拟器输出的
(T1,T2,T3)
的分布和任何证明者输出的分布不可区分。

模拟器选择挑战

cRZp 和值
sα,sβ,sx,sδ1,sδ2RZp
。计算:
R1usαT1cR2vsβT2cR4T1sxusδ1R5T2sxvsδ2R3e(T3,g2)sxe(h,w)sαsβe(h,g2)sδ1sδ2(e(T3,w)/e(g1,g2))c.

R1,R2,R3,R4,R5
和真实脚本分布一致。

模拟器输出最终脚本

(T1,T2,T3,R1,R2,R3,R4,R5,c,sα,sβ,sx,sδ1,sδ2),和协议脚本不可区分。


  1. 给定

    u,v,h,ua,vb,hcG1 判定
    a+b=c
    是否成立是困难的。 ↩︎