Pailliar同态加密算法描述与证明
Pailliar加密算法1999年被提出,是基于DCRT(Decisional Composite Residuosity Assumption)的加法同态加密方案。
DCRT
DCRT问题是说,判断一个数是否是模n2n^2n2的nnn次剩余是困难的,也就是没有多项式时间算法可以解决。
密钥生成
Pailliar算法是一个非对称加密算法,有公钥和私钥。
选择两个素数ppp和qqq,计算n=pqn=pqn=pq.
在区间(0,n2)(0,n^2)(0,n2)随机选择一个数ggg,满足L(gλmod n2)L(g^\lambda \mod n^2)L(gλmodn2)与 nnn互素,其中 λ\lambdaλ是p−1p-1p−1与q−1q-1q−1的最小公倍数(也就是n的欧拉函数值,即小于n与n互素的元素个数)。L(x)L(x)L(x)是一个函数,L(x)=x−1nL(x)=\frac{x-1}{n}L(x)=nx−1,这里使用的是一般的除法,不是模除法。
通常需要选择g=1mod ng=1 \mod ng=1modn,使得L(gxmod n2)=kxmod nL(g^x \mod n^2)=kx \mod nL(gxmodn2)=kxmodn,k是整数.
证明如下:
由g=1mod ng=1 \mod ng=1modn,知道g=1+kng=1+kng=1+kn,k是一个整数。
所以,gx=(1+kn)x=1+kn+c2n2+c3n3+⋯+cxnx=1+knmod n2g^x=(1+kn)^x=1+kn+c_2n^2+c_3n^3+\cdots+c_xn^x=1+kn \mod n^2gx=(1+kn)x=1+kn+c2n2+c3n3+⋯+cxnx=1+knmodn2.
所以,g=1mod ng=1 \mod ng=1modn,使得L(gxmod n2)=kxmod nL(g^x \mod n^2)=kx \mod nL(gxmodn2)=kxmodn.
最后产生的公钥pk=(n,g)pk=(n,g)pk=(n,g),私钥sk=λsk=\lambdask=λ.
加密
设要加密的明文为m∈[0,n)m \in [0,n)m∈[0,n);
在(0,n)(0,n)(0,n)之间选择一个随机数rrr;
密文c=gmrnmod n2c=g^mr^n \mod n^2c=gmrnmodn2.
解密
m=L(cλmod n2)⋅L−1(gλmod n2)mod nm=L(c^\lambda \mod n^2) \cdot L^{-1}(g^\lambda \mod n^2) \mod nm=L(cλmodn2)⋅L−1(gλmodn2)modn,其中L−1(gλmod n2)L^{-1}(g^\lambda \mod n^2)L−1(gλmodn2)是L(gλmod n2)L(g^\lambda \mod n^2)L(gλmodn2)关于n的模逆元。
解密正确性验证
首先,我们知道nλn\lambdanλ就是n2n^2n2的欧拉函数值,所以,rnλ=1mod n2r^{n\lambda}=1 \mod n^2rnλ=1modn2.
m=L(cλmod n2)⋅L−1(gλmod n2)mod n=L(gmλrnλmod n2)⋅(kλ)−1mod n=L(gmλmod n2)⋅(kλ)−1mod n=kmλ⋅(kλ)−1mod n=mmod n\begin{aligned}
m&=L(c^\lambda \mod n^2) \cdot L^{-1}(g^\lambda \mod n^2) \mod n\\
&=L(g^{m\lambda}r^{n\lambda} \mod n^2) \cdot (k\lambda)^{-1} \mod n\\
&=L(g^{m\lambda} \mod n^2) \cdot (k\lambda)^{-1} \mod n\\
&=km\lambda \cdot (k\lambda)^{-1} \mod n\\
&=m \mod n
\end{aligned}m=L(cλmodn2)⋅L−1(gλmodn2)modn=L(gmλrnλmodn2)⋅(kλ)−1modn=L(gmλmodn2)⋅(kλ)−1modn=kmλ⋅(kλ)−1modn=mmodn
同态加法
假设 C1=gm1r1nmod n2,C2=gm2r2nmod n2C_1=g^{m_1}r_1^n \mod n^2, C_2=g^{m_2}r_2^n \mod n^2C1=gm1r1nmodn2,C2=gm2r2nmodn2分别是 m1m_1m1和m2m_2m2的两个有效密文。
C1+C2=gm1r1n⋅gm2r2nmod n2=gm1+m2(r1r2)nmod n2C_1+C_2=g^{m_1}r_1^n \cdot g^{m_2}r_2^n \mod n^2=g^{m_1+m_2}(r_1r_2)^n \mod n^2C1+C2=gm1r1n⋅gm2r2nmodn2=gm1+m2(r1r2)nmodn2是m1+m2m_1+m_2m1+m2的一个有效密文。
标量乘法
设C=gmrnmod n2C=g^mr^n \mod n^2C=gmrnmodn2是mmm的密文。
则Ca=(gmrn)amod n2=gam(ra)nmod n2C^a=(g^mr^n)^a \mod n^2=g^{am}(r^a)^n \mod n^2Ca=(gmrn)amodn2=gam(ra)nmodn2显然是amamam的一个有效密文。
更多推荐
所有评论(0)