Paillier 公钥加密,是基于复合剩余类的困难问题。
判定合数剩余类问题是指 N= p * q,其中p和q都是大素数,任意给定
y
∈
Z
N
2
∗
y∈Z_{N^2}^*
y∈ZN2∗,使得
z
=
y
N
m
o
d
N
2
z=y^N mod N^2
z=yNmodN2,判定z是模
N
2
N^2
N2的N次剩余还是非剩余是困难的。
与Paillier加密相关数学基础,例如gcd,lcm,二次剩余等理论可以查看我之前写的几篇博客https://blog.csdn.net/sLiubala/article/details/105914838
https://blog.csdn.net/sLiubala/article/details/105906999
Paillier加密算法是一种同态加密,满足加法和数乘同态。
paillier加密算法步骤:密钥生成、加密、解密
- 密钥生成
1.1 随机选择两个大质数p和q满足gcd(pq,(p-1)(q-1)) =1。这个属性保证两个质数长度相等。
1.2 计算n=pq和λ=lcm(p-1,q-1)
1.3 选择随机整数g( g ∈ Z n 2 ∗ g∈Z_{n^2}^* g∈Zn2∗),使得满足n整除g的阶。
1.4 公钥为(N,g)
1.5 私钥为λ
g c d ( L ( g λ m o d n 2 ) , n ) = 1 gcd(L(g^λ mod n^2),n)=1 gcd(L(gλmodn2),n)=1 - 加密
2.1 选择随机数 r ∈ Z n r∈Z_n r∈Zn
2.2 计算密文
c = E ( m , r ) = g m r n m o d n 2 , r ∈ Z n c = E(m,r) = g^m r^n mod n^2 ,r∈Z_n c=E(m,r)=gmrnmodn2,r∈Zn,其中m为加密信息。 - 解密
m = D ( c , λ ) = ( L ( c λ m o d n 2 ) / L ( g λ m o d n 2 ) ) m o d n , 其 中 L ( u ) = u − 1 / N m= D(c,λ)=(L(c^λ mod n^2)/L(g^λ mod n^2)) mod n,其中 L(u)=u-1/N m=D(c,λ)=(L(cλmodn2)/L(gλmodn2))modn,其中L(u)=u−1/N