二次剩余问题的零知识证明
公开一个合数 $ n $(通常为 RSA 模数,即 $ n=pq $)和一个整数 $ y $,证明者知道一个 $ x $,使得 $ x^2 \equiv y \pmod{n} $(即 $ y $ 是模 $ n $ 下的二次剩余),但绝不泄露 $ x $ 的具体值。
协议描述
Goldwasser-Micali 风格的经典构造
公共参数:合数 $ n $(大素数 $ p,q $ 的乘积,但 $ p,q $ 不公开),$ y \in \mathbb{Z}_n^* $,且承诺方声称 $ y \in QR_n $(即存在 $ x $ 使 $ x^2 \equiv y \mod n $)。
秘密证人(Witness):证明者(Prover,简称 P)知道 $ x $,满足 $ x^2 \equiv y \pmod{n} $。
协议执行以下三步:
-
承诺(Commitment):
P 随机选取一个盲化因子 $ r \in_R \mathbb{Z}_n^* $,计算 $ t = r^2 \bmod n $,并将 $ t $ 发送给验证者(Verifier,简称 V)。
(作用:$ t $ 是一个随机二次剩余,用来掩盖真实的根 $ x $) -
挑战(Challenge):
V 随机抛掷一枚公平硬币,选取挑战值 $ b \in {0, 1} $,并将 $ b $ 发送给 P。 -
响应(Response):
- 若 $ b = 0 $:P 发送 $ z = r $。
- 若 $ b = 1 $:P 发送 $ z = r \cdot x \bmod n $。
V 收到 $ z $ 后,验证以下等式: - 若 $ b = 0 $:检查 $ z^2 \equiv t \pmod{n} $ 是否成立。
- 若 $ b = 1 $:检查 $ z^2 \equiv t \cdot y \pmod{n} $ 是否成立。
若验证通过,则 V 接受本次证明。
单轮交互的欺骗概率为 $ 1/2 $。要达到可忽略的安全级别(如 $ 2^{-80} $),需将协议并行或重复执行 $ k $ 次,且每次都重新独立选择新的 $ r $。
2. 三个安全性性质的证明
(1) 完备性(Completeness)
定义:如果 P 确实知道合法的 $ x $,且完全遵守协议,V 总会接受。
证明:分两种情况计算:
- 当 $ b=0 $ 时:$ z = r \Rightarrow z^2 = r^2 = t $,验证式自动成立。
- 当 $ b=1 $ 时:$ z = r \cdot x \Rightarrow z^2 = r^2 \cdot x^2 = t \cdot y $,验证式自动成立。
由于 $ \bmod n $ 运算保持乘法同态,两组等式恒成立。因此,诚实验证者接受的概率为 1,完备性得证。
(2) 可靠性(Soundness,又称知识可靠性)
定义:若 P 不知道 $ x $(即无法提取 $ y $ 的平方根),则他通过 V 验证的概率极低(单轮不超过 $ 1/2 $)。
证明(利用“提取器”归约思想):
假设存在一个恶意证明者 $ P^* $,他能在某一轮中同时成功响应同一个承诺 $ t $ 下的两个不同挑战 $ b=0 $ 和 $ b=1 $。
- 针对 $ b=0 $,P 给出有效响应 $ z_0 $,满足 $ z_0^2 \equiv t \pmod{n} $。
- 针对 $ b=1 $,P 给出有效响应 $ z_1 $,满足 $ z_1^2 \equiv t \cdot y \pmod{n} $。
将两式相除(或联立):
即:
这意味着 $ P^* $ 实际上已经在数学上构造出了 $ y $ 的一个平方根(即 $ x = z_1 \cdot z_0^{-1} $),这与“P 不知道 $ x $”的前提矛盾。
因此,一个不知道 $ x $ 的作弊者,最多只能针对一个挑战值提前做好准备(只能猜测 V 会抛 0 还是 1)。由于挑战 $ b $ 是完全随机的,单轮欺骗成功的概率精确等于 $ 1/2 $。
经 $ k $ 轮独立重复后,欺骗概率降为 $ (1/2)^k $,不可忽略。可靠性得证。
(3) 零知识性(Zero-Knowledge)
定义:验证者 V 除了知道“P 知道 $ x $”这一事实外,无法获得关于 $ x $ 的任何额外计算信息。
证明(通过构造“模拟器”Simulator):
我们针对诚实验证者(Honest-Verifier)模型,构造一个在多项式时间内运行的模拟器 $ S $,它在不接触真实 $ x $ 的情况下,生成一个与真实协议对话($ t, b, z $)在统计/计算上不可区分的模拟转录本。
模拟器 $ S $ 的运作方式如下:
- 模拟器随机猜测一个挑战 $ b' \in {0, 1} $。
- 若 \(b' = 0\):$ S $ 随机选取一个 $ z \in_R \mathbb{Z}_n^* $,计算 $ t = z^2 \bmod n $。输出模拟对话 $ (t, 0, z) $。
- 若 \(b' = 1\):$ S $ 随机选取一个 $ z \in_R \mathbb{Z}_n^* $,计算 $ t = z^2 \cdot y^{-1} \bmod n $。输出模拟对话 $ (t, 1, z) $。
不可区分性分析:
- 在真实协议中,$ r $ 是均匀随机选取的,因此 $ t = r^2 $ 是群 $ QR_n $ 上的均匀随机分布。
- 在模拟器中:
- 当 $ b'=0 $ 时,$ t = z^2 $,因为 $ z $ 均匀随机,所以 $ t $ 同样是 $ QR_n $ 上的均匀随机分布。
- 当 $ b'=1 $ 时,$ t = z^2 \cdot y^{-1} $。因为 $ y $ 是二次剩余,$ y^{-1} $ 也是二次剩余。均匀随机二次剩余 $ z^2 $ 乘以一个固定的二次剩余 $ y^{-1} $,结果依然均匀分布在 $ QR_n $ 上(群乘法置换性质)。
- 无论挑战值是 0 还是 1,响应值 $ z $ 在两种情况下都呈现为 $ \mathbb{Z}_n^* $ 上的均匀随机分布,不携带任何关于 $ x $ 的统计特征。
因此,模拟器生成的 $ (t, b, z) $ 的联合概率分布与真实协议中 V 看到的概率分布完全一致(统计不可区分)。由于 V 无法区分模拟对话与真实对话,V 无法从中提取任何关于秘密 $ x $ 的信息,零知识性得证。
离散对数的零知识证明:https://www.cnblogs.com/luminescence/p/20711110
图同构问题的零知识证明:https://www.cnblogs.com/luminescence/p/20684533

浙公网安备 33010602011771号