Efficient Zero-Knowledge Argument for Correctness of a Shuffle學習筆記(1)

Stephanie Bayer和Jens Groth 2012年論文《Efficient Zero-Knowledge Argument for Correctness of a Shuffle》。
該論文中主要針對e-voting mix-net構建中用到的shuffle homomorphic encryption場景,提出了an honest verifier zero-knowledge argument for the correctness of a shuffle of homomorphic encryptions 算法,該算法在prove和verify the correctness of a shuffle of 100,000 ElGamal ciphertexts用時均在2分鐘左右。

1. 背景知識

  • 本論文的argument具有sublinear communication complexity,當shuffle N(=m×n)N(=m\times n) ciphertexts時,需要傳送O(m+n)O(m+n) group elements 且若m=nm=n則最小的communication complexity 爲 O(N)O(\sqrt{N})
  • prover的computational complexity爲O(Nlogm)O(N\log{m}) exponentiations for constant round arguments或者 若允許logarithmic number of rounds的話, prover的computational complexity可爲O(N)O(N) exponentiations。
  • verifier的計算比較輕量。
  • 構建full shuffle argument的基礎爲:Neff’s approach [Nef01] is based on the invariance of polynomials under permutation of the roots,即Nef01的shuffle算法基於的是:多項式的根permutation的話,其最終形成的多項式是不變的——f(x)=(xr1)(xr2)...(xrn)f(x)=(x-r_1)(x-r_2)...(x-r_n)
  • 引入了multi-exponentiation argument,用於hide committed values。
  • 基於hidden committed values的shuffle argument。與[Gro09]類似,做了些微改進。
  • 主要是利用了EIGamal encryption的乘法同態性和Pedersen commitment的加法同態性。所以需要構建相應的common reference string σ=(pk,ck)\sigma =(pk,ck)pkpk爲EIGamal encryption的public keys,ckck爲Pedersen commitment的commitment key,兩者可以基於不同的group實現,但是要求具有相同的prime order qq

其中EIGamal的知識詳見:博客 EIGamal encryption VS Pairing encryption

  1. EIGamal具有乘法同態性:
    在這裏插入圖片描述
  2. Pedersen commitment具有加法同態性:
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

2. Shuffle argument

需要an argument of knowledge of permutation πN\pi\in \sum_{N} and randomness {ρi}i=1N\{\rho_i\}_{i=1}^N such that for given ciphertexts {Ci}i=1N\{C_i\}_{i=1}^N, {Ci}i=1N\{C_i^{'}\}_{i=1}^N we have Ci=Cπ(i)εpk(1;ρi)C_i^{'}=C_{\pi(i)} \varepsilon_{pk}(1;\rho_i)
Shuffle argument由multi-exponentiation argument和product argument組成:

  • multi-exponentiation argument:用於證明the product of a set of ciphertexts raised to a set of committed exponents yields a particular ciphertext。
  • product argument:用於證明a set of committed values has a particular product。

主要的實現步驟爲:

  1. Prover對permutation進行commit,即commit to π(1),,π(N)\pi(1),…,\pi(N)。【第一組commitment】
  2. Verifier給Prover challenge xx
  3. Prover commit to xπ(1),,xπ(N)x^{\pi(1)},…,x^{\pi(N)}。【第二組commitment】
  4. Prover提供argument,證明其知道相應的openings of the commitments to permutations of respectively 1,,N1,…,Nx1,,xNx^1,…,x^N,同時證明這兩組commitment採用的是相同的permutation。【即第二組commitment是對x1,,xNx^1,…,x^N permuted in an order that was fixed before the prover saw xx】。
  • 4.1 爲了證明兩組commitment採用的是相同的permutation,Verifier給Prover random challenges yyzz
  • 4.2 Prover commit to 一系列 d1z=yπ(1)+xπ(1)z,,dNz=yπ(N)+xπ(N)zd_1-z=y\pi(1)+x^{\pi(1)}-z,…,d_N-z=y\pi(N)+x^{\pi(N)}-z。使用product argument,即可證明i=1N(diz)=i=1N(yi+xiz)\prod_{i=1}^{N}(d_i-z)= \prod_{i=1}^{N}(yi+x^i-z)等式成立。【想象其爲zz的N階多項式,did_i是對其root根yi+xiyi+x^i的permute,基於Schwartz-Zippel lemma可知,針對特定的zz值Prover僞造找到相應did_i值使該等式成立的概率不高於Nq1\frac{N}{q-1},可忽略。同理,針對yy值,Prover僞造兩組commitment使等式成立的概率也可忽略。】
  1. Prover使用multi-exponentiation argument來證明存在ρ\rho值,使得$i=1NCixi=εpk(1;ρ)i=1N(Ci)xπ(i)\prod_{i=1}^{N}C_i^{x^i}=\varepsilon_{pk}(1;\rho)\prod_{i=1}^{N}(C_i^’)^{x^{\pi(i)}}等式成立。即可實現基於密文CiCiC_i,C_i^’的shuffle證明,而Verifier不知道具體的permutation規則。
    在這裏插入圖片描述

詳細的shuffle argument算法流程爲:
在這裏插入圖片描述

3. Multi-exponentiation Argument

將第二節shuffle argument算法流程中的a,b\vec{a},\vec{b}向量表示爲N=n*m矩陣。
其中的multi-exponentiation argument可表示爲:
在這裏插入圖片描述
簡化描述,假設ρ=0\rho=0,public info: C1,...,Cm,C\vec{C_1},...,\vec{C_m},C,witness: a1,...,am\vec{a_1},...,\vec{a_m},需要證明:C=i=1mCiaiC=\prod_{i=1}^{m}\vec{C_i}^{\vec{a_i}}
基本流程爲:

  1. Prover依次對 a1,...,am\vec{a_1},...,\vec{a_m}進行commit,將相應的cA=(comck(a1;r1),...,comck(am;rm))\vec{c_A}=(com_{ck}(\vec{a_1};r_1),...,com_{ck}(\vec{a_m};r_m))發送給verfier
  2. Prover計算Ek=1i,jm;j=(km)+iCiajE_k=\prod_{1\leq i,j\leq m;j=(k-m)+i}\vec{C_i}^{\vec{a_j}},將相應的E1,E2,...,E2m1E_1,E_2,...,E_{2m-1}發送給Verifier【其中Em=CE_m=C】。
  3. Verifier給Prover challenge xx
  4. Prover計算a=j=1mxjaj\vec{a}=\sum_{j=1}^{m}x^j\vec{a_j},將相應的向量a\vec{a}發送給verifier。
  5. Verifier驗證Cxmk=1;km2m1Ekxk=i=1mCi(xmia)C^{x^m}\prod_{k=1;k\neq m}^{2m-1}E_k^{x^k}=\prod_{i=1}^{m}\vec{C_i}^{(x^{m-i}\vec{a})}成立,則可證明C=i=1mCiaiC=\prod_{i=1}^{m}\vec{C_i}^{\vec{a_i}}成立。相應的理論依據爲:i=12m1Ekxk=i=1mCi(xmij=1mxjaj)=i=1mCi(xmia)=Cxmk=1;km2m1Ekxk=Cxmk=1;km2m11i,jm;j=(km)+iCiajxk=Cxmi=1mCi1jm;k=mi+j;kmajxk\prod_{i=1}^{2m-1}E_k^{x^k}=\prod_{i=1}^{m}\vec{C_i}^{(x^{m-i}\sum_{j=1}^{m}x^j\vec{a_j})}=\prod_{i=1}^{m}\vec{C_i}^{(x^{m-i}\vec{a})}=C^{x^m}\prod_{k=1;k\neq m}^{2m-1}E_k^{x^k}=C^{x^m}\prod_{k=1;k\neq m}^{2m-1}{\prod_{1\leq i,j\leq m;j=(k-m)+i}\vec{C_i}^{\vec{a_j}x^k}}=C^{x^m}\prod_{i=1}^{m}{\vec{C_i}}^{\sum_{1\leq j\leq m;k=m-i+j;k\neq m}\vec{a_j}x^k},於是有:Cxm=i=1mCi(xmij=1mxjaj1jm;k=mi+j;kmajxk)=i=1mCiaixm=(i=1mCiai)xmC^{x^m}=\prod_{i=1}^{m}{\vec{C_i}}^{(x^{m-i}\sum_{j=1}^{m}x^j\vec{a_j}-\sum_{1\leq j\leq m;k=m-i+j;k\neq m}\vec{a_j}x^k)}=\prod_{i=1}^{m}{\vec{C_i}}^{\vec{a_i}x^m}=(\prod_{i=1}^{m}{\vec{C_i}}^{\vec{a_i}})^{x^m},從而有:C=i=1mCiaiC=\prod_{i=1}^{m}\vec{C_i}^{\vec{a_i}}成立。【注意,原論文有的公式有點typo。】

以上流程,可能存在witness泄露的來源點有:
1)爲了防止在rewind 第3和第4步時,Verifier用不同的challenge xx從Prover那獲取不同的a=j=1mxjaj\vec{a}=\sum_{j=1}^{m}x^j\vec{a_j},從而造成witness a1,...,am\vec{a_1},...,\vec{a_m}的泄露,因此需要引入random vector a0Zqn\vec{a_0}\leftarrow \mathbb{Z}_q^n,Prover先commit to a0\vec{a_0},然後收到challeng xx後,直接reveal a=a0+j=1mxjaj\vec{a}=\vec{a_0}+\sum_{j=1}^{m}x^j\vec{a_j},從而能保證witness不被泄露。
2)在第2步給Verifier傳輸的Ek=1i,jm;j=(km)+iCiajE_k=\prod_{1\leq i,j\leq m;j=(k-m)+i}\vec{C_i}^{\vec{a_j}}值,可能也會造成witness a1,...,am\vec{a_1},...,\vec{a_m}的泄露。可在此基礎上乘以randomn ciphertext εpk(Gbk;τk)\varepsilon_{pk}(G^{b_k};\tau_k)【相應地,Prover需在收到challeng xx前,對bkb_k進行commit cBk=comck(bk;sk)c_{B_k}=com_{ck}(b_k;s_k)】,爲了仍然保證Em=CE_m=C成立,則要求bm=0,sm=0b_m=0,s_m=0
若考慮ρ0\rho\neq0的正常情況,爲了仍然保證Em=CE_m=C成立,相應的要求τm=ρ\tau_m=\rho
(    a0    a1   am1    am)(C1C2Cm)(C1a0C1a1C1am1C1amC2a0C2a1C2am1C2amCma0Cma1Cmam1Cmam)εpk(Gb2m1;τ2m1)E2m1εpk(Gbm+1;τm+1)Em+1εpk(1;ρ)Emεpk(Gb0;τ0)E0εpk(Gb1;τ1)E1εpk(Gbm1;τm1)Em1\begin{matrix} & \begin{pmatrix} \ \ \ \ \vec{a_0}&\ \ \ \ \vec{a_1} & \cdots &\ \ \ \vec{a_{m-1}} &\ \ \ \ \vec{a_m} \end{pmatrix} & \\ \begin{pmatrix} \vec{C_1}\\ \vec{C_2}\\ \vdots\\ \vec{C_m} \end{pmatrix} & \begin{pmatrix} \vec{C_1}^{\vec{a_0}}& \vec{C_1}^{\vec{a_1}} & \ddots & \vec{C_1}^{\vec{a_{m-1}}} & \vec{C_1}^{\vec{a_m}}\\ \vec{C_2}^{\vec{a_0}} & \vec{C_2}^{\vec{a_1}} & \ddots & \vec{C_2}^{\vec{a_{m-1}}} & \vec{C_2}^{\vec{a_m}}\\ \ddots & \ddots & \ddots & \ddots & \ddots\\ \vec{C_m}^{\vec{a_0}} & \vec{C_m}^{\vec{a_1}} & \ddots & \vec{C_m}^{\vec{a_{m-1}}} & \vec{C_m}^{\vec{a_m}} \end{pmatrix} & \begin{matrix} \\ \varepsilon_{pk}(G^{b_{2m-1}};\tau_{2m-1})E_{2m-1}\\ \vdots\\ \varepsilon_{pk}(G^{b_{m+1}};\tau_{m+1})E_{m+1}\\ \varepsilon_{pk}(1;\rho)E_m \end{matrix} \\ & \begin{matrix} \varepsilon_{pk}(G^{b_0};\tau_0)E_0& \varepsilon_{pk}(G^{b_1};\tau_1)E_1 & \cdots & \varepsilon_{pk}(G^{b_{m-1}};\tau_{m-1})E_{m-1} \end{matrix}& \end{matrix}
詳細算法如下圖所示:
在這裏插入圖片描述

3.1 Prover的計算壓力

在上述Multi-exponentiation Argument中,Prover需要計算E0,,E2m1E_0,\cdots,E_{2m-1},即對於k=1,,2m1k=1,\cdots,2m-1,有:
Ek=1i,jm;j=(km)+iCiaj=i=1,j=1;j=(km)+im,mCiajE_k=\prod_{1\leq i,j\leq m;j=(k-m)+i}\vec{C_i}^{\vec{a_j}}=\prod_{i=1,j=1;j=(k-m)+i}^{m,m}\vec{C_i}^{\vec{a_j}}
對應的計算量有:
1)需有m2m^2Ciaj\vec{C_i}^{\vec{a_j}}次product運算;
2)Ciaj=l=1nCilail\vec{C_i}^{\vec{a_j}}=\prod_{l=1}^{n}C_{il}^{a_{il}}nn次exponentiation運算in H\mathbb{H}
從而EkE_kmn2mn^2次exponentiation運算in H\mathbb{H}

mm較大時,Prover的計算壓力很大,可通過多項式插值(FFT)或Toom-Cook或增加Verifier與Prover交互次數等方式來優化:

  • FFT:
    在這裏插入圖片描述
    在這裏插入圖片描述
  • Toom-Cook:
    在這裏插入圖片描述
  • 增加Verifier與Prover交互次數:基本思路爲:m×mm\times m矩陣內元素真正有效的僅爲對角線上的元素,不需要計算所有m2m^2個元素,轉爲將m×mm\times m矩陣切分爲小的block矩陣μ×μ\mu \times \mu(其中m=μmm=\mu m'),只需要關注對角線上的block,並使用遞歸證明對角線block上的內容即可。
    (C1a1C1am1C1amC2a1C2am1C2amCma1Cmam1Cmam)\begin{pmatrix} \vec{C_1}^{\vec{a_1}} & \ddots & \vec{C_1}^{\vec{a_{m-1}}} & \vec{C_1}^{\vec{a_m}}\\ \vec{C_2}^{\vec{a_1}} & \ddots & \vec{C_2}^{\vec{a_{m-1}}} & \vec{C_2}^{\vec{a_m}}\\ \ddots & \ddots & \ddots & \ddots\\ \vec{C_m}^{\vec{a_1}} & \ddots & \vec{C_m}^{\vec{a_{m-1}}} & \vec{C_m}^{\vec{a_m}} \end{pmatrix}
    在這裏插入圖片描述
    在這裏插入圖片描述

3.2 Prover的計算優化實現

針對3.1中的計算壓力,在https://github.com/3for/verifiable-shuffle中分別做了相應的優化實現:

# This parameter determine which version of the program is executed.
# 0 stands for no optimization inside of the code
# 1 uses multi-exponentiation techniques
# 2 uses multi-exponentiation techniques and FFT to find values E_i
# 3 uses multi-exponentiation techniques, extra interaction and Toom-Cook 4 to find values E_i, in this case m =16 or 64\n
3

參考資料:
[1] 2012年論文《Efficient Zero-Knowledge Argument for Correctness of a Shuffle
[2] PPT 《Efficient Zero-Knowledge Argument for Correctness of a Shuffle
[3] 博客 向量的Hadamard product VS Inner product
[4] 博客 EIGamal encryption VS Pairing encryption

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章