Appearance
Fiat-Shamir启发式
Fiat-Shamir可以将交互式证明转换为非交互式证明。
交互式证明
以下使用基于离散对数的Sigma协议作为示例:
假设有参与者Alice(证明者)和Bob(验证者),Alice想向Bob证明她知道某个秘密值sk
.
- Setup: Alice生成公私钥对
(pk, sk)
,并将公钥pk
发送给Bob。 - Commit: Alice选择随机数
r
,计算承诺值t = g^r
,并将t
发送给Bob。 - Challenge: Bob选择随机挑战
c
,并将c
发送给Alice。 - Response: Alice计算响应值
s = r + c * sk
,发送s
给Bob。 - Verify: Bob验证等式
g^s = t * pk^c
是否成立。如果成立,Bob接受证明,否则拒绝。
非交互式证明
- Setup: Alice生成公私钥对
(pk, sk)
,并将公钥pk
发送给Bob。 - Commit: Alice选择随机数
r
,计算承诺值t = g^r
。 - Challenge: Alice使用哈希函数
H
计算挑战c = H(t, pk)
。 - Response: Alice计算响应值
s = r + c * sk
。 - Proof: Alice将证明
(t, s)
发送给Bob。 - Verify: Bob计算挑战
c = H(t, pk)
,并验证等式g^s = t * pk^c
是否成立。如果成立,Bob接受证明,否则拒绝。
为什么有效
Fiat-Shamir启发式的有效性基于以下几点:
- 随机性:哈希函数
H
的输出在理论上是不可预测的,类似于Bob随机选择挑战c
。这确保了Alice无法预先计算出有效的响应s
。 - 绑定性:一旦Alice计算出
t
,她就无法更改它,因为H(t, pk)
会生成一个固定的挑战c
。这防止了Alice在知道挑战后调整她的响应。 - 不可伪造性:如果Alice不知道私钥
sk
,她无法计算出有效的响应s
,因为这需要知道sk
来满足验证方程。