上一篇分析了能够实现同态乘法的ElGamal加密
,有没有什么加密方式可以实现同态加法呢?
Paillier就是其中之一。

准备工作

  1. 首先选择两个大质数 p , q p,q p,q
  2. 计算 n = p ∗ q n=p*q n=pq
  3. μ \mu μ ( p − 1 , q − 1 ) (p-1,q-1) (p1,q1)的最小公倍数。
  4. g = n + 1 g=n+1 g=n+1
  5. g , n g,n g,n为公钥, μ \mu μ为私钥。

加密消息 m m m

1.选择一个随机数 r r r
计算 c = g m ∗ r n c=g^m*r^n c=gmrn

解密密文 c c c

  1. m = ( c μ   m o d   n 2 ) − 1 ( g μ   m o d   n 2 ) − 1 m=\frac{{({c^\mu }\bmod {n^2}) - 1}}{{({g^\mu }\bmod {n^2}) - 1}} m=(gμmodn2)1(cμmodn2)1

正确性证明

先看分式的上半部分

  • ( c μ  mod  n 2 ) − 1 = ( g m μ r n μ  mod  n 2 ) − 1 (c^\mu\ \text{mod}\ n^2)-1=(g^{m\mu}r^{n\mu}\ \text{mod}\ n^2)-1 (cμ mod n2)1=(gmμrnμ mod n2)1

根据欧拉定理可知,如果 r r r n n n互质,那 r φ ( n )  mod  n = 1 r^{\varphi (n)}\ \text{mod}\ n=1 rφ(n) mod n=1 φ ( n ) \varphi (n) φ(n)为欧拉函数:在小于 n n n的正整数中,与 n n n互质的整数个数。那么

  • φ ( p 2 ) = p ( p − 1 ) \varphi (p^2)=p(p-1) φ(p2)=p(p1)
  • φ ( q 2 ) = q ( q − 1 ) \varphi (q^2)=q(q-1) φ(q2)=q(q1)

此时
r n μ  mod  n 2 r^{n\mu}\ \text{mod}\ n^2 rnμ mod n2
= r p ( p − 1 ) q ( q − 1 )  mod  n 2 =r^{p(p-1)q(q-1)}\ \text{mod}\ n^2 =rp(p1)q(q1) mod n2
= r p ( p − 1 ) q ( q − 1 )  mod  p 2 ∗ q 2 =r^{p(p-1)q(q-1)}\ \text{mod}\ p^2*q^2 =rp(p1)q(q1) mod p2q2
= 1 =1 =1

这个时候分式的上半部分:

  • ( c μ  mod  n 2 ) − 1 = ( g m μ  mod  n 2 ) − 1 (c^\mu\ \text{mod}\ n^2)-1=(g^{m\mu}\ \text{mod}\ n^2)-1 (cμ mod n2)1=(gmμ mod n2)1

g m μ  mod  n 2 = ( n + 1 ) m μ  mod  n 2 g^{m\mu}\ \text{mod}\ n^2=(n+1)^{m\mu}\ \text{mod}\ n^2 gmμ mod n2=(n+1)mμ mod n2
可以观察以下规律

  • ( n + 1 )  mod  n 2 = n + 1 (n+1)\ \text{mod}\ n^2=n+1 (n+1) mod n2=n+1
  • ( n + 1 ) 2  mod  n 2 = 2 n + 1 (n+1)^2\ \text{mod}\ n^2=2n+1 (n+1)2 mod n2=2n+1
  • ( n + 1 ) 3  mod  n 2 = 3 n + 1 (n+1)^3\ \text{mod}\ n^2=3n+1 (n+1)3 mod n2=3n+1
  • ……

所以, ( n + 1 ) m μ  mod  n 2 = ( 1 + n m μ )  mod  n 2 (n+1)^{m\mu}\ \text{mod}\ n^2=(1+nm\mu)\ \text{mod}\ n^2 (n+1)mμ mod n2=(1+nmμ) mod n2

分式的上半部分最后的结果为:

  • ( c μ  mod  n 2 ) − 1 = ( g m μ  mod  n 2 ) − 1 = n m μ (c^\mu\ \text{mod}\ n^2)-1=(g^{m\mu}\ \text{mod}\ n^2)-1=nm\mu (cμ mod n2)1=(gmμ mod n2)1=nmμ

同理,分式的下半部分:

  • ( g μ   m o d   n 2 ) − 1 = n μ {{({g^\mu }\bmod {n^2}) - 1}}=n\mu (gμmodn2)1=nμ

所以:

( c μ   m o d   n 2 ) − 1 ( g μ   m o d   n 2 ) − 1 = n m μ n μ = m \frac{{({c^\mu }\bmod {n^2}) - 1}}{{({g^\mu }\bmod {n^2}) - 1}}=\frac{{nm\mu }}{{n\mu }}=m (gμmodn2)1(cμmodn2)1=nμnmμ=m

正确性得证。

安全性分析

  • 从公钥 g , n g,n g,n,想要推测私钥 μ \mu μ,需要知道 p , q p,q p,q,而分解 p , q p,q p,q的过程是一个大整数分解难题。

安全性得证。

同态加法

给定明文 m 1 m_1 m1对应的密文 c 1 c_1 c1 m 2 m_2 m2对应的密文 c 2 c_2 c2
明文 m = m 1 + m 2 m=m_1+m_2 m=m1+m2对应的密文

  • c = c 1 ∗ c 2 c=c_1*c_2 c=c1c2
正确性证明
  • c 1 = g m 1 ∗ r 1 n  mod  n 2 c_1=g^{m_1}*r_1^n\ \text{mod}\ n^2 c1=gm1r1n mod n2
  • c 2 = g m 2 ∗ r 2 n  mod  n 2 c_2=g^{m_2}*r_2^n\ \text{mod}\ n^2 c2=gm2r2n mod n2
  • c = c 1 ∗ c 2  mod  n 2 = g ( m 1 + m 2 ) ∗ ( r 1 ∗ r 2 ) n  mod  n 2 c=c_1*c_2\ \text{mod}\ n^2=g^{(m_1+m_2)}*(r_1*r_2)^n\ \text{mod}\ n^2 c=c1c2 mod n2=g(m1+m2)(r1r2)n mod n2

解密过程同上。不再赘述。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐