# 一个对SDH问题解的ZKPoK协议 **Strong Diffie-Hellman (SDH)** 问题定义如下: > 给定$(q+2)$长的元组 $\left(g_1, g_2, g_2^\gamma, g_2^{\left(\gamma^2\right)}, \ldots, g_2^{\left(\gamma^q\right)}\right)$ 作为输入,输出 $\left(g_1^{1 /(\gamma+x)}, x\right)$ ,其中$x \in \mathbb{Z}_p^*$。 **SDH假设**就是,不存在多项式时间算法可以以不可忽略概率解决SDH问题。 Schnorr协议,是一个证明「知道离散对数」的ZKPoK。以下ZKPoK协议是对Schnorr协议的扩展,可以以零知识的方式证明「知道SDH问题的解」。(至于我为什么要介绍这个协议,以后就慢慢知道了。 :wink:) 秘密值:$\gamma$ 公开值: $g_1, u, v, h \in G_1 , g_2, w \in G_2$, 其中$w=g_2^\gamma$ 要证明的witness是SDH问题的解:$(A,x)$,其中$A \in G_1$ , $x \in \mathbb{Z}_p$,满足关系: $$A^{\gamma+x}=g_1$$ 即$e(A,wg_2^x)=e(g_1,g_2)$ ## 协议 证明者选择随机数$\alpha, \beta \stackrel{\mathrm{R}}{\leftarrow} \mathbb{Z}_p$,计算: $$ \begin{equation} T_1 \leftarrow u^\alpha \quad T_2 \leftarrow v^\beta \quad T_3 \leftarrow A h^{\alpha+\beta}\\ \delta_1 \leftarrow x \alpha \quad \delta_2 \leftarrow x \beta \end{equation} $$ 接下来证明者和验证者执行ZKPoK协议,证明拥有满足如下五个关系的知识$\left(\alpha, \beta, x, \delta_1, \delta_2\right)$: $$ \begin{array}{cc} u^\alpha=T_1 \\ v^\beta=T_2 \\ e\left(T_3, g_2\right)^x \cdot e(h, w)^{-\alpha-\beta} \cdot e\left(h, g_2\right)^{-\delta_1-\delta_2}=e\left(g_1, g_2\right) / e\left(T_3, w\right) \\ T_1^x u^{-\delta_1}=1 \\ T_2^x v^{-\delta_2}=1 \end{array} $$ 注意第三个等式是由$e(A,wg_2^x)=e(g_1,g_2)$变形而来。 具体ZKPoK协议如下: 1. Prover计算并发送$R_1\ldots R_5$: $$ \begin{array}{ll} R_1 \leftarrow u^{r_\alpha} & R_2 \leftarrow v^{r_\beta} \\ R_3 \leftarrow e\left(T_3, g_2\right)^{r_x} \cdot e(h, w)^{-r_\alpha-r_\beta} \cdot e\left(h, g_2\right)^{-r_{\delta_1}-r_{\delta_2}} \\ R_4 \leftarrow T_1^{r_x} \cdot u^{-r_{\delta_1}} & R_5 \leftarrow T_2^{r_x} \cdot v^{-r_{\delta_2}} \end{array} $$ 2. Verifier采样挑战值$c$并发送给Prover。 3. Prover计算: $$ s_\alpha \leftarrow r_\alpha+c \alpha \quad s_\beta \leftarrow r_\beta+c \beta \quad s_x \leftarrow r_x+c x \quad s_{\delta_1} \leftarrow r_{\delta_1}+c \delta_1 \quad s_{\delta_2} \leftarrow r_{\delta_2}+c \delta_2 $$ 4. Verifier验证: $$ \begin{aligned} u^{s_\alpha} & \stackrel{?}{=} T_1^c \cdot R_1 \quad (1)\\ v^{s_\beta} & \stackrel{?}{=} T_2^c \cdot R_2 \quad (2)\\ e\left(T_3, g_2\right)^{s_x} \cdot e(h, w)^{-s_\alpha-s_\beta} \cdot e\left(h, g_2\right)^{-s_{\delta_1}-s_{\delta_2}} & \stackrel{?}{=}\left(e\left(g_1, g_2\right) / e\left(T_3, w\right)\right)^c \cdot R_3 \quad (3) \\ T_1^{s_x} \cdot u^{-s_{\delta_1}} & \stackrel{?}{=} R_4 \quad (4)\\ T_2^{s_x} \cdot v^{-s_{\delta_2}} & \stackrel{?}{=} R_5 \quad (5). \end{aligned} $$ ## 证明 ### 完备性 对一个拥有SDH对$(A, x)$的诚实证明者: $$ u^{s_\alpha}=u^{r_\alpha+c \alpha}=\left(u^\alpha\right)^c \cdot u^{r_\alpha}=T_1^c \cdot R_1, $$ 所以前两个验证方程成立。 $$ T_1^{S_x} u^{-s_{\delta_1}}=\left(u^\alpha\right)^{r_x+c x} u^{-r_{\delta_1}-c x \alpha}=\left(u^\alpha\right)^{r_x} u^{-r_{\delta_1}}=T_1^{r_x} u^{-r_{\delta_1}}=R_4, $$ 所以最后两个验证方程成立。 $$ \begin{aligned} &e\left(T_3, g_2\right)^{s_x} \cdot e(h, w)^{-s_\alpha-s_\beta} \cdot e\left(h, g_2\right)^{-s_{\delta_1}-s_{\delta_2}} \\ &\quad=e\left(T_3, g_2\right)^{r_x+c x} \cdot e(h, w)^{-r_\alpha-r_\beta-c \alpha-c \beta} \cdot e\left(h, g_2\right)^{-r_{\delta_1}-r_{\delta_2}-c x \alpha-c x \beta} \\ &\quad=e\left(T_3, g_2^x\right)^c \cdot e\left(h^{-\alpha-\beta}, w g_2^x\right)^c \cdot\left(e\left(T_3, g_2\right)^{r_x} \cdot e(h, w)^{-r_\alpha-r_\beta} \cdot e\left(h, g_2\right)^{-r_{\delta_1}-r_{\delta_2}}\right) \\ &\quad=e\left(T_3 h^{-\alpha-\beta}, w g_2^x\right)^c \cdot e\left(T_3, w\right)^{-c} \cdot\left(R_3\right) \\ &\quad=\left(e\left(A, w g_2^x\right) / e\left(T_3, w\right)\right)^c \cdot R_3 \\ &\quad=\left(e\left(g_1, g_2\right) / e\left(T_3, w\right)\right)^c \cdot R_3 . \end{aligned} $$ 所以验证方程(3)成立。 ### 知识证明 抽取器rewind证明者到收到挑战$c$前的时间点,对于不同的挑战$c^{\prime} \neq c$,证明者给出不同的一组应答$s_\alpha^{\prime}, s_\beta^{\prime}, s_x^{\prime}, s_{\delta_1}^{\prime},s_{\delta_2}^{\prime}$,且都满足5个验证方程。 令 $\Delta c=c-c^{\prime}, \Delta s_\alpha=s_\alpha-s_\alpha^{\prime}$, $\Delta s_\beta, \Delta s_x, \Delta s_{\delta_1},\Delta s_{\delta_2}$同理. 对验证方程(1) ,两个实例相除得到:$u^{\Delta s_\alpha}=T_1^{\Delta c}$. 令 $\tilde{\alpha}=\Delta s_\alpha / \Delta c$. 于是有$u^{\tilde{\alpha}}=T_1$. 类似地对于验证方程(2),可以得到$\tilde{\beta}=\Delta s_\beta / \Delta c$ 使得$v^{\tilde{\beta}}=T_2$. 对验证方程 (4),两个实例相除得到 $T_1^{\Delta s_x}=u^{\Delta s_{\delta_1}}$,减掉 $T_1=u^{\tilde{\alpha}}$ 得到$u^{\tilde{\alpha} \Delta s_x}=u^{\Delta s_{\delta_1}}$或 $\Delta s_{\delta_1}=\tilde{\alpha} \Delta s_x$. 类似地对验证方程(5),得到 $\Delta s_{\delta_2}=\tilde{\beta} \Delta s_x$. 最后,对两个验证方程(3)的实例相除,得到: $$ \begin{aligned} \left(e\left(g_1, g_2\right) / e\left(T_3, w\right)\right)^{\Delta c} &=e\left(T_3, g_2\right)^{\Delta s_x} \cdot e(h, w)^{-\Delta s_\alpha-\Delta s_\beta} \cdot e\left(h, g_2\right)^{-\Delta s_{\delta_1}-\Delta s_{\delta_2}} \\ &=e\left(T_3, g_2\right)^{\Delta s_x} \cdot e(h, w)^{-\Delta s_\alpha-\Delta s_\beta} \cdot e\left(h, g_2\right)^{-\tilde{\alpha} \Delta s_x-\tilde{\beta} \Delta s_x} \end{aligned} $$ 取第$\Delta c$个根,且令$\tilde{x}=\Delta s_x / \Delta c$,得到 $$ e\left(g_1, g_2\right) / e\left(T_3, w\right)=e\left(T_3, g_2\right)^{\tilde{x}} \cdot e(h, w)^{-\tilde{\alpha}-\tilde{\beta}} \cdot e\left(h, g_2\right)^{-\tilde{x}(\tilde{\alpha}+\tilde{\beta})} $$ 重写为 $$ e\left(g_1, g_2\right)=e\left(T_3 h^{-\tilde{\alpha}-\tilde{\beta}}, w g_2^{\tilde{x}}\right) $$ 或者如果令 $\tilde{A}=T_3 h^{-\tilde{\alpha}-\tilde{\beta}}$,为 $$ e\left(\tilde{A}, w g_2^{\tilde{x}}\right)=e\left(g_1, g_2\right) . $$ 于是抽取器得到了SDH对 $(\tilde{A}, \tilde{x})$。 ### 零知识性 输出协议脚本的模拟器构造如下: 取$A \stackrel{\mathrm{R}}{\leftarrow} G_1$ 和 $\alpha, \beta \stackrel{\mathrm{R}}{\leftarrow} \mathbb{Z}_p$ 计算$T_1 \leftarrow u^\alpha, T_2 \leftarrow v^\beta ,T_3 \leftarrow A h^{\alpha+\beta}$. 如果**判定性线性假设**[^1]在$G1$上成立,那么模拟器输出的$\left(T_1, T_2, T_3\right)$ 的分布和任何证明者输出的分布不可区分。 模拟器选择挑战 $c \stackrel{\mathrm{R}}{\leftarrow} \mathbb{Z}_p$ 和值 $s_\alpha, s_\beta, s_x, s_{\delta_1}, s_{\delta_2} \stackrel{\mathrm{R}}{\leftarrow} \mathbb{Z}_p$。计算: $$ \begin{gathered} R_1 \leftarrow u^{s_\alpha} \cdot T_1^{-c} \quad R_2 \leftarrow v^{s_\beta} \cdot T_2^{-c} \quad R_4 \leftarrow T_1^{s_x} \cdot u^{-s_{\delta_1}} \quad R_5 \leftarrow T_2^{s_x} \cdot v^{-s_{\delta_2}} \\ R_3 \leftarrow e\left(T_3, g_2\right)^{s_x} \cdot e(h, w)^{-s_\alpha-s_\beta} \cdot e\left(h, g_2\right)^{-s_{\delta_1}-s_{\delta_2}} \cdot\left(e\left(T_3, w\right) / e\left(g_1, g_2\right)\right)^c . \end{gathered} $$ $R_1, R_2, R_3, R_4, R_5$ 和真实脚本分布一致。 模拟器输出最终脚本$\left(T_1, T_2, T_3, R_1, R_2, R_3, R_4, R_5, c, s_\alpha, s_\beta, s_x, s_{\delta_1}, s_{\delta_2}\right)$,和协议脚本不可区分。 [^1]: 给定 $u, v, h, u^a, v^b, h^c \in G_1$ 判定$a+b=c$ 是否成立是困难的。