同态加密
如果我们有一个加密函数 f , 把明文A变成密文A’, 把明文B变成密文B’,也就是说 f(A) = A’ , f(B) = B’ 。另外我们还有一个解密函数 f^-1 能够将 f 加密后的密文解密成加密前的明文。
对于一般的加密函数,如果我们将A’和B’相加,得到C’。我们用 f^-1 对C’进行解密得到的结果一般是毫无意义的乱码。
但是,如果 f 是个可以进行同态加密的加密函数, 我们对C’使用 f^-1 进行解密得到结果C, 这时候的C = A + B。这样,数据处理权与数据所有权可以分离,这样企业可以防止自身数据泄露的同时,利用云服务的算力。
同态分类
a) 如果满足f (A) + f(B) = f(A+B) , 我们将这种加密函数叫做加法同态 ;
b) 如果满足f (A) × f(B) = f(A×B),我们将这种加密函数叫做乘法同态。
如果一个加密函数f只满足加法同态,就只能进行加减法运算;
如果一个加密函数f只满足乘法同态,就只能进行乘除法运算;
如果一个加密函数同时满足加法同态和乘法同态,称为全同态加密。那么这个使用这个加密函数完成各种加密后的运算(加减乘除、多项式求值、指数、对数、三角函数)。
第一个满足加法和乘法同态的同态加密方法直到2009年才由Craig Gentry提出。
同态加密算法
- RSA 算法对于乘法操作是同态的。
- Paillier 算法则是对加法同态的。
- Gentry算法则是全同态的。
Paillier算法
原理
- http://www.tcnj.edu/~hagedorn/papers/CapstonePapers/OKeeffe/CapstoneOKeeffeCryptography.pdf
- http://slideplayer.com/slide/8488065/
实现
可在github上搜索“paillier”,有好多开源库。
更多
https://zhuanlan.zhihu.com/p/31822335
转自:https://blog.youkuaiyun.com/jason_cuijiahui/article/details/79121702