A Verifiable Secret Shuffle of Homomorphic Encryptions为Jens Groth 2010年论文,提出了多个算法:
满足要求的有Paillier encryption[45]和EIGamal encryption[16]。
commitment应具有hiding和binding属性。满足要求的有Pedersen commitment: c = c o m c k ( m 1 , ⋯ , m n ; r ) = g 1 m 1 ⋯ g n m n h r c=com_{ck}(m_1,\cdots,m_n;r)=g_1^{m_1}\cdots g_n^{m_n}h^r c=comck(m1,⋯,mn;r)=g1m1⋯gnmnhr。
Common input:commit key c k ck ck 和 messages m 1 , ⋯ , m n m_1,\cdots,m_n m1,⋯,mn。
Witness:permutation π \pi π 和 randomizer r r r。
Prover: c = c o m c k ( m π ( 1 ) , ⋯ , m π ( n ) ; r ) c=com_{ck}( m_{\pi(1)},\cdots,m_{\pi(n)};r) c=comck(mπ(1),⋯,mπ(n);r)。
证明: c c c为messages m 1 , ⋯ , m n m_1,\cdots,m_n m1,⋯,mn的 shuffle commitment。
基本原理有:多项式 p ( X ) = ∏ i = 1 n ( m i − X ) p(X)=\prod_{i=1}^{n}(m_i-X) p(X)=∏i=1n(mi−X) is stable under permutation of the roots for any permutation π \pi π,即 p ( X ) = ∏ i = 1 n ( m i − X ) = ∏ i = 1 n ( m π ( i ) − X ) p(X)=\prod_{i=1}^{n}(m_i-X)= \prod_{i=1}^{n}(m_{\pi(i)}-X) p(X)=∏i=1n(mi−X)=∏i=1n(mπ(i)−X)
转为证明:witness μ 1 , ⋯ , μ n , r \mu_1,\cdots,\mu_n,r μ1,⋯,μn,r使得 c = c o m c k ( μ 1 , ⋯ , μ n ; r ) c=com_{ck}(\mu_1,\cdots,\mu_n;r) c=comck(μ1,⋯,μn;r), ∏ i = 1 n ( m i − X ) = ∏ i = 1 n ( μ i − X ) \prod_{i=1}^{n}(m_i-X)= \prod_{i=1}^{n}(\mu_i-X) ∏i=1n(mi−X)=∏i=1n(μi−X)成立,由于working over a field Z q \mathbb{Z}_q Zq,等式成立意味着存在permutation π \pi π,使得 μ i = m π ( i ) \mu_i=m_{\pi(i)} μi=mπ(i)。
Verifier给Prover:random challenge x ∈ Z q x\in\mathbb{Z}_q x∈Zq。
转为证明: ∏ i = 1 n ( m i − x ) = ∏ i = 1 n ( μ i − x ) \prod_{i=1}^{n}(m_i-x)= \prod_{i=1}^{n}(\mu_i-x) ∏i=1n(mi−x)=∏i=1n(μi−x)
整体思路为:
1)证明knowledge of opening μ 1 , ⋯ , μ n , r \mu_1,\cdots,\mu_n,r μ1,⋯,μn,r of c c c。借助sigma-protocol思路:
2)Verifier收到 f 1 , ⋯ , f n f_1,\cdots,f_n f1,⋯,fn后,构建 f i − e x = e ( μ i − x ) + d i f_i-ex=e(\mu_i-x)+d_i fi−ex=e(μi−x)+di,有 ∏ i = 1 n ( f i − e x ) = e n ∏ i = 1 n ( μ i − x ) + p n − 1 ( e ) \prod_{i=1}^{n}(f_i-ex)=e^n\prod_{i=1}^{n}(\mu_i-x)+p_{n-1}(e) ∏i=1n(fi−ex)=en∏i=1n(μi−x)+pn−1(e),其中 p n − 1 ( ⋅ ) p_{n-1}(\cdot) pn−1(⋅)为 n − 1 n-1 n−1阶多项式。
转为证明 ∏ i = 1 n ( f i − e x ) = e n ∏ i = 1 n ( μ i − x ) + p n − 1 ( e ) = e n ∏ i = 1 n ( m i − x ) + p n − 1 ( e ) \prod_{i=1}^{n}(f_i-ex)=e^n\prod_{i=1}^{n}(\mu_i-x)+p_{n-1}(e)=e^n\prod_{i=1}^{n}(m_i-x)+p_{n-1}(e) ∏i=1n(fi−ex)=en∏i=1n(μi−x)+pn−1(e)=en∏i=1n(mi−x)+pn−1(e),由于 e e e为随机选择的,即可证明 ∏ i = 1 n ( m i − x ) = ∏ i = 1 n ( μ i − x ) \prod_{i=1}^{n}(m_i-x)= \prod_{i=1}^{n}(\mu_i-x) ∏i=1n(mi−x)=∏i=1n(μi−x)成立。
为了证明 ∏ i = 1 n ( f i − e x ) = e n ∏ i = 1 n ( m i − x ) + p n − 1 ( e ) \prod_{i=1}^{n}(f_i-ex)=e^n\prod_{i=1}^{n}(m_i-x)+p_{n-1}(e) ∏i=1n(fi−ex)=en∏i=1n(mi−x)+pn−1(e),思路如下:
总的shuffle of known contents 明文shuffle证明算法实现为:
与第二节基于明文的shuffle情况不同,用于shuffle的为密文 e 1 , ⋯ , e n e_1,\cdots,e_n e1,⋯,en,而不再是明文了。
Common input:commit key c k ck ck、encrypted messages e 1 , ⋯ , e n e_1,\cdots,e_n e1,⋯,en和shuffle后的密文 E 1 = e π ( 1 ) ε p k ( 1 ; R 1 ) , ⋯ , E 1 = e π ( n ) ε p k ( 1 ; R n ) E_1=e_{\pi(1)}\varepsilon_{pk}(1;R_1),\cdots,E_1=e_{\pi(n)}\varepsilon_{pk}(1;R_n) E1=eπ(1)εpk(1;R1),⋯,E1=eπ(n)εpk(1;Rn)。
Witness:permutation π \pi π 和 randomizers R 1 , ⋯ , R n R_1,\cdots,R_n R1,⋯,Rn。
证明:存在permutation π \pi π 使得the plaintexts of E 1 , ⋯ , E n E_1,\cdots,E_n E1,⋯,En和the plaintexts of e π ( 1 ) , ⋯ , e π ( n ) e_{\pi(1)},\cdots,e_{\pi(n)} eπ(1),⋯,eπ(n)是相同的。
直观的思路是:若Prover可将permutation π \pi π 发送给Verifier,则Verifier可选择任意的随机值 t 1 , ⋯ , t n t_1,\cdots,t_n t1,⋯,tn发送给Prover;Prover发送 ∏ i = 1 n e i t i \prod_{i=1}^{n}e_i^{t_i} ∏i=1neiti;Verifer只需验证 ∏ i = 1 n e i t i = ∏ i = 1 n E i t π ( i ) \prod_{i=1}^{n}e_i^{t_i}=\prod_{i=1}^{n}E_i^{t_{\pi(i)}} ∏i=1neiti=∏i=1nEitπ(i)即可。
但是,若想保持permutation π \pi π 不被泄露给Verifier,相应的实现思路为:
1)Prover: 对permutation π \pi π进行commit: c = c o m c k ( π ( 1 ) , ⋯ , π ( n ) ; r ) c=com_{ck}(\pi(1),\cdots,\pi(n);r) c=comck(π(1),⋯,π(n);r),其实就是对数字 1 , ⋯ , n 1,\cdots,n 1,⋯,n的permutation commit。只需证明 c c c为a commit to a permutation of the numbers 1 , ⋯ , n 1,\cdots,n 1,⋯,n,这样就可以保证the prover is bound to some permutation he knows, but the permutation remains hidden.
2)接下来要证明 f i f_i fi have been formed correctly, using the same permutation π \pi π that used to form c c c。
Witness: π \pi π
Common Input: c = c o m c k ( π ( 1 ) , ⋯ , π ( n ) ; r ) c=com_{ck}(\pi(1),\cdots,\pi(n);r) c=comck(π(1),⋯,π(n);r), ( f 1 , ⋯ , f n ) (f_1,\cdots,f_n) (f1,⋯,fn)【即 ( t π ( 1 ) , ⋯ , t π ( n ) ) (t_{\pi(1)},\cdots,t_{\pi(n)}) (tπ(1),⋯,tπ(n))】以及 ( t 1 , ⋯ , t n ) (t_1,\cdots,t_n) (t1,⋯,tn)
证明: ( f 1 , ⋯ , f n ) (f_1,\cdots,f_n) (f1,⋯,fn)中的permutation π \pi π和commitment c c c中的permutation π \pi π是相同的。
3)上述步骤1)和2)实现了permutation π \pi π的不暴露证明。
最后需证明permutation π \pi π 使得the plaintexts of E 1 , ⋯ , E n E_1,\cdots,E_n E1,⋯,En和the plaintexts of e π ( 1 ) , ⋯ , e π ( n ) e_{\pi(1)},\cdots,e_{\pi(n)} eπ(1),⋯,eπ(n)是相同的,则应满足 ∏ i = 1 n e i t i ∏ i = 1 n E i d i = ∏ i = 1 n E i f i \prod_{i=1}^{n}e_i^{t_i}\prod_{i=1}^{n}E_i^{d_i}=\prod_{i=1}^{n}E_i^{f_i} ∏i=1neiti∏i=1nEidi=∏i=1nEifi。
Prover:在收到challenge t 1 , ⋯ , t n t_1,\cdots,t_n t1,⋯,tn之前,在发送 c d = c o m c k ( − d 1 , ⋯ , − d n ; r d ) c_d=com_{ck}(-d_1,\cdots,-d_n;r_d) cd=comck(−d1,⋯,−dn;rd)的同时,也发送 E d = ∏ i = 1 n E i − d i ε p k ( 1 ; R d ) E_d=\prod_{i=1}^{n} E_i^{-d_i}\varepsilon_{pk}(1;R_d) Ed=∏i=1nEi−diεpk(1;Rd)
Verifier:challenges t 1 , ⋯ , t n t_1,\cdots,t_n t1,⋯,tn。
Prover:发送 Z = ∑ i = 1 n t π ( i ) R i + R d Z=\sum_{i=1}^{n}t_{\pi(i)}R_i+R_d Z=∑i=1ntπ(i)Ri+Rd。
Verifier: 验证 ∏ i = 1 n e i − t i ∏ i = 1 n E i f i E d = ε p k ( 1 ; Z ) \prod_{i=1}^{n}e_i^{-t_i}\prod_{i=1}^{n}E_i^{f_i}E_d=\varepsilon_{pk}(1;Z) ∏i=1nei−ti∏i=1nEifiEd=εpk(1;Z)成立。
针对的场景为:
mix-net中,选民会将其投票信息 m m m进行加密,加密后的投票信息会经多个mix-servers进行shuflle并证明信息未被篡改。最终统计选举结果时,需要对多个mix-servers shuffle后密文信息进行解密,查看明文的投票信息。
直观的做法是mix-servers先做shuffle和相应的证明,验证shuffle没有被篡改后,再依次调用各mix-servers进行threshold decryption,最终解密出明文投票信息。整个过程中,每个mix-server均需被激活两次。
若在shuffle的同时也做threshold decryption,则可将每个mix-server的激活次数降为1次,同时亦能节约计算资源。
以EIGamal encryption为例,假设有 N N N个mix-server服务器,每个服务器 j j j的私钥为 x j x_j xj,对应的公钥为 y j = g x j y_j=g^{x_j} yj=gxj,整个mix-net的public key 为 ( g , y 1 , ⋯ , y N ) (g,y_1,\cdots,y_N) (g,y1,⋯,yN)。假设共有 n n n个选民投票信息 m 1 , ⋯ , m n m_1,\cdots, m_n m1,⋯,mn,对选民的投票信息 m i m_i mi加密为: ( u i , v i ) = ( g r , ( ∏ j = 1 N y j ) r m i ) (u_i,v_i)=(g^r,(\prod_{j=1}^{N}y_j)^rm_i) (ui,vi)=(gr,(∏j=1Nyj)rmi)
通用地,假设有 n n n个选民投票信息 m 1 , ⋯ , m n m_1,\cdots,m_n m1,⋯,mn,则mix-server s s s收到的input ciphertexts of the form ( u 1 , v 1 ) , ⋯ , ( u n , v n ) (u_1,v_1),\cdots,(u_n,v_n) (u1,v1),⋯,(un,vn) under the key ( g , ∏ j = s N y j ) (g,\prod_{j=s}^{N}y_j) (g,∏j=sNyj),通过随机选择permutation π \pi π和randomizers R 1 , ⋯ , R n R_1,\cdots,R_n R1,⋯,Rn,对应的输出为 ( U 1 , V 1 ) , ⋯ , ( U n , V n ) (U_1,V_1),\cdots,(U_n,V_n) (U1,V1),⋯,(Un,Vn) under the key ( g , Y = ∏ j = s + 1 N y j ) (g, Y=\prod_{j=s+1}^{N}y_j) (g,Y=∏j=s+1Nyj),输入与输出有如下对应关系:
U i = g R i u π ( i ) , V i = Y R i v π ( i ) u π ( i ) − x s U_i= g^{R_i}u_{\pi(i)}, V_i= Y^{R_i}v_{\pi(i)}u_{\pi(i)}^{-x_s} Ui=gRiuπ(i),Vi=YRivπ(i)uπ(i)−xs
然后需要为以上shuffle-and-decrypt操作正确性提供零知识证明。
在第三节SHVZK Argument for Shuffle of Homomorphic Encryptions 基于密文(具有同态属性加密的密文)的shuffle证明算法的基础上,增加了argue correctness of the partial decryption的算法——如prove knowledge of the secret key x s x_s xs and argue that it has been used to make partial decryptions。
总体思路为:
1)prove knowledge of the secret key x s x_s xs。借助sigma-protocol思路:
Common input: public key y s = g x s y_s=g^{x_s} ys=gxs。
Prover: 选择随机值 d x d_x dx,发送 D = g d x D=g^{d_x} D=gdx。
Verifier:发送challenge e e e。
Prover:发送 f = e x s + d x f=ex_s+d_x f=exs+dx。
Verifier:验证 g f = y s e D g^f=y_s^eD gf=yseD成立即可。
2)利用第三节算法证明 ( U 1 , ⋯ , U n ) = ( g R 1 u π ( 1 ) , ⋯ , g R 1 u π ( n ) ) (U_1,\cdots,U_n)=(g^{R_1}u_{\pi(1)},\cdots, g^{R_1}u_{\pi(n)}) (U1,⋯,Un)=(gR1uπ(1),⋯,gR1uπ(n)):
∏ i = 1 n U i f i = ∏ i = 1 n ( g R i u π ( i ) ) t π ( i ) + d i = g ∑ i = 1 n ( t π ( i ) R i ) + R d ∗ ( ∏ i = 1 n u i t i ) ∗ ( ∏ i = 1 n U i d i g − R d ) \prod_{i=1}^{n}U_i^{f_i}=\prod_{i=1}^{n}(g^{R_i}u_{\pi(i)})^{t_{\pi(i)}+d_i}=g^{\sum_{i=1}^{n}(t_{\pi(i)}R_i)+R_d}*(\prod_{i=1}^{n}u_i^{t_i})*(\prod_{i=1}^{n}U_i^{d_i}g^{-R_d}) ∏i=1nUifi=∏i=1n(gRiuπ(i))tπ(i)+di=g∑i=1n(tπ(i)Ri)+Rd∗(∏i=1nuiti)∗(∏i=1nUidig−Rd)
3)利用第三节算法证明 ( V 1 , ⋯ , V n ) = ( Y R 1 v π ( 1 ) u π ( 1 ) − x s , ⋯ , Y R n v π ( n ) u π ( n ) − x s ) (V_1,\cdots,V_n)=( Y^{R_1}v_{\pi(1)}u_{\pi(1)}^{-x_s},\cdots, Y^{R_n}v_{\pi(n)}u_{\pi(n)}^{-x_s}) (V1,⋯,Vn)=(YR1vπ(1)uπ(1)−xs,⋯,YRnvπ(n)uπ(n)−xs)以及secret key x s x_s xs has been used to make partial decryptions。【引入 r v r_v rv用于hiding V d V_d Vd,引入 d v d_v dv用于hiding U U U】
∏ i = 1 n V i f i = ∏ i = 1 n V i t π ( i ) + d i = ( ∏ i = 1 n ( Y i R v π ( i ) u π ( i ) − x s ) t π ( i ) ) ∗ ( ∏ i = 1 n V i d i ) = ( Y ∑ i = 1 n t π ( i ) R i + R d ∗ ∏ i = 1 n v i t i ∗ ( ∏ i = 1 n u i − t i ) x s ) ∗ ( ∏ i = 1 n V i d i ∗ Y − R d g − r v ) ∗ g r v \prod_{i=1}^{n}V_i^{f_i}=\prod_{i=1}^{n}V_i^{t_{\pi(i)}+d_i}=(\prod_{i=1}^{n}(Y^R_iv_{\pi(i)}u_{\pi(i)}^{-x_s})^{t_{\pi(i)}})*(\prod_{i=1}^{n}V_i^{d_i})=(Y^{\sum_{i=1}^{n}t_{\pi(i)}R_i+R_d}*\prod_{i=1}^{n}v_i^{t_i}*(\prod_{i=1}^{n}u_i^{-t_i})^{x_s})*(\prod_{i=1}^{n}V_i^{d_i}*Y^{-R_d}g^{-r_v})*g^{r_v} ∏i=1nVifi=∏i=1nVitπ(i)+di=(∏i=1n(YiRvπ(i)uπ(i)−xs)tπ(i))∗(∏i=1nVidi)=(Y∑i=1ntπ(i)Ri+Rd∗∏i=1nviti∗(∏i=1nui−ti)xs)∗(∏i=1nVidi∗Y−Rdg−rv)∗grv
为了同时验证secret key x s x_s xs has been used to make partial decryptions,上述等式左右两侧进行 e e e的幂乘,同时均乘以 g d v ∗ ( ∏ i = 1 n u i − t i ) x d g^{d_v}*(\prod_{i=1}^{n}u_i^{-t_i})^d_x gdv∗(∏i=1nui−ti)xd。最终有:
4)为了证明prover确实知道在上一步中引入的 r v 和 d v r_v和d_v rv和dv【引入 r v r_v rv用于hiding V d V_d Vd,引入 d v d_v dv用于hiding U U U】,仍然接用sigma-protocol有:
Prover: C 1 = c o m c k ( r v ; r 1 ) , C 2 = c o m c k ( d v ; r 2 ) C_1=com_{ck}(r_v;r_1),C_2=com_{ck}(d_v;r_2) C1=comck(rv;r1),C2=comck(dv;r2),发送 C 1 和 C 2 C_1和C_2 C1和C2。
Verifier:Challenge e e e。
Prover:计算 f v = e r v + d v , z v = e r 1 + r 2 f_v=er_v+d_v,z_v=er_1+r_2 fv=erv+dv,zv=er1+r2,发送 f v 和 z v f_v和z_v fv和zv。
Verifier:验证 C 1 e C 2 = c o m c k ( f v ; z v ) C_1^eC_2=com_{ck}(f_v;z_v) C1eC2=comck(fv;zv)成立即可。
可从以下维度进行优化: