Stephanie Bayer和Jens Groth 2012年论文《Efficient Zero-Knowledge Argument for Correctness of a Shuffle》中提出了shuffle argument算法,该算法主要由Multi-exponentiation Argument和product argument两部分组成。
在博客 Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(1)中介绍了Shuffle argument总体算法以及Multi-exponentiation Argument算法,在本博客中,将重点介绍product argument算法。

1. 背景知识

Witness 向量A={aij}i,j=1n,mA=\{a_{ij}\}_{i,j=1}^{n,m},以矩阵方式表示:
A=(a11a12a1ma21a22a2man1an2anm)=(a1,a2,,am)A=\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1m} \\ a_{21} & a_{22} & \cdots & a_{2m} \\ \cdots & \cdots & \cdots & \cdots \\ a_{n1} & a_{n2} & \cdots & a_{nm} \end{pmatrix}=(\vec{a}_1,\vec{a}_2,\cdots,\vec{a}_m)

Public info for both Prover AND Verifier,对AA的每行向量ai\vec{a_i}分别进行commit:
cA=comck(A;r)=(comck(a1;r1),,comck(am;rm))\vec{c}_A=com_{ck}(A;\vec{r})=(com_{ck}(\vec{a}_1;r_1),\cdots,com_{ck}(\vec{a}_m;r_m))
需证明b=i=1nj=1maij=i=1n(j=1maij)b=\prod_{i=1}^{n}\prod_{j=1}^{m}a_{ij}=\prod_{i=1}^{n}(\prod_{j=1}^{m}a_{ij})

思路如下:
构建新的向量b=(j=1ma1j,,j=1manj)=(b1,,bn)\vec{b}=(\prod_{j=1}^{m}a_{1j},\cdots,\prod_{j=1}^{m}a_{nj})=(b_1,\cdots,b_n),对该向量进行commit:cb=comck(b1,,bn;s)c_b=com_{ck}(b_1,\cdots,b_n;s)。从而将证明b=i=1nj=1maij=i=1n(j=1maij)b=\prod_{i=1}^{n}\prod_{j=1}^{m}a_{ij}=\prod_{i=1}^{n}(\prod_{j=1}^{m}a_{ij})拆分为了两组证明:
1)证明Prover知道相应的witness a11,,anma_{11},\cdots,a_{nm},使得cb=comck(b1,,bn;s)=comck(j=1ma1j,,j=1manj;s)c_b=com_{ck}(b_1,\cdots,b_n;s)=com_{ck}(\prod_{j=1}^{m}a_{1j},\cdots,\prod_{j=1}^{m}a_{nj};s)成立。【使用后续要介绍的Hadamard product argument及zero argument实现】
2)当cb=comck(b1,,bn;s)c_b=com_{ck}(b_1,\cdots,b_n;s),证明b=i=1nbib=\prod_{i=1}^{n}b_i成立。【使用后续要介绍的Single value product argument实现】

2. Hadamard product argument

证明Prover知道相应的witness a11,,anma_{11},\cdots,a_{nm},使得cb=comck(b1,,bn;s)=comck(j=1ma1j,,j=1manj;s)c_b=com_{ck}(b_1,\cdots,b_n;s)=com_{ck}(\prod_{j=1}^{m}a_{1j},\cdots,\prod_{j=1}^{m}a_{nj};s)成立。
可进一步转换为:
(1)Witness:
a11,,anma_{11},\cdots,a_{nm}以及b1,,bnb_1,\cdots,b_n

(2)Public info for both Prover AND Verifier:

  • AA的每行向量ai\vec{a_i}分别进行commit:
    cA=comck(A;r)=(comck(a1;r1),,comck(am;rm))\vec{c}_A=com_{ck}(A;\vec{r})=(com_{ck}(\vec{a}_1;r_1),\cdots,com_{ck}(\vec{a}_m;r_m))
  • cb=comck(b;s)=comck(b1,,bn;s)c_b=com_{ck}(\vec{b};s)=com_{ck}(b_1,\cdots,b_n;s)

(3)待证明:
bi=j=1maijb_i=\prod_{j=1}^{m}a_{ij}b=(b1,,bn)=i=1mai\vec{b}=(b_1,\cdots,b_n)=\prod_{i=1}^{m}\vec{a}_i,其中i=1m\prod_{i=1}^{m}代表的即为entry-wise multiplication,即对应为Hadamard product证明。

思路如下:

  • Prover构建新的矩阵B=(b1,,bm)B=(\vec{b}_1,\cdots,\vec{b}_m),其中b1=a1,b2=i=12ai,,bm1=i=1m1ai,bm=i=1mai\vec{b}_1=\vec{a}_1,\vec{b}_2=\prod_{i=1}^{2}\vec{a}_i,\cdots,\vec{b}_{m-1}=\prod_{i=1}^{m-1}\vec{a}_i,\vec{b}_m=\prod_{i=1}^{m}\vec{a}_i
    Prover对矩阵BB的每一列进行commit:
    cB=comck(B;s)=(comck(b1;s1),,comck(bm;sm))=(cB1,,cBm)\vec{c}_B=com_{ck}(B;\vec{s})=(com_{ck}(\vec{b}_1;s_1),\cdots,com_{ck}(\vec{b}_m;s_m))=(c_{B_1},\cdots,c_{B_m})
    同时要求cB1=cA1c_{B_1}=c_{A_1}cb=cBmc_b=c_{B_m},使得b1=a1\vec{b}_1=\vec{a}_1bm=b\vec{b}_m=\vec{b}成立。
    这样Prover的证明内容就改为证明:for each i=1,,m1i=1,\cdots,m-1bi+1=ai+1bi\vec{b}_{i+1}=\vec{a}_{i+1}\vec{b}_i成立,因为有b1=a1\vec{b}_1=\vec{a}_1bm=b\vec{b}_m=\vec{b},从而可证明b=i=1mai\vec{b}=\prod_{i=1}^{m}\vec{a}_i成立。

  • Verifier->Prover: challenge xx

  • 改为证明:bi+1=ai+1bii=1m1xibi+1=i=1m1ai+1(xibi)\vec{b}_{i+1}=\vec{a}_{i+1}\vec{b}_i\Rightarrow \sum_{i=1}^{m-1}x^i\vec{b}_{i+1}=\sum_{i=1}^{m-1}\vec{a}_{i+1}(x^i\vec{b}_i)
    收到challenge xx后,Prover构建新的矩阵D=(d1,d2,,dm1,d)=(xb1,x2b2,,xm1bm1,i=1m1xibi+1)D=(\vec{d}_1,\vec{d}_2,\cdots,\vec{d}_{m-1},\vec{d})=(x\vec{b}_1,x^2\vec{b}_2,\cdots,x^{m-1}\vec{b}_{m-1},\sum_{i=1}^{m-1}x^i\vec{b}_{i+1}),其中d=i=1m1xibi+1\vec{d}=\sum_{i=1}^{m-1}x^i\vec{b}_{i+1}
    Prover对矩阵D的每列进行commit,可根据矩阵BB commit的同态属性获得:
    for i=1,,m1i=1,\cdots,m-1,有cDi=cBixic_{D_i}=c_{B_i}^{x^i}cD=i=1m1xibi+1c_D=\prod_{i=1}^{m-1}x^i\vec{b}_{i+1}

  • 使用如上committed值,改为证明d=i=1m1xibi+1=i=1m1ai+1(xibi)=i=1m1ai+1di\vec{d}=\sum_{i=1}^{m-1}x^i\vec{b}_{i+1}=\sum_{i=1}^{m-1}\vec{a}_{i+1}(x^i\vec{b}_i)=\sum_{i=1}^{m-1}\vec{a}_{i+1}\vec{d}_i成立。

  • Verifier->Prover: challenge yy

  • 改为证明:d=i=1m1ai+1di0=i=1m1ai+1di1d\vec{d}=\sum_{i=1}^{m-1}\vec{a}_{i+1}\vec{d}_i\Rightarrow 0=\sum_{i=1}^{m-1}\vec{a}_{i+1}*\vec{d}_i-\vec{1}*\vec{d}【此时需要使用后续将介绍的zero argument来证明】,其中*操作符代表的是bilinear map:
    Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(2)
    总的算法思路如下:
    Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(2)

3. zero argument

Witness: a1,b0,,am,bm1\vec{a}_1,\vec{b}_0,\cdots,\vec{a}_m,\vec{b}_{m-1}
Public info: commitment to \vec{a}_1,\vec{b}_0,\cdots,\vec{a}m,\vec{b}{m-1}$。
证明:0=i=1maibi10=\sum_{i=1}^{m}\vec{a}_i*\vec{b}_{i-1}

  • Prover: 随机选择a0,bmZqn\vec{a}_0,\vec{b}_m\leftarrow \mathbb{Z}_q^n,commitment to a0\vec{a}_0bm\vec{b}_m

(        a0            a1           am1        am)(b0b1bm1bm)(a0b0a1b0am1b0amb0a0b1a1b1am1b1amb1a0bm1a1bm1am1bm1ambm1a0bma1bmam1bmambm)d2md2m1dm+1dm        d0            d1           dm1        dm\begin{matrix} & \begin{pmatrix} \ \ \ \ \ \ \ \ \vec{a}_0& \ \ \ \ \ \ \ \ \ \ \ \ \vec{a}_1 & \cdots &\ \ \ \ \ \ \ \ \ \ \ \vec{a} _{m-1}&\ \ \ \ \ \ \ \ \vec{a}_m \end{pmatrix} & \\ \begin{pmatrix} \vec{b_0}\\ \vec{b_1}\\ \vdots\\ \vec{b}_{m-1}\\ \vec{b}_m \end{pmatrix} & \begin{pmatrix} \vec{a}_0*{\vec{b}_0}& \vec{a}_1*{\vec{b}_0} & \ddots & \vec{a}_{m-1}*{\vec{b}_0} & \vec{a}_m*{\vec{b}_0}\\ \vec{a}_0*{\vec{b}_1}& \vec{a}_1*{\vec{b}_1} & \ddots & \vec{a}_{m-1}*{\vec{b}_1} & \vec{a}_m*{\vec{b}_1}\\ \ddots & \ddots & \ddots & \ddots & \ddots\\ \vec{a}_0*{\vec{b}_{m-1}}& \vec{a}_1*{\vec{b}_{m-1}} & \ddots & \vec{a}_{m-1}*{\vec{b}_{m-1}} & \vec{a}_m*{\vec{b}_{m-1}}\\ \vec{a}_0*{\vec{b}_m}& \vec{a}_1*{\vec{b}_m} & \ddots & \vec{a}_{m-1}*{\vec{b}_m} & \vec{a}_m*{\vec{b}_m} \end{pmatrix} & \begin{matrix} \\ d_{2m}\\ d_{2m-1}\\ \vdots\\ d_{m+1}\\ d_m \end{matrix} \\ & \begin{matrix} \ \ \ \ \ \ \ \ d_0 &\ \ \ \ \ \ \ \ \ \ \ \ d_1 & \cdots & \ \ \ \ \ \ \ \ \ \ \ d_{m-1} & \ \ \ \ \ \ \ \ d_m \end{matrix}& \end{matrix}

有:for k=0,,2mk=0,\cdots,2mdk=0i,jm;j=(mk)+iaibjd_k=\sum_{0\leq i,j\leq m; j=(m-k)+i}{\vec{a}_i*\vec{b}_j},从而转为证明dm+1=i=1maibi1=0d_{m+1}=\sum_{i=1}^{m}{\vec{a}_i}*\vec{b}_{i-1}=0

  • Prover:commit to dkd_kcDkc_{D_k},其中cDm+1=comck(0;0)c_{D_{m+1}}=com_{ck}(0;0)从而让verifier可确定dm+1=0d_{m+1}=0

  • Verifier给Prover:challenge xx

因为:k=02mdkxk=(i=0mxiai)(j=0mxmjbj)\sum_{k=0}^{2m}d_kx^k=(\sum_{i=0}^{m}x^i\vec{a}_i)*(\sum_{j=0}^{m}x^{m-j}\vec{b}_j)

  • Prover:计算 a=i=0mxiai\vec{a}=\sum_{i=0}^{m}x^i\vec{a}_ib=j=0mxmjbj\vec{b}=\sum_{j=0}^{m}x^{m-j}\vec{b}_j,将a\vec{a}b\vec{b}发送给Verifier。

  • Verifier:利用commitment的同态性,只需验证k=02mcDkxk=comck(ab;t)\prod_{k=0}^{2m}c_{D_k}^{x^k}=com_{ck}(\vec{a}*\vec{b};t)成立。由于dm+1=0d_{m+1}=0,则相应地基于xx的多项式其xm+1x^{m+1}系数为0,则可证明0=i=1maibi10=\sum_{i=1}^{m}\vec{a}_i*\vec{b}_{i-1}

整个zero argument算法流程如下:Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(2)

4. Single value product argument

采用的是 J.Groth 2010年论文《A verifiable secret shuffle of homomorphic encryptions》中的算法实现。

相关文章:

  • 2021-12-24
  • 2021-08-28
  • 2021-07-21
  • 2021-04-27
  • 2021-08-04
  • 2022-12-23
  • 2021-12-04
  • 2021-10-04
猜你喜欢
  • 2021-09-05
  • 2021-08-20
  • 2021-08-12
  • 2021-05-09
  • 2021-11-20
  • 2021-09-29
  • 2021-06-10
相关资源
相似解决方案