高效知识零知识证明全解析
1. Σ协议基础
Σ协议在密码学的知识证明领域扮演着关键角色。我们先从基础的Σ协议说起,其目的是让证明者A向验证者B证明自己知道x∈G的一个f原像w。具体步骤如下:
1. 第一步 :A从集合H中随机选取一个元素p,计算a = f(p)并发送给B。
2. 第二步 :B从集合{0, …, q - 1}中随机选取一个挑战值c,并将其发送给A。
3. 第三步 :A计算z = pw^c并发送给B,B则验证f(z)是否等于a x^c(这些计算都在群G中进行)。
这个基础协议实际上是Guillou/Quisquater的RSA协议和Schnorr的离散对数协议的推广。它满足完整性、特殊稳健性和特殊诚实验证者零知识(special HVZK),知识误差为1/q。
接下来,我们需要为承诺关系设计一个Σ协议。即A要证明自己知道(x, m)对应的(e, s),使得f(s)x^(-e) = m。具体步骤如下:
1. 第一步 :A从集合H中随机选取ρ,从集合{0, …, q - 1}中随机选取σ,计算a = f(ρ)x^σ并发送给B。
2. 第二步 :B从集合{0, …, q - 1}中随机选取挑战值c并发送给A。
3. 第三步 :A需要找到z1∈H和z2∈{0, …, q - 1},使得f(z1)x^z2 = a m^c。A首先计算满足f(˜w) = x^q的˜w,以及整数0 ≤ α <