这篇文章上次修改于 258 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

zk-Sigma

知道 1 个秘密 $w$

椭圆曲线生成元为 $G$ ,群的阶为 $| F_r |$ ;标量域为 $F_r$ ,基域为 $F_q$

知道秘密 $w$,且与公开输入 $Q$ 满足离散对数关系 $Q = w \cdot G$

交互式版:

  1. (承诺)P 选择随机数 $r$,计算 $A = r \cdot G$,发送 A
  2. (挑战)V 发送随机数 $e$
  3. (响应)P 计算 $z=r + e \cdot w$,发送 $z$
  4. (验证)V 校验 $z \cdot G == A + e \cdot Q$

非交互式 A 版:发送承诺和响应(数据量较大)。挑战的计算:$e=hash(Q,A)$,要求哈希函数是抗碰撞的

非交互式 B 版:发送挑战和响应(数据量较小)。由验证方重新自己重新计算承诺 $A=z \cdot G - e \cdot Q$,然后哈希校验 $e == hash(Q, A)$

知道 2 个秘密 $s, l$

椭圆曲线生成元为 $G$ ,群的阶为 $| F_r |$ ;标量域为 $F_r$ ,基域为 $F_q$

用户秘密为 $s, l, \rho$,与公开输入为 $G, V, R$,满足离散对数关系 $V = s \cdot R + l \cdot G$

  1. (承诺)P 选择随机数 $a, b \in F_r$,计算 $H = a \cdot G + b \cdot G$,发送 A
  2. (挑战)V 发送随机数 $c = Hash(G, V, R, H)$ mod $F_r$
  3. (响应)P 计算 $t=a + c \cdot s$ mod $|F_r|$,$u = b + c \cdot l$ mod $|F_r|$,发送 $(H, t, u)$
  4. (验证)V 计算 $c$,校验 $t \cdot R + u \cdot G == H + c \cdot V$

    推导:$t \cdot R + u \cdot G =(a + c \cdot s) \cdot R + (b + c \cdot l) \cdot G = H + c \cdot V$

证明两个值相等

确保:支付方都减少额 == 接收方的增加额

背景

素数群 $G$ 的阶为 $q$,生成元为 $g$

Alice/Bob/Carol 私钥和公钥分别为

Alice:$(\alpha_1, g_1), g_1=g^{\alpha_1}$

Bob:$(\alpha_2, g_2), g_2=g^{\alpha_2}$

Carol:$(\alpha_3, g_3), g_3=g^{\alpha_3}$

余额初始状态:

  • Alice 余额为 $m_0$,选择随机数 $r_0 \in Z_q$,可得到密文 $[C_0, D_0]$,其中 $C_0=g^{r_0}, \space D_0=g^{m_0} \cdot g_1^{r_0}$
  • Bob 余额为 $m_0'$,选择随机数 $r_0' \in Z_q$,可得到密文 $[C_0', D_0']$,其中 $C_0'=g^{r_0'}, \space D_0'=g^{m_0'} \cdot g_2^{r_0'}$
  • Carol 余额为 0

Alice 支付给 Carol 金额数量为 $m_1$,选择随机数 $r_1,r_1' \in Z_q$,基于 ElGamal 同态加密生成密文 $[C_1, D_1], [C_1', D_1']$

$$ \begin{align} &C_1=g^{r_1}, \space D_1=g^{m_1} \cdot g_3^{r_1} \\ &C_1'=g^{r_1'}, \space D_1'=g^{m_1'} \cdot g_3^{r_1'} \\ \end{align} $$

需要使用零知识证明 $m_1 = m_1'$ 且知道 $r_1,r_1',m_1,m_1'$

Alice 对交易签名,矿工验证签名、零知识和范围证明后

  • 更新 Carol 金额为 $[C_1,D_1]$,Carol 可解密获得金额 $g^{m_1}=D_1/(C_1)^{\alpha_3}$,然后暴力搜索 $m_1$
  • 更新 Alice 金额为 $[C_0/C_1',D_0/D_1']$,Alice 可解密获得金额 $g^{m_0-m_1'}=(D_0/D_1')/(C_0/C_1')^{\alpha_1}$

证明

为了避免暴露 $m_1$ 或 $m_1'$,可选择随机数 $m_1''$ 作为输入

承诺:选择 2 个随机数 $r_1'', r_1''' \in Z_q$ 和随机数 $m_1''$,构造 2 个密文

$$ \begin{align} &C_1''=g^{r_1''}, \space D_1''=g^{m_1''} \cdot g_3^{r_1''} \\ &C_1'''=g^{r_1'''}, \space D_1'''=g^{m_1''} \cdot g_3^{r_1'''} \\ \end{align} $$

挑战:计算哈希值 $e=hash(g_1, g_3, C_1, D_1, C_1', D_1', C_1'', D_1'',C_1''', D_1''')$

响应:计算 $z_1=r_1'' + e \cdot r_1, \space z_2=r_1'''+e \cdot r_1', \space \hat{m}=m_1'' + e \cdot m_1$

发送数据:$Proof(C_1'', D_1'', C_1''', D_1''', z_1, z_2, \hat{m})$

验证:计算哈希值 $e=hash(g_1, g_3, C_1, D_1, C_1', D_1', C_1'', D_1'',C_1''', D_1''')$,校验以下 4 个等式

$$ \begin{align} C_1^e \cdot C_1'' = g^{z_1}, \space D_1^e \cdot D_1'' = g^{\hat{m}} \cdot g_3^{z_1} \\ C_1'^e \cdot C_1''' = g^{z_2}, \space D_1'^e \cdot D_1''' = g^{\hat{m}} \cdot g_1^{z_2} \\ \end{align} $$

推导

$$ \begin{align} &C_1^e \cdot C_1'' = g^{er_1} \cdot g^{r_1''}= g^{z_1}\\ &D_1^e \cdot D_1'' = g^{em_1} \cdot g_3^{er_1} \cdot g^{m_1''} \cdot g_3^{r_1''} = g^{em_1+m_1''} \cdot g_3^{er_1+r_1''} = g^{\hat{m}} \cdot g_3^{z_1} \\ & C_1'^e \cdot C_1''' = g^{er_1'} \cdot g^{r_1'''}=g^{z_2} \\ &D_1'^e \cdot D_1''' = g^{em_1'} \cdot g_3^{er_1'} \cdot g^{m_1''} \cdot g_3^{r_1'''} = g^{em_1'+m_1''} \cdot g_3^{er_1'+r_1'''} = g^{\hat{m}} \cdot g_3^{z_2} \\ \end{align} $$

两个验证中,$\hat{m}$ 对应 $m_1$ 和 $m_1'$,响应中的 $\hat{m}$ 也对应 $m_1$ 和 $m_1'$,因此 $m_1=m_1'$

zk-Schnorr

A 版

zk-Schnorr 证明知道 ECC 私钥

椭圆曲线生成元为 $G$ ,群的阶为 $| F_r |$ ;标量域为 $F_r$ ,基域为 $F_q$

证明方的私钥为 $sk$ ,公钥为 $PK$ ,满足离散对数关系 $PK = sk \cdot G$

  1. (承诺)选择随机数 $r \in F_r$ ,计算 $R = r \cdot G$
  2. (挑战)计算随机数 $c = hash ( PK , R )$ mod $| F_r |$
  3. (响应)计算 $z = r + c \cdot sk$ mod $| F_r |$ ,发送 $( R , z ) $
  4. (验证)计算随机数 $ c = hash ( PK , R )$ mod $| F_r |$ ,校验 $z \cdot G = R + c \cdot PK $
    公式推导:$z \cdot G = ( r + c \cdot sk ) \cdot G = R + c \cdot PK$

B 版

  1. (承诺)选择随机数 $r \in F_r$ ,计算 $R = r \cdot G$
  2. (挑战)计算随机数 $c = hash ( PK , R )$ mod $| F_r |$
  3. (响应)计算 $z = r + c \cdot sk$ mod $| F_r |$ ,发送 $( c , z ) $
  4. (验证)计算 $R = z \cdot G - c \cdot PK$,校验 $c == hash(PK, R)$ mod $|F_r|$

参考

基础密码学系列课程4: 承诺、零知识证明、BulletProof范围证明、Diffie-Hellman密钥协商)-p1

密码学系列课程5: Li17 两方签名与密钥刷新协议-p1

密码学系列课程6 GG18门限签名-p1