Pailliar加密算法1999年被提出,是基于DCRT(Decisional Composite Residuosity Assumption)的加法同态加密方案。

DCRT

DCRT问题是说,判断一个数是否是模 n 2 n^2 n2 n n n次剩余是困难的,也就是没有多项式时间算法可以解决。

密钥生成

Pailliar算法是一个非对称加密算法,有公钥和私钥。
选择两个素数 p p p q q q,计算 n = p q n=pq n=pq.
在区间 ( 0 , n 2 ) (0,n^2) (0,n2)随机选择一个数 g g g,满足 L ( g λ m o d    n 2 ) L(g^\lambda \mod n^2) L(gλmodn2) n n n互素,其中 λ \lambda λ p − 1 p-1 p1 q − 1 q-1 q1的最小公倍数(也就是n的欧拉函数值,即小于n与n互素的元素个数)。 L ( x ) L(x) L(x)是一个函数, L ( x ) = x − 1 n L(x)=\frac{x-1}{n} L(x)=nx1,这里使用的是一般的除法,不是模除法。
通常需要选择 g = 1 m o d    n g=1 \mod n g=1modn,使得 L ( g x m o d    n 2 ) = k x m o d    n L(g^x \mod n^2)=kx \mod n L(gxmodn2)=kxmodn,k是整数.
证明如下:
g = 1 m o d    n g=1 \mod n g=1modn,知道 g = 1 + k n g=1+kn g=1+kn,k是一个整数。
所以, g x = ( 1 + k n ) x = 1 + k n + c 2 n 2 + c 3 n 3 + ⋯ + c x n x = 1 + k n m o d    n 2 g^x=(1+kn)^x=1+kn+c_2n^2+c_3n^3+\cdots+c_xn^x=1+kn \mod n^2 gx=(1+kn)x=1+kn+c2n2+c3n3++cxnx=1+knmodn2.
所以, g = 1 m o d    n g=1 \mod n g=1modn,使得 L ( g x m o d    n 2 ) = k x m o d    n L(g^x \mod n^2)=kx \mod n L(gxmodn2)=kxmodn.

最后产生的公钥 p k = ( n , g ) pk=(n,g) pk=(n,g),私钥 s k = λ sk=\lambda sk=λ.

加密

设要加密的明文为 m ∈ [ 0 , n ) m \in [0,n) m[0,n)
( 0 , n ) (0,n) (0,n)之间选择一个随机数 r r r
密文 c = g m r n m o d    n 2 c=g^mr^n \mod n^2 c=gmrnmodn2.

解密

m = L ( c λ m o d    n 2 ) ⋅ L − 1 ( g λ m o d    n 2 ) m o d    n m=L(c^\lambda \mod n^2) \cdot L^{-1}(g^\lambda \mod n^2) \mod n m=L(cλmodn2)L1(gλmodn2)modn,其中 L − 1 ( g λ m o d    n 2 ) L^{-1}(g^\lambda \mod n^2) L1(gλmodn2) L ( g λ m o d    n 2 ) L(g^\lambda \mod n^2) L(gλmodn2关于n的模逆元。

解密正确性验证

首先,我们知道 n λ n\lambda nλ就是 n 2 n^2 n2的欧拉函数值,所以, r n λ = 1 m o d    n 2 r^{n\lambda}=1 \mod n^2 rnλ=1modn2.
m = L ( c λ m o d    n 2 ) ⋅ L − 1 ( g λ m o d    n 2 ) m o d    n = L ( g m λ r n λ m o d    n 2 ) ⋅ ( k λ ) − 1 m o d    n = L ( g m λ m o d    n 2 ) ⋅ ( k λ ) − 1 m o d    n = k m λ ⋅ ( k λ ) − 1 m o d    n = m m o d    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)L1(gλmodn2)modn=L(gmλrnλmodn2)(kλ)1modn=L(gmλmodn2)(kλ)1modn=kmλ(kλ)1modn=mmodn

同态加法

假设 C 1 = g m 1 r 1 n m o d    n 2 , C 2 = g m 2 r 2 n m o d    n 2 C_1=g^{m_1}r_1^n \mod n^2, C_2=g^{m_2}r_2^n \mod n^2 C1=gm1r1nmodn2,C2=gm2r2nmodn2分别是 m 1 m_1 m1 m 2 m_2 m2的两个有效密文。
C 1 + C 2 = g m 1 r 1 n ⋅ g m 2 r 2 n m o d    n 2 = g m 1 + m 2 ( r 1 r 2 ) n m o d    n 2 C_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^2 C1+C2=gm1r1ngm2r2nmodn2=gm1+m2(r1r2)nmodn2 m 1 + m 2 m_1+m_2 m1+m2的一个有效密文。

标量乘法

C = g m r n m o d    n 2 C=g^mr^n \mod n^2 C=gmrnmodn2 m m m的密文。
C a = ( g m r n ) a m o d    n 2 = g a m ( r a ) n m o d    n 2 C^a=(g^mr^n)^a \mod n^2=g^{am}(r^a)^n \mod n^2 Ca=(gmrn)amodn2=gam(ra)nmodn2显然是 a m am am的一个有效密文。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐