同态加密
1. 定义
一种加密算法E()
和相应的解密算法D()
。
⊕
和⊙
为某种数学运算。
如果加密算法满足:E(x + y) = E(x) ⊕ E(y)
,我们将这种加密函数叫做加法同态 。
如果加密算法满足:E(x * y) = E(x) ⊙ E(y)
,我们将这种加密函数叫做乘法同态 。
一个加密函数如果只满足加法同态,就只能进行加减法运算;如果只满足乘法同态,就只能进行乘除法运算;如果同时满足加法同态和乘法同态,称为完全同态。
2. 运用
将数据处理权与数据所有权分离,使得在不解密密文的情况对密文数据进行数学运算等同于对原文数据做运算。例如:某公司要计算员工平均新增,而员工薪资是隐私数据,以密文的形式存储。利用同态加密技术可以在不解密数据的情况下计算员工平均薪资。
定义:E(x + y) = E(x) ⊕ E(y)
原数据 密文
x E(x)
+ ⊕
y E(y)
‖ ‖
x + y D(E(x)⊕E(y))
3. 一种实现:Paillier密码体系
Paillier加密系统,是1999年Paillier发明的概率公钥加密系统。基于复合剩余类的困难问题。该加密算法是一种同态加密,满足加法和乘法同态。
3.1 秘钥生成
- 随机选择两个大质数p和q满足 g c d ( p q , ( p − 1 ) ( q − 1 ) = 1 gcd(pq,(p-1)(q-1)=1 gcd(pq,(p−1)(q−1)=1。 这个属性是保证两个质数长度相等。
- 计算 n = p q n=pq n=pq和 λ = l c m ( p − 1 , q − 1 ) λ=lcm (p - 1,q-1) λ=lcm(p−1,q−1)。
- 选择随机整数g( g ∈ Z n 2 ∗ g\in {\mathbb Z}_{n^2}^* g∈Zn2∗),使得满足n整除g的阶。
- 定义 L ( x ) = ( x − 1 ) n L(x)=\frac{(x−1)}{n} L(x)=n(x−1)
- 计算 μ = ( L ( g λ   m o d   n 2 ) ) − 1   m o d   n \mu =(L(g^{\lambda }{\bmod n}^{2}))^{-1}{\bmod n} μ=(L(gλmodn2))−1modn
- 公钥为 ( n , g ) (n,g) (n,g)
- 私钥为 ( λ , μ ) (\lambda,\mu) (λ,μ)
3.2 加密
- m为原文 ( 0 ≤ m < n ) (0≤m<n) (0≤m<n)
- 选择随机数r(0<r<n, r ∈ Z n 2 ∗ r\in {\mathbb Z}_{n^2}^* r∈Zn2∗),且 g c d ( r , n ) = 1 gcd(r,n)=1 gcd(r,n)=1
- 加密: c = g m ∗ r n   m o d   n 2 c=g^m*r^n\bmod n^2 c=gm∗rnmodn2
3.3 解密
- 解密: m = L ( c λ   m o d   n 2 ) ∗ μ   m o d   n m=L(c^\lambda \bmod n^2)*\mu \bmod n m=L(cλmodn2)∗μmodn
3.4 同态属性
-
加法同态(两个密文的乘积将解密为它们相应的明文之和)
D ( E ( m 1 ) ∗ E ( m 2 )   m o d   n 2 ) = m 1 + m 2   m o d   n D(E(m_1)*E(m_2) \bmod n^2)=m_1 + m_2\bmod n D(E(m1)∗E(m2)modn2)=m1+m2modn -
同态倍增
D ( E ( m 1 ) m 2   m o d   n 2 ) = m 1 m 2   m o d   n D(E(m_1)^{m_2} \bmod n^2) = m_1m_2 \bmod n D(E(m1)m2modn2)=m1m2modn
D ( E ( m 2 ) m 1   m o d   n 2 ) = m 1 m 2   m o d   n D(E(m_2)^{m_1} \bmod n^2) = m_1m_2 \bmod n D(E(m2)m1modn2)=m1m2modn