全同态加密丁津泰一、引言人们普遍认为全同态密码是密码学中的圣杯。
Craig Gentry 在近期提出的解决方案虽然在实际应用中效率不高,但在该领域仍是一个重大突破。
自那以后,人们又在提高全同态密码的效率问题上取得了很大的进步。
在一个加密体系中,Bob通过加密明文得到密文,Alice解密密文得到明文。
在全同态密码体系中,第三方可以在不知道明文内容的情况下,针对密文做一系列计算,解密的结果和对明文进行相同计算的所得相同。
云计算是全同态密码的一个主要应用方向。
Alice可以将她的数据存储在云端——例如,一个通过英特网连接的遥远的服务器。
由于云端的存储和计算能力都要远远优于Alice的终端设备,因此她可以使用云端服务器来处理她的数据。
不过,Alice还是无法信任云端,因为有些数据是很敏感的(例如,病人的医疗记录),所以她更希望云端在不知道数据本身的前提下处理数据、计算结果。
因此,Alice将数据加密,传送给云端,云端在不知道原始数据的前提下对加密后的数据进行一系列数学运算。
使用全同态密码,云端可以在不知道“关键字”的前提下,使用搜索引擎搜索用户需要的内容。
更精确的讲,全同态密码有如下特点:密文ci 解密得到明文mi ,其中ci , mi 是环上的元素,在这个环上,只有加法操作和乘法操作:Decrypt c i + c j=m i+ m jDecrypt c i×c j=m i× m j这就表示解密是双重同态的(Doubly homomorphic)也就是说,解密在加法和乘法上同态。
全同态意味着不论函数 f 是一个由多少(即便很多个)加法和乘法组成的环,都有如下的公式成立:Decrypt f c1,…,c n= f m1,…,m n如果云端可以高效的计算出f c1,…,c n的结果,并且这种计算是在不知道明文m1,…,m n的前提下进行的,那么这个加密体系是安全且高效的。
全同态加密既适用于公钥加密体系,也可用于对称加密体系。
1978年,在RSA密码系统发明后不久,Rivest, Adleman, 以及Dertouzos 三人提出了全同态加密体系——所谓的“隐私同态”。
在他们的论文中这样写到,尽管存在着固有的缺陷(on what can be accomplished),隐私同态似乎告诉我们,存在一种加密函数,允许我们在没有预先解密操作数的情况下操作已加密的数据。
我们把这种特殊的加密函数称为“homomor- phisms”,尽管他们三人非常乐观,全同态加密在相当长的一段时间里还是没能实现。
一些加密系统仅能在一种运算上同态。
例如:RSA以及ElGamal加密体系是在乘法运算上同态的。
还有一些其他加密方案有同态性质,例如GGH(Goldwasser-Micali cryptosystem GGH)以及Paillier 加密体系仅满足在明文上的加法同态,但不满足乘法同态;Boneh, Goh, Nissim 三人提出了一种部分同态方案:仅能做一次乘法和任意次加法。
然而,这一尴尬的局面在2009年终于被打破。
一个当时还在斯坦福读研究生的人,Gentry,提出了他具有突破意义的方案。
自那以后,各种新思想接踵而至。
二、一些突破性的新进展Gentry构建的密码系统仅仅使用了一些平常的加密解密函数,它以位为单位转换明密文。
同时,他还构建了一个评估函数(evalueate function)来描述密文上的运算,这些运算并不是一段顺序执行的程序,事实上,它是一个循环结构或者一个网状结构,输入信号要经过一系列逻辑门电路,而这些电路是由一些布尔门(AND,OR,NOT等)组成的,但是,他们也可以按照加法、乘法的步骤组合。
所谓评估函数,是指一个内嵌在加密系统中的计算机。
倘若,评估函数中,电路的深度(或者说电路中布尔门的个数)可以任意扩展,那么,原则上,它可以计算任何可计算的函数。
所谓电路的深度就是指从输入到输出的最长路径上布尔门的个数。
一个火力全开的计算机理应可以计算任意深度的门电路。
与此同时,这一同态系统也遇到了障碍——密文数据被噪声影响从而偏离理想值。
每一次算数运算都扩大了噪声,长期积累以至于最后无法返回正确的明文。
粗略的讲,每做一次同态加法,噪声加倍;每做一次同态乘法,噪声平方。
因此我们需要限制算术运算的次数限制噪声的积累。
而由于电路深度的限制,我们只能达到部分同态,不能达到全同态。
我们可以通过如下方法来减免电路深度的限制:当噪声快达到临界阈值时,解密数据,然后重加密数据,这样可以将噪声复位到初始的低水平。
不过,解密需要私钥,但是我们又不能让第三方得到私钥。
使用评估函数可以解决上述问题。
倘若不超过电路深度上的噪声限值,评估函数可以进行任何运算。
因此我们可以使用评估函数调用解密函数。
我们设计评估函数用来操作加密后的数据,因此在这个加密体系中,我们提供给评估函数的密钥也是加密后的。
实际上,Alice给Bob的用来解密数据的密钥是放在一个带锁的盒子里的,Bob在使用它的时候也无法打开这个盒子,事实上,能够打开这个盒子的钥匙其实装在这个盒子里面。
事实上,只要需要,我们可以随时调用上述重加密和刷新密文的过程。
这样,计算机就可以执行任意有限长度的门电路,这个系统就成为了一个全同态系统了,他已经可以对密文执行任何复杂的计算。
上述方案是建立在这样一个基本的假设之上的:解密电路本身足够浅,不足以超过噪声阈值。
当Gentry首次实现FHE时,它的实现并不满足这个条件。
他的评估函数在调用解密函数时,噪声,依然在增长。
补救措施是使用一种“挤压解密”(squashing decrypt)方法,它的代价是使得密钥更长更复杂。
从而解决了上述问题。
Gentry在它的博士论文和2009年的Symposium on the Theory of Computing 会议文献上描述了它的全同态加密系统。
从那以后的四年至今,世界上已经发表了几十种方案,这其中还包括已经实现的三个全同态加密的计算机程序。
大多数系统有着相同的整体架构——由部分同态上升到全同态的架构。
他们的不同之处在于底层加密机制方法不同。
每个加密系统都是建立在一个普遍情况下难以解决但在知晓捷径时又容易解决的问题之上的。
RSA建立在大素数分解之上;当知道因子时,问题得以解决。
Gentry在2009年提出的这一方法基于整数格中的离散点问题,类似于高维空间中的原子晶体。
格产生了一系列计算难题,例如:对于空间中的一个随机点,在格中找到离他最近的格点是一个很难的问题,除非你知道一组特殊的坐标,拥有它们可以让你更加了解这个格。
在2010年,美国麻省理工学院的Marten van Dijk,IBM的Gentry, Shai Halevi 以及Vinod Vaikuntanathan 提出了一种新的全同态实现方案,这种方案是基于数论中的近似GCD问题,或者说是近似最大公约数问题。
Zvika Brakerski 和Vaikuntanathan 提出一种基于LWE问题的全同态方案。
这种方案的主要思想是:求一组联立方程的解,在这组方程中的每一个方程都有可能是错的(一个方程是错的概率很小has some small probability of being false.)。
最近,Brakerski, Vaikuntanathan 和Gentry 三人构建了一个LWE系统的变体,它采用不同的方法管理噪声。
他们抛弃了每隔一段间隔“刷新”一次的方法,采用了在每一步计算后渐增式的调整系统参数来防治噪声等级达到阈值。
三、抵抗量子计算机的攻击当今,基于LWE设计的全同态加密系统,都具有可证明安全性。
在这种情况下,我们可以选择尽可能大的参数,来确保足够的安全性。
一个很重要的侧面是,基于LWE设计的加密系统被证明,不仅仅在传统的计算机的攻击下是安全的,而且在未来的量子计算机的攻击下也是安全的。
事实上,Chris Perkert已经证明了LWE问题在常规计算机的攻击下是安全的。
紧随其后,Oded Regev证明了LWE问题在量子计算机的攻击下也是安全的。
当然,这些结论都是建立在选择合适的参数。
另一方面,更有效的系统要建立在更有效的LWE问题上,这就是Ring-LWE 问题。
这个问题的可证明安全性是更加确定的。
我们可以保证这个系统是安全的。
但这个安全性是基于这样的一个假设:在理想格中求解作为密钥的格是很困难的。
这些都只是推测,并不是证明。
因此,我们可以说,基于LWE问题建立的全同态加密系统能较好地抵抗量子计算机的攻击。
而基于Ring-LWE问题建立的全同态加密系统,很有可能能抵抗将来的量子计算机的攻击,但这并不能保证。
四、应用方面全同态加密能成为一个可以用到实际应用上的技术么?全同态加密系统的计算效率以及计算开销,对比其他的加密系统,是一个相当大的挑战。
当加密只是用在创建一个安全的通信信道上,加密系统并不会对通信的双方的通信效率有直接影响。
但全同态加密系统却不是这样的,这个加密系统会应用到整个计算平台,任何低效率的出现都会降低整过过程的效率。
许多全同态加密模式,为了保证安全性,造成了相当大的开销。
在加密的过程中,数据会膨胀到相当大的程度,1Bit的明文在经过加密之后,会膨胀到几KBit甚至几MBit的数据量。
而在加密中使用的密钥也是巨型的,会达到几MB 甚至几GB。
仅仅是传输这些数据就已经是个很大的开销。
而对这些膨胀的数据进行计算则是一个更麻烦的问题。
对明文的数据进行加法和乘法运算,仅仅在一个常规机器上就可以轻松完成;而对这些膨胀的密文数据进行同样的处理,则需要相当复杂的软件以及高精度的算法来支持。
另一个关键的问题是,如果我们把常规的计算机程序中的每一步转变为使用全同态来完成。
那这些程序会变得相当相当复杂,以为着,这些程序的复杂度会变为一个相当相当复杂的多项式复杂度。
这个多项式复杂度,会有很多参数,以及很高的阶数。
所以,是不可能把它用到实际应用中的。
这也说明了为什么,人们在应用中只将在代数上简单的系统循环使用,比如AES循环。
现在大部分的工作都集中在缓解这些困难。
比如,在加密时不是单独对明文的每一个Bit进行加密,而是对多个Bit进行分组,同时对一个分组进行处理。
进而来提高加密的效率、减少开销。
可应用性的最重要的一个测试是建立一个可以运行的具体实现。
Bristol University的Nigel P. Smart和Catholic University of Leuven的Frederik Vercauteren 完成了第一次尝试。
他们建立了一个部分同态加密系统,并没有扩展到全同态加密上。
其中,瓶颈主要集中在不能处理大规模的加密密钥。
Gentry和Halevi运用不同的格算法,得到了一个全同态系统。