假设有这样一个场景,用户有一组私密数据,被加密存储在了第三方的云平台,现在,该用户想对这组数据进行某种处理,但是处理过程和结果都不想让第三方云平台看到。当然,用户可以选择将数据下载下来,处理后再加密上传,但是,假如这一组数据量很大,那么势必会花费很多的流量。这个时候,全同态加密就有了很大作用,用户不需要将数据下载下来处理后再上传,而是能够直接对云平台的数据进行处理,用户可以直接下载处理后的结果再进行解密就能得到想要的结果了。
可以这么理解:通过同态加密算法,用户可以与一个不可信的远程服务器(云端)进行某种安全代理计算(Secure Delegated Computation)。用户可以通过同态加密的技术来把自己敏感的隐私输入加密后托付给云端,然后云端可以在加密过后的数据上进行一定程度的计算,最后得到加密过后的用户想要的结果,并且返还给用户。最后用户就可以用解密密钥来打开得到的结果了。整个协议中,被代理方(云端)始终都无法看到任何和私密输入有关的有用信息。
两种特殊的同态性质:加法同态和乘法同态。
加法同态就是,如果密文累加起来,我们就可以获得把原文相加起来加密过后的新密文。而乘法同态则是,如果将一个乘法同态的算法生成的密文相乘起来,然后获得原文之间相乘之后的结果所对应的密文。
为什么实现任意次加法和乘法就能实现全同态加密了?
答:电路模型里,传输的是高电平和低电平,也就是0和1。这就和模2的域上进行操作类似,在 Z 2 \mathbb{Z_2} Z2中,模2加法等于异或电路,模2乘法等于与电路,这两个电路能够实现任意电路,从而形成完备集。
为什么采用电路模型?
密码学中所有的方案都需要依赖于一个数学难题,其衡量标准就是计算复杂度,而电路模型就是一个计算复杂度的计算模型,可以用来衡量解决问题所需要的资源(时间、存储量)等。在电路计算模型下,通过含有多少门电路(gate)的数量和电路的深度等来衡量。
电路计算模型需要“接触”到所有输入的数据,不会有泄露信息。所以传统安全计算都是采用电路模型。
分别为
2009年,在斯坦福读书的PhD Craig Gentry突然灵光一现,攻破了FHE算法的难关。在他的博士毕业论文中,他第一次给出了一个合理并且安全的全同态加密系统!这一系统基于理想格(ideal lattice)的假设。Gentry09提出来的全同态系统,我们往往称之为第一代全同态加密系统。
在Gentry的论文中,他还提到了一个至关重要的概念叫做Bootstrapping。Bootstrapping是一种对于密文的特殊处理技巧,处理过后竟然可以把一个噪音接近临界值的密文“重新刷新”成一个噪音很低的新密文。通过Bootstrapping,一个有限级数的系统的噪音可以永远不超过临界值,从而变成了全同态的系统。这样一来,我们就可以同态计算任意大小的 了。
在Gentry的重大突破之后,整个密码圈又一次陷入了疯狂,大家都开始争相基于Gentry提出的想法寻找更加高效率和全能的全同态体系。
在2011年的时候,两位大佬Brakerski和Vaikuntanathan提出了一个新的全同态加密体系,这一体系基于格(lattice)加密的另一种假设Learning With Errors(LWE)。在同一年,Brakerski,Gentry与Vaikuntanathan这三人一起把这个体系做完了,并且正式发表出来。他们发明的全同态系统简称为BGV系统。BGV系统是一个有限级数的同态加密系统,但是可以通过Bootstrapping的方式来变成全同态系统。BGV系统相比起Gentry09提出的系统,使用了更加实际一点的LWE假设。一般来说我们都把BGV系统称之为第二代全同态加密系统。
2013年,Gentry又卷土重来了。Gentry,Sahai和Waters三个大佬推出了新的GSW全同态加密系统。GSW系统和BGV相似,本身具有有限级数全同态性质,基于更加简单的LWE假设,并且通过Bootstrapping可以达到全同态。我们一般把GSW系统称为第三代全同态加密系统。
总结
第一代全同态加密方案,都是遵循 Gentry 复杂的构造方法。本质上这些方案都是在各种环的理想上,首先构建一个部分( somewhat) 同态加密方案( 即方案只能执行低次多项式计算) ,然后“压缩”解密电路( 依赖稀疏子集和问题的假设) ,从而执行自己的解密函数进行同态解密,达到控制密文噪声增长的目的,最终在循环安全的假设下获得全同态加密方案。尽管同态解密是实现全同态加密的基石,但是同态解密的效率很低
第二代全同态加密方案构造方法简单,基于 LWE( 环-LWE) 的假设,其安全性可以归约到一般格上的标准困难问题,打破了原有的 Gentry 构建全同态加密方案的框架。首先构建一个部分同态加密方案,密文计算后,用密钥交换技术控制密文向量的维数膨胀问题,然后使用模交换技术控制密文计算的噪声增长。通过上述方法不需要同态解密技术,就可获得层次型全同态加密方案,即方案可以执行多项式级深度的电路,可以满足绝大多数应用。要想获得“纯”的全同态加密方案,依然要依赖同态解密技术,然而同态解密技术效率低下,而且需要依赖循环安全的假设,实践中不予考虑。
第三代方案就是2013 年Gentry 等人提出的一个基于近似特征向量的全同态加密方案,不需要密钥交换技术和模交换技术就可以实现层次型全同态加密方案。该方案的安全性基于 LWE 问题,密文的计算就是矩阵的加法与乘法,因此是非常自然的一个全同态加密方案。
一个完整的全同态加密系统具有四个基本算法:
密钥生成算法 K e y G e n KeyGen KeyGen,将会生成其他FHE算法将要使用的密钥。
用于生成公钥和私钥,同时还需要生成另外一个公钥 E v k Evk Evk,该公钥用于密文计算,它的形式与使用的全同态加密算法直接相关。如,
此外,第三代方案,也就是近似特征向量的方案,它是不需要 E v k Evk Evk的,这也是它可以产生IBHE和ABHE的原因。
加密算法 E n c Enc Enc,可以加密用户的输入,输出密文。
解密算法 D e c Dec Dec,可以把密文还原为原来的明文。但这里的解密不仅要能解密密文,还能对计算后的密文进行解密。但密文计算会存在噪声,当噪声到达一定界限之后就无法正确解密了,所以同态加密的关键是对噪声的控制。
运算算法 E v a l Eval Eval,可以基于输入的密文,进行任意功能的运算,最后得到加密后的结果。这里的密文计算是在电路中的,电路是分层的,深度越深,层数越多,密文就能进行更多次的计算。注意,电路深度 d d d与密文计算次数 n n n的关系是 d = ⌈ log 2 n ⌉ d=\lceil \log_2 n \rceil d=⌈log2n⌉,密文计算次数就是密文乘法的幂次。用乘法来衡量的原因是噪声增加更快。一般的运算算法会有三个参数,即公钥 E v k Evk Evk,计算函数 f f f,密文 C C C。
全同态加密发展到今天,已经出现了两个分支,一个分支是以计算算数电路为主(BFV, BGV, CKKS),基于RLWE的层次同态加密(LHE),一般来说支持多项式打包技术,可以一次性运算(加法乘法)多个数据,效率上较高,但LHE目前来说Bootstrapping开销比较大,一般来说只当作支持有限次数的运算的同态加密方法使用。
另一个则以计算布尔电路为主(FHEW, TFHE),基于高效自举(Bootstrapping)技术,对于多项式打包并不友好。
下面一些方案的特性:
FHEW、TFHE、GSW为布尔电路上的实现,其特性
BGV、BFV是算数电路上的实现,其特性
CKKS则是17年才提出来的,其特性
2013年之后,密码圈基本上就百花齐放了。基于原来的三代全同态系统之上,出现了各种各样新的设计,致力于优化和加速BGV与GSW系统的运行效率。
当前的主流前沿研究
CKKS的安全性问题
FHEW类型与RLWE类型的同态加密结合
快速Bootstrapping
将RLWE类型的同态加密与MPC结合,通过MPC实现Bootstrapping
同态加密专栏的初心
初探全同态加密:FHE的定义与历史回顾(强推)
全同态加密知识体系整理(强推)
《全同态加密-从理论到实践》 陈智罡