Paillier是一个支持加法同态的公钥密码系统,由Paillier在1999年的欧密会(EUROCRYPT)上首次提出。在众多PHE方案中,Paillier方案由于效率较高、安全性证明完备的特点,在各大顶会和实际应用中被广泛使用,是隐私计算场景中最常用的PHE实例化方案之一。
- 随机选择两个大质数$p$,$q$;
- 计算
$n=pq$ ,和$\lambda = lcm(p-1,q-1)$ ; - 随机选择整数$g \in Z^*_{n^2}$ ;
- 计算
$\mu = (L(g^\lambda \ mod \ n^2 ))^{-1} \ mod \ n$ ,其中,$L$函数定义为:$L(x)=\frac{x-1}{n}$ ; - 获得公钥$pk=(n,g)$,私钥$sk=(\lambda,\mu)$ 。
-
$gcm(a,b)$ :表示两个数的最大公因数。 -
$lcm(a,b)$ :表示两个数的最小公倍数。 -
$ Z^*_{n}$:表示模
$n$ 意义下,$[0,n-1]$ 中所有与$n$ 互质的元素的集合。 -
$Z^_{n^2}$:表示模 $n^2$ 意义下的可逆元素集合。即,对于正整数$n$ ,$Z^{n^2}$ 包含了模$n^2$ 意义下与$n^2$ 互质的所有元素。即,如果有$x \in Z^*{n^2}$ ,则$x$ 满足以下条件:
-
$x$ 和$n^2$ 互质,即$gcd(x,n^2)=1$ -
$x$ 在模$n^2$ 意义下有逆元,即,存在$y$ ,使得$xy≡1 \ (mod \ n^2)$
-
注:一般取
$g=n+1$ ,则通过数学推导,有$ \mu = \lambda^{-1} mod \ n$。因此,一般在编程时,只保存私钥为$sk=\lambda$
下面,对此进行证明:
在不影响算法正确性的前提下,为了简化运算,算法在密钥生成阶段,一般取
-
输入明文消息
$m$ ,满足条件$0 \leq m < n$ -
选择随机数$r$,满足条件$0 \leq r < n$ ,且
$r \in Z^*_{n^2}$ -
计算密文
$c=g^mr^n \ mod \ n^2$
从上面的公式推导可以知道,如果
$g=n+1$ ,则有:
这样,就加速了计算过程。
- 输入密文$c$
- 计算明文消息
$m=L(c^{\lambda} \ mod \ n^2)\cdot \mu \ mod \ n$