# 同态加密

By [julian](https://paragraph.com/@noage-2) · 2022-07-02

---

什么是同态加密
-------

### 定义

同态加密（Homomorphic Encryption,HE）指将原始数据经过同态加密后，对密文进行特定的xxx运算，得到的密文计算结果在进行同态解密后的得到的明文等价于将原始明文数据直接进行特定xxx运算所得到的数据结果。

![同态加密](https://storage.googleapis.com/papyrus_images/ac812d3c90e03ec841f34046c1a32dc16638881f8335d28e5bab09aab3681191.jpg)

同态加密

### 数学原理

![](https://storage.googleapis.com/papyrus_images/f8076568bcdd03a315de127e5af24bb935e8b4218a77a692b2fda8f6d43381a0.png)

其中E为加密算法，M是所有可能信息的集合。如果加密算法E满足公式，那么我们称E在★运算上符合同态加密的性质。目前的同态加密算法，主要支持两种运算上的同态：加法和乘法。

公式和上面定义相符合，比如Alice 想计算 m1 + m2 ，但这个加法只能第三方计算（比如交给阿里云），所以我先加密E(m1)、E(m2)，将加密后的结果给阿里云，阿里云计算E(m1)+E(m2)，计算后把结果返回给Alice，因为满足上面的公式，所以Alice直接解密E(m1+m2)，就能得到m1+m2的结果，中间过程Alice没公开任何数据，隐私性得到保证。

### 分类

一般按照将同态加密算法支持的**运算类型**和**运算次数**，将其分成3类：

1.  部分同态加密（Partial HE，简称PHE）指同态加密算法只对加法或乘法（其中一种）有同态的性质。
    
2.  层次同态加密算法（LHE，Leveled HE 或 SWHE ，SomeWhat HE）一般支持有限次数的加法和乘法运算。
    
3.  全同态加密算法（Fully HE，简称FHE）支持在密文上进行无限次数的、任意类型的计算。
    

![三种同态加密算法  研究时间线](https://storage.googleapis.com/papyrus_images/6bf54680126c2ace389fca2c53b1e630cbce5d75d4ed6e59ed194455d1f996e4.png)

三种同态加密算法 研究时间线

### 算法开源库：

*   Paillier:
    
    [https://github.com/data61/python-paillier](https://github.com/data61/python-paillier)
    
*   HElib：
    
    [https://github.com/homenc/HElib](https://github.com/homenc/HElib)
    
*   SEAL
    

[https://github.com/microsoft/SEAL](https://github.com/microsoft/SEAL)

应用场景
----

同态加密最大的价值就是**隐私保护**：

**1、区块链隐私保护**：

![区块链隐私保护](https://storage.googleapis.com/papyrus_images/37d8dca7f355cf4a9da88fbcc206075b96284340e4ba7ac6cd4543d801da9877.jpg)

区块链隐私保护

**2、文件存储与密文检索**：使用同态加密，用户可以将自己的数据加密后存储在一个不信任的远程服务器上，日后可以向远程服务器查询自己所需要的信息，存储与查询都使用密文数据，服务器将检索到的密文数据发回。用户解密得到自己需要的信息，而远程服务器却对存储和检索的信息一无所知。此种方法同样适用于搜索引擎的数据检索。

**3、联邦学习**：是一种隐私保护机器学习方法，其主要思想为：构建一个隐私保护机器学习系统，使得拥有数据的多方能够联合训练一个或多个模型，并且任意一方的数据不会泄露给其他参与者。这能在保证隐私数据不泄露的情况下，提升参与者们本地模型的任务表现，打破数据孤岛

**4、云计算、委托计算**：

![](https://storage.googleapis.com/papyrus_images/3424f048c72ca13db36e05661aa5a0bd3678f1a2d9cb34c0d4a22dbee986f42a.png)

*   Alice对数据进行加密，并把加密后的数据发送给Cloud
    
*   Alice向Cloud提交数据的处理方法，用函数 f 来表示
    
*   Cloud在函数f下对数据进行处理，并且将处理后的结果发送给Alice
    
*   Alice对数据进行解密，得到结果
    

参考文章
----

[https://mp.weixin.qq.com/s/Rp\_c\_O1oR\_B7H2EB6HqLKg](https://mp.weixin.qq.com/s/Rp_c_O1oR_B7H2EB6HqLKg)

---

*Originally published on [julian](https://paragraph.com/@noage-2/axDYS8o1KxyvhcAYhhbI)*
