参考链接:

https://blog.csdn.net/shn111/article/details/124594241

chapters

同态加密(Homomorphic Encryption)是指将原始数据经过同态加密后,对得到的密文进行特定的运算,然后将计算结果再进行同态解密后得到的明文等价于原始明文数据直接进行相同计算所得到的数据结果。
同态加密与一般加密方案的关注点不同,一般的加密方案关注的是数据存储安全即我要给其他人发送信息或者存储信息,我需要对数据进行加密之后再发送和存储,这里我们只需要保证在数据传送和存储的过程中不被其他人窃听到即可,在这个过程中用户时不能对加密的结果做任何操作的,否则可能会导致解密失败
同态加密的关注点则是数据处理安全,同态加密提供了一种对加密数据进行处理的功能。也就是说其他人可以对加密后的数据进行处理,在这个过程中不会泄露任何原始的内容,在数据处理完成之后再进行解密,得到的正是对原始数据进行相同处理后的结果。

加密步骤
本部分内容参考链接:https://www.jianshu.com/p/17bd95ec87f9

1.(本地)生成一对公私钥,公钥pub和密钥priv,公钥用于加密,密钥用于解密;

2.(本地)使用公钥pub分别加密m1和m2,得到Epub(m1)和Epub(m2);

3.(第三方)使用Addpub函数处理Epub(m1)和Epub(m2),即Addpub(Epub(m1),Epub(m2));

4.(本地)使用密钥priv解密Addpub(Epub(m1),Epub(m2)),即Dpriv(Addpub(Epub(m1),Epub(m2)));

Dpriv(Addpub(Epub(m1),Epub(m2)))就等于m1+m2。第三方通过上述步骤3实现了m1和m2在加密状态下做加法的操作。

同态加密的类型:
部分同态加密(partially homomorphic)

部分同态加密算法允许某一操作被执行无限次。例如,一个特定的算法可能是加法同态的,这意味着将两个密文相加会产生与加密两个明文之和相同的结果。

加法同态:该加密方案支持的同态函数族为所有可以仅由加法实现的函数。目前使用比较广泛的是paillier加法同态。
乘法同态:该加密方案支持的同态函数族为所有可以仅由乘法实现的函数。比如经典的RSA加密方案。

稍微同态加密(somewhat homomorphic)
有点同态加密算法可以对密文进行有限次数的任意操作,例如,某种程度的同态加密算法可以支持最多五种加法或乘法的任意组合。但是,任何一种类型的第六次操作都将产生无效的结果。

某种同态加密算法是实现完全同态加密的重要垫脚石。设计一个同时支持加法和乘法的算法(即使是支持一组数量的操作)的算法比创建一个允许无限加法或乘法密文的算法要困难的多。

全同态加密(fully homomorphic)
可以对密文进行无限次数的任意同态操作,也就是说它可以同态计算任意的函数