Paillier 算法

Paillier 是 Pascal Paillier 在 1999 年提出的概率型公钥密码体制。它最重要的工程价值是加法同态:不解密也能在密文域完成明文加法和明文标量乘。

在联邦学习、安全聚合、电子投票和安全多方计算中,Paillier 常被用来保护中间统计量或梯度。它不是全同态加密,不能直接完成两个密文对应明文的乘法。

一句话概括

Paillier 把明文放在模 nnn 的加法群里,把密文放在模 n2n^2n2 的乘法群里:

m∈Zn,c∈Zn2∗ m \in \mathbb{Z}_n,\qquad c \in \mathbb{Z}_{n^2}^{*} mZn,cZn2

密文相乘会对应到明文相加:

D(E(m1)E(m2))≡m1+m2(modn) D(E(m_1)E(m_2)) \equiv m_1+m_2 \pmod n D(E(m1)E(m2))m1+m2(modn)

这也是 Paillier 适合做密文聚合的根本原因。

数学基础

明文、随机数和密文空间

pppqqq 是两个大素数:

n=pq n=pq n=pq

明文空间通常取为:

M=Zn \mathcal{M}=\mathbb{Z}_n M=Zn

随机数从可逆剩余类中选取:

r∈Zn∗ r\in \mathbb{Z}_n^{*} rZn

密文在模 n2n^2n2 下计算:

C⊆Zn2∗ \mathcal{C}\subseteq \mathbb{Z}_{n^2}^{*} CZn2

Paillier 的加密形式为:

c=gmrn mod n2 c=g^m r^n \bmod n^2 c=gmrnmodn2

其中 ggg 是公钥中的生成元,rrr 提供概率性。即使同一个 mmm 被重复加密,只要 rrr 不同,得到的 ccc 也会不同。

困难假设

Paillier 的语义安全性通常建立在判定性复合剩余类假设上。直观地说,给定 z∈Zn2∗z\in \mathbb{Z}_{n^2}^{*}zZn2,判断它是否存在某个 yyy 使得:

z≡yn(modn2) z\equiv y^n \pmod{n^2} zyn(modn2)

在不知道 pppqqq 的情况下被认为是困难的。这个问题称为判定性复合剩余类问题,常记为 DCR 问题。

标准算法流程

密钥生成

  1. 选择两个大素数 pppqqq,并计算:

n=pq n=pq n=pq

  1. 计算 Carmichael 函数:

λ=lcm⁡(p−1,q−1) \lambda=\operatorname{lcm}(p-1,q-1) λ=lcm(p1,q1)

  1. 选择 g∈Zn2∗g\in \mathbb{Z}_{n^2}^{*}gZn2,要求下式在模 nnn 下存在逆元:

L(gλ mod n2) L(g^\lambda\bmod n^2) L(gλmodn2)

其中辅助函数定义为:

L(u)=u−1n L(u)=\frac{u-1}{n} L(u)=nu1

  1. 计算:

μ=(L(gλ mod n2))−1 mod n \mu=\left(L(g^\lambda\bmod n^2)\right)^{-1}\bmod n μ=(L(gλmodn2))1modn

公钥和私钥分别为:

pk⁡=(n,g) \operatorname{pk}=(n,g) pk=(n,g)

sk⁡=(λ,μ) \operatorname{sk}=(\lambda,\mu) sk=(λ,μ)

加密

给定明文:

0≤m<n 0\le m<n 0m<n

随机选择:

r∈Zn∗ r\in \mathbb{Z}_n^{*} rZn

计算密文:

c=E(m;r)=gmrn mod n2 c=E(m;r)=g^m r^n \bmod n^2 c=E(m;r)=gmrnmodn2

解密

给定密文 ccc,先计算:

u=cλ mod n2 u=c^\lambda \bmod n^2 u=cλmodn2

再恢复明文:

m=L(u)μ mod n m=L(u)\mu \bmod n m=L(u)μmodn

也就是:

m=L(cλ mod n2)μ mod n m=L(c^\lambda\bmod n^2)\mu \bmod n m=L(cλmodn2)μmodn

常用优化:取 g=n+1g=n+1g=n+1

工程实现里经常直接选:

g=n+1 g=n+1 g=n+1

这时由二项式定理可得:

(n+1)m≡1+mn(modn2) (n+1)^m \equiv 1+mn \pmod{n^2} (n+1)m1+mn(modn2)

因此加密公式可以化简为:

c=(1+mn)rn mod n2 c=(1+mn)r^n \bmod n^2 c=(1+mn)rnmodn2

私钥参数也可以化简。因为:

L((n+1)λ mod n2)≡λ(modn) L((n+1)^\lambda\bmod n^2)\equiv \lambda \pmod n L((n+1)λmodn2)λ(modn)

所以:

μ=λ−1 mod n \mu=\lambda^{-1}\bmod n μ=λ1modn

这个优化把 gm mod n2g^m\bmod n^2gmmodn2 的大模幂变成一次乘加,对加密端非常友好。它成立的前提是:

gcd⁡(λ,n)=1 \gcd(\lambda,n)=1 gcd(λ,n)=1

实践中通常会在选取 pppqqq 时检查:

gcd⁡(n,(p−1)(q−1))=1 \gcd(n,(p-1)(q-1))=1 gcd(n,(p1)(q1))=1

同态性质

密文乘法对应明文加法

设:

c1=gm1r1n mod n2 c_1=g^{m_1}r_1^n \bmod n^2 c1=gm1r1nmodn2

c2=gm2r2n mod n2 c_2=g^{m_2}r_2^n \bmod n^2 c2=gm2r2nmodn2

则:

c1c2≡gm1+m2(r1r2)n(modn2) c_1c_2\equiv g^{m_1+m_2}(r_1r_2)^n \pmod{n^2} c1c2gm1+m2(r1r2)n(modn2)

所以:

D(c1c2)≡m1+m2(modn) D(c_1c_2)\equiv m_1+m_2 \pmod n D(c1c2)m1+m2(modn)

也就是:

D(E(m1)E(m2))≡m1+m2(modn) D(E(m_1)E(m_2))\equiv m_1+m_2 \pmod n D(E(m1)E(m2))m1+m2(modn)

密文幂对应明文标量乘

对任意整数 kkk

ck≡gkm(rk)n(modn2) c^k\equiv g^{km}(r^k)^n \pmod{n^2} ckgkm(rk)n(modn2)

因此:

D(E(m)k)≡km(modn) D(E(m)^k)\equiv km \pmod n D(E(m)k)km(modn)

在联邦学习聚合中,密文加法和标量乘足以表达许多求和型统计量。

负数和定点数编码

Paillier 原生明文是模 nnn 的非负整数。实际系统要处理负数和浮点数时,通常先做编码。

负数可以用模空间高位表示。例如把整数 xxx 编码为:

EncInt⁡(x)=x mod n \operatorname{EncInt}(x)=x\bmod n EncInt(x)=xmodn

解码时可设阈值:

DecInt⁡(y)={y,0≤y<n2y−n,n2≤y<n \operatorname{DecInt}(y)= \begin{cases} y, & 0\le y < \frac{n}{2} \\ y-n, & \frac{n}{2}\le y < n \end{cases} DecInt(y)={y,yn,0y<2n2ny<n

浮点数一般用定点数缩放。给定缩放因子 SSS

x~=⌊Sx⌉ \tilde{x}=\lfloor Sx\rceil x~=Sx

密文域完成加法后再除以 SSS 还原近似值。

解密正确性证明

Paillier 解密里最容易绕的地方是:密文里明明混入了随机数 rrr,为什么做一次 cλ mod n2c^\lambda\bmod n^2cλmodn2 再套 LLL 函数,就能把明文 mmm 取出来。

先把密文写成:

c=gmrn mod n2 c=g^m r^n \bmod n^2 c=gmrnmodn2

设:

a=L(gλ mod n2) a=L(g^\lambda\bmod n^2) a=L(gλmodn2)

密钥生成要求 aaa 在模 nnn 下存在逆元,并令:

μ=a−1 mod n \mu=a^{-1}\bmod n μ=a1modn

随机因子会消失

因为 r∈Zn∗r\in\mathbb{Z}_n^*rZn,而 λ=lcm⁡(p−1,q−1)\lambda=\operatorname{lcm}(p-1,q-1)λ=lcm(p1,q1)Zn∗\mathbb{Z}_n^*Zn 的 Carmichael 指数,所以:

rλ≡1(modn) r^\lambda\equiv 1 \pmod n rλ1(modn)

于是存在整数 kkk,使得:

rλ=1+kn r^\lambda=1+kn rλ=1+kn

再利用 [[02-Area/07-算法/00-基本算法/01-二项式定理|二项式定理]]:

rnλ=(rλ)n=(1+kn)n≡1(modn2) r^{n\lambda}=(r^\lambda)^n=(1+kn)^n\equiv 1 \pmod{n^2} r=(rλ)n=(1+kn)n1(modn2)

也就是说,随机因子 rnr^nrn 在提升到 λ\lambdaλ 次方之后,会在模 n2n^2n2 下变成 111

明文因子会线性化

因为 g∈Zn2∗g\in\mathbb{Z}_{n^2}^*gZn2,所以 g mod n∈Zn∗g\bmod n\in\mathbb{Z}_n^*gmodnZn,同样有:

gλ≡1(modn) g^\lambda\equiv 1 \pmod n gλ1(modn)

因此 gλ mod n2g^\lambda\bmod n^2gλmodn2 一定可以写成:

gλ mod n2=1+an g^\lambda\bmod n^2=1+an gλmodn2=1+an

其中 a=L(gλ mod n2)a=L(g^\lambda\bmod n^2)a=L(gλmodn2)。于是:

(gλ)m≡(1+an)m≡1+man(modn2) (g^\lambda)^m\equiv (1+an)^m\equiv 1+man \pmod{n^2} (gλ)m(1+an)m1+man(modn2)

套用 LLL 函数恢复明文

把两部分合起来:

cλ≡(gmrn)λ≡(gλ)mrnλ≡1+man(modn2) c^\lambda \equiv (g^m r^n)^\lambda \equiv (g^\lambda)^m r^{n\lambda} \equiv 1+man \pmod{n^2} cλ(gmrn)λ(gλ)mr1+man(modn2)

所以:

L(cλ mod n2)=(1+man)−1n≡ma(modn) L(c^\lambda\bmod n^2) =\frac{(1+man)-1}{n} \equiv ma \pmod n L(cλmodn2)=n(1+man)1ma(modn)

最后乘上 μ=a−1 mod n\mu=a^{-1}\bmod nμ=a1modn

L(cλ mod n2)μ≡ma⋅a−1≡m(modn) L(c^\lambda\bmod n^2)\mu \equiv ma\cdot a^{-1} \equiv m \pmod n L(cλmodn2)μmaa1m(modn)

这就证明了解密公式:

D(c)=L(cλ mod n2)μ mod n D(c)=L(c^\lambda\bmod n^2)\mu\bmod n D(c)=L(cλmodn2)μmodn

确实能恢复明文 mmm。如果采用 g=n+1g=n+1g=n+1,则 a≡λ(modn)a\equiv\lambda\pmod naλ(modn),所以前面常用优化里的 μ=λ−1 mod n\mu=\lambda^{-1}\bmod nμ=λ1modn 只是这个证明的一个特例。

硬件实现视角

Paillier 的主要开销集中在模幂和大整数模乘。标准加密需要计算:

rn mod n2 r^n\bmod n^2 rnmodn2

解密需要计算:

cλ mod n2 c^\lambda\bmod n^2 cλmodn2

如果 nnn204820482048 位,则 n2n^2n2 对应约 409640964096 位模数。也就是说,Paillier 的底层模乘位宽通常是同安全级 RSA 的两倍左右。

采用 g=n+1g=n+1g=n+1 后,加密端仍然要做一次 rn mod n2r^n\bmod n^2rnmodn2,但省掉了 gm mod n2g^m\bmod n^2gmmodn2。解密端仍然是大模幂,是硬件加速的重点。

常见优化包括:

  • 用 Montgomery 模乘实现连续模乘。
  • 用滑动窗口或固定窗口方法减少模乘次数。
  • 对解密端利用 CRT,把模 n2n^2n2 运算拆到与 p2p^2p2q2q^2q2 相关的更小模数上。
  • 对批量加密场景预计算 rn mod n2r^n\bmod n^2rnmodn2

优缺点

优点:

  • 支持天然的加法同态,适合安全求和与梯度聚合。
  • 加密具有概率性,相同明文多次加密会得到不同密文。
  • 数学结构简洁,工程实现和安全分析都比较成熟。

缺点:

  • 只支持加法同态,不能直接完成密文之间的乘法。
  • 密文模数是 n2n^2n2,带来明显的存储和带宽膨胀。
  • 大整数模幂开销高,尤其在批量联邦学习场景中容易成为瓶颈。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐