离散对数问题的零知识证明

证明者(Prover)声称知道一个秘密指数 $ x $,使得公开的 $ g^x = y $ 成立,但证明过程中绝不泄露 $ x $ 的任何信息。


标准协议流程(Schnorr Sigma 协议)

公共参数:大素数 $ p $,循环群 $ G $ 的生成元 $ g $,阶为 \(q\)(素)
公开值(断言):$ y = g^x \mod p $
秘密知识(证人):$ x \in \mathbb{Z}_q $

协议运行以下三步(承诺-挑战-响应):

  • 第1步:承诺(Commitment)
    证明者随机选取一个临时随机数(盲化因子)$ t \in_R \mathbb{Z}_q $,计算承诺值 $ R = g^t $,并将 $ R $ 发送给验证者。

  • 第2步:挑战(Challenge)
    验证者随机选取一个挑战值 $ u \in_R \mathbb{Z}_q $(通常为一个哈希值或短整数),并发送给证明者。
    关键:挑战必须是不可预测的、新鲜随机的。

  • 第3步:响应(Response)
    证明者计算响应值 $ w = t - ux \pmod{q} $,并将 $ w $ 发送给验证者。
    验证者检查以下等式是否成立:

    \[R \stackrel{?}{=} g^w \cdot y^u \pmod{p} \]

    若成立,则验证者确信证明者知道 $ x $。

等式验证的数学原理
因为 \(g^t = g^{t - ux} \cdot g^{ux} = g^w \cdot y^u\),是完全成立的。


三要素

  • 完备性(Completeness):诚实的证明者总能通过验证(数学恒等式保证,概率为1)。
  • 可靠性(Soundness)——防欺骗
    若证明者不知道 $ x $,他必须先提交 $ R $。由于挑战 $ u $ 是事后随机发出的,作弊者最多只能提前准备一个“假响应”应对某个 $ u $。因此,单次欺骗概率为 $ 1/q $,实际中多轮交互。
  • 零知识性(Zero-Knowledge)——不泄露信息

--

posted @ 2026-06-22 19:24  lumiere_nebula  阅读(5)  评论(0)    收藏  举报