1. 原始Paillier
1.1 简介
Paillier加密算法是Pascal paillier在1999年发明的概率公钥加密算法,该算法基于复合剩余类的困难问题,是一种满足加法的同态加密算法,已经广泛应用在加密信号处理或第三方数据处理领域。
复合剩余类的困难问题:判定合数剩余类问题是指N=p∗q,其中 p 和 q 都是大素数,任意给定 y∈ZN2∗,使得z=yNmodN2,判定z是模N2的N次剩余还是非剩余是困难的。
论文:Efficient Public-Key Cryptosystems Provably Secure against Active Adversaries
1.2 算法过程
1.2.1 密钥产生
选取两个随机的大素数 p,q ,计算 n=p∗q 和 λ=lcm(p−1,q−1), lcm 为两个参数的最小公倍数。
选取随机数 g ,g∈Zn2∗ 且满足 μ=(L(gλmodn2))−1 存在。
函数 L(x) 的定义如下 L(x)=n(x−1), 注意这里L(x)就是除法求商。
此时,公钥为(n,g) ,私钥为(λ,μ) 。
1.2.2 加密过程
对于明文m , m∈Zn,选择随机数r<n, 加密过程为:
c=gmrn(modn2) (公式1)
1.2.3 解密过程
对于密文 c 解密过程为:
m=L(cλmodn2)μmodn=L(gλmodn2)L(cλmodn2)(公式2)
1.3 正确性分析
1.3.1 离散对数性质
通过二项式定理,我们计算:
(1+n)x=∑k=0x(xk)nk=1+nx+(x2)n2+higher powers of n
这表明:(1+n)x≡1+nxmodn2
因此,如果:y=(1+n)xmodn2
那么:x≡ny−1modn
从而:L((1+n)xmodn2)≡xmodn
1.3.1 解密
因为 (p−1)∣λ,(q−1)∣λ
所以 λ=k1(p−1)=k2(q−1)
由费马小定理可得:
\begin{cases}
gλ=g{k_1(p−1)}≡1(mod;p) ,; (g^λ−1)|p &\
gλ=g{k_2(q−1)}≡1(mod;q) , ;(g^λ−1)|q &
\end{cases}
所以 (gλ−1)∣pq,gλ≡1(modn)
所以 gλ(modn2)≡1(modn)
即 gλ(modn2)=n∗kg+1(modn);kg<n
所以 L(gλ(modn2))=kg
通过二项式定理可以得出: (1+kn)m≡knm+1(modn2)
所以 gmλ=(1+kgn)m≡kgnm+1(modn2), rnλ=(1+kn)n≡knn2+1≡1(modn2)
所以 L(cλmodn2)=L(gmλrnλ(modn2))=L(kgnm+1)=mkg
所以(2)式 L(gλmodn2)L(cλmodn2)=kgmkg≡m(modn)
1.3.2 同态加法
- 两个密文的乘积将解密为对应的明文之和:
D(E(n1,r1)⋅E(m2,r2)modn2)=m1+m2modn
证明:
D(E(n1,r1)⋅E(m2,r2)modn2)=D(gm1⋅r1n⋅gm2⋅r2n)modn2=D(gm1+m2⋅(r1r2)nmodn2=m1+m2)
- 一个密文与以g为底、明文为幂的数相乘将解密为对应明文之和
D(E(m1,r1)⋅gm2modn2)=m1+m2modn
证明:
D(E(m1,r1)⋅gm2modn2)=D(gm1⋅r1n⋅gm2modn2)=D(gm1+m2⋅r1n)modn2=m1+m2modn
1.3.3 同态乘法
密文的明文幂将倍洁密文对应明文的乘积
D(E(m1,r1)kmodn2)=km1modn
证明:
D(E(m1,r1)kmodn2)=D((gm1⋅r1n)k)modn2=D(gkm1⋅r1kn)modn2=km1modn
2. 改进版Paillier
2.1 简介
参考论文:
2.2 算法过程
2.2.1 密钥产生
选取两个随机的大素数 p,q ,计算 n=p∗q 和 λ=lcm(p−1,q−1), lcm 为两个参数的最小公倍数。
选取g=n+1, μ=λ−1modn
函数 L(x) 的定义如下 L(x)=n(x−1)
此时,公钥为(n) ,私钥为(λ,μ) (这里λ, μ知其一则可计算出另一变量)。
2.2.2 加密过程
对于明文m , m∈Zn,选择随机数r<n, 加密过程为:
c=(1+nm)rn(modn2) (公式3)
2.2.3 解密过程
对于密文 c 解密过程为
m=L(cλmodn2)μmodn=λmodnL(cλmodn2) (公式4)
2.3 正确性分析
2.3.1 加密
公式(3)中的1+mn代替了公式(1)中的gm,我们接下来证明二者相等。
将g=n+1代入得到:gm=(n+1)mmodn2
根据二项式定理可得:gm=(n+1)m≡1+mnmodn2
由此可得公式(1)和(3)等价
2.3.2 解密
公式(2)与公式(4)不同点在于将L(gλmodn2)换成λmodn,所以我们证明二者相等即可。
由g=n+1,可得:
L(gλmodn2)=L((n+1)λmodn2)=L((1+nλ)modn2)=n1+nλ−1modn2=λmodn2=λmodn
3. 参考
- Paillier算法简介
- GCAC47 Paillier加法同态加密算法