刚入门全同态加密,翻译《A Guide to Fully Homomorphic Encryption》,原文链接:https://eprint.iacr.org/2015/1192.pdf
摘要
全同态加密(FHE)被称为密码学的圣杯,这是一个难以实现的目标,可以解决IT世界的安全和信任问题。2009年之后,当克雷格·金特里(Craig Gentry)表明FHE原则上可以实现时,该领域的研究爆发了。自那时以来,在寻找更实际、更有效的解决方案方面取得了相当大的进展。虽然研究迅速发展,但术语和概念变得多样化和混乱,以至于今天很难理解不同作品的实际成就。本文的目的是解决三个基本问题:
什么是FHE?FHE可以用来做什么?FHE今天的状况如何?
在对该领域进行调查的同时,我们还澄清了使用中的不同术语,并证明了不同FHE概念之间的联系。
1 介绍
同态加密的目的是允许对加密数据进行计算。因此,数据在处理时可以保密,从而可以使用不受信任环境中的数据完成任务。在分布式计算和异构网络的世界中,这是一个非常有价值的功能。自1978年Rivest、Adleman和Dertouzos提出对加密数据进行计算的通用方法以来,这一直是密码学的一个目标。人们之所以对这个主题感兴趣,是因为它在现实世界中有许多应用。全同态加密的发展是一个革命性的进步,极大地扩展了可用于同态处理加密数据的计算范围。自从Gentry在2009年发表他的想法[28,29]以来,人们对该领域的改进、实施和应用产生了巨大的兴趣。
我们在第2节中详细介绍了具体的应用程序,但为了给人一种感觉,请考虑云计算。随着越来越多的数据被外包到云存储中,通常是未加密的,因此需要对云存储提供商给予相当大的信任。云安全联盟将数据泄露列为云安全的首要威胁[61]。使用传统加密对数据进行加密可以避免这个问题。然而,现在用户不能对数据进行操作,必须下载数据才能在本地执行计算。通过全同态加密,云可以代表用户执行计算,并只返回加密的结果。
1.1 什么是全同态加密?
主要来说,FHE允许对加密数据进行任意计算。对加密数据的计算意味着,如果用户有一个函数f,并希望对于某些输入m1,…,mn获得f(m1,…,mn),它可以使用其加密c1,…,cn来代替输入来获得一个结果,该结果解密为f(m1,…,mn)。
在某些密码系统中,输入消息(明文)位于某些代数结构中,通常是组或环。在这种情况下,密文通常也位于一些相关的结构中,这些结构可能与明文相同。在旧的同态加密方案中,函数f通常被限制为与明文结构相关的代数运算。以ElGamal为例。如果明文空间是一组G,那么密文空间是G × G的乘积,f局限于G上的群运算。2009年以前的大多数方案都适合这样的结构。完全同态加密的目的是将函数f扩展为任意函数。如果方案对于功能完整的操作集是同态的,并且可以从该集合迭代操作,则可以实现这一目标。
虽然从理论上讲,加密方案总是被要求需要满足效率,即在安全参数的多项式时间内运行,但实际上效率并不是获得第一个FHE方案的首要考虑因素。这些方案缺乏效率的一个原因是,它们使用由单个位组成的明文空间,并且对于加法和乘法模2是同态的。虽然任何复杂的函数都可以从这样的基本操作建立起来,但这可能需要大量这样的操作。
为了提高效率,FHE方案的一些最新变体以不同的方式限制函数f,我们稍后将对此进行探讨。
尽管FHE的理论观点只关心f的选择最大化,但实践观点也关心保持这个选择只在需要的时候大,并且对于明文和密文空间也可能更喜欢比二进制情况更丰富的结构。
1.2 FHE的关系:功能加密与程序混淆
FHE背后的基本思想是能够在加密数据上应用函数。另外两个由函数组成的密码学概念是函数加密和混淆。有趣的是,正如之前已经认识到的[3,25],混淆、函数加密和完全同态加密似乎在某种程度上交织在一起。
函数加密在本质上类似于基于身份的加密和基于属性的加密。Boneh, Sahai和Waters[13]对这三个概念之间的关系进行了简明的解释,并对FHE进行了一些讨论。FHE和FE的概念确实有一些重叠,并且已经证明功能加密可以像FHE一样工作,只需稍作调整[3]。
函数加密允许使用主密钥发布密钥,这取决于函数f。给定密文,密钥允许用户学习应用于明文的f值,而不学习其他值[12]。加密数据上的计算函数将同态加密和函数加密这两个概念联系起来。一个显著的区别是函数的应用方式。FE通过主密钥持有者授予对哪些功能可以应用于数据的控制权,主密钥持有者根据功能的适当性决定发布密钥。密钥可以用于获得应用于加密数据的函数的明文结果。FHE允许任何拥有评估密钥的人运行函数(见第3节),但只有密钥的所有者才能将结果解密为明文。运行该函数的用户只能获得密文。
混淆最初被设计为概念上类似于黑盒计算,其中一个人获得输入到黑盒的知识,并从中输出,但没有其他知识[9,38,25]。通过混淆处理,可以在不透露密钥知识的情况下将密钥放置在要运行的程序中。因此,可以生成一个包含公钥和私钥的混淆程序,并通过首先应用解密算法,然后应用所需函数,最后对结果进行加密来处理输入。这将取代FHE中的同态运算。
这种从混淆方案和传统加密方案生成FHE方案的能力似乎很有前途,但实际上还不清楚这是否比直接FHE更有优势。我们还需要考虑在已发布的程序中隐藏密钥的安全约束和影响。
1.3 系统化的需要
FHE的处理似乎非常令人困惑。有时,两个定义似乎说的是同一件事——例如,乍一看,能够计算任意一个电路和能够连续计算任意多个电路似乎是一回事。然而,事实并非如此,详见注释5。
为了帮助理解其中的区别,请考虑云计算示例:FHE通常作为解决方案出售。然而,如果我们只能计算任意大小的一个电路,那么我们就不能将中间结果用于以后的进一步计算;一切都必须从头开始通过原始密文进行计算。这满足FHE的通常定义(定义9),但这是反直觉的,几乎不可能得到最优解。在这种情况下所需要的是连续计算任意多个电路的能力。
这突出了该领域的另一个问题:在某些情况下,定义并不能表达人们直觉上的假设。在其他情况下,一种直觉在不同的论文中有不同的定义。例如,一个称为紧凑性的属性就是这样,它直观地表明密文大小不应该通过同态运算来增长。Gentry通过其原作中的一个特征描述来定义它,而在随后的作品中使用了不同的特征描述。看到这两个定义是等效的并不像人们想象的那样简单,实际上需要额外的假设。
有时,属性根本没有正确定义,有时使用了同一篇论文中没有提到的含义。图1显示了这一大堆定义的复杂程度。从定义和性质(图中白色矩形)开始,我们可以对不同类型的同态方案(阴影圆形矩形)进行分类。此外,这些分类可以再次与跳数正确性相结合,从而产生另一组同态方案(较暗的椭圆形)。
2 FHE的应用
本节将探讨各种同态加密的众多应用。有些需要完全同态加密,而另一些只需要部分同态加密。区别将在第3节中明确。现在,只要知道完全同态方案可以计算加密数据上的任何内容就足够了,而部分同态的方案则受到更多限制。
本节分为三个部分。第一部分讨论当今可行的应用程序,第二部分讨论使用同态加密作为构建块的结构,第三部分讨论FHE的当前限制。
2.1 FHE的实际应用
尽管速度仍然很慢(参见第5节),但同态加密已经被提出用于几个实际用途。本节列出了利用我们现有的技术可以想到的应用程序。
2.1.1 广告中的消费者隐私
尽管广告通常是不需要的,但当根据用户需求进行定制时,例如通过推荐系统或基于位置的广告,广告可能是有用的。然而,许多用户关心他们数据的隐私,在这种情况下他们的数据隐私就是他们的偏好或位置。有几种方法可以解决这个问题。
Jeckmans等人[43]描绘了一个用户想要推荐产品的场景。该场景是围绕社交网络设计的,在社交网络中,推荐是基于用户朋友的口味,并具有保密条件。所提出的系统应用同态加密,以允许用户在不暴露推荐者身份的情况下从朋友那里获得推荐。
Armknecht和Strufe[6]提出了一种推荐系统,用户在不知道内容的情况下获得加密推荐。该系统建立在一个非常简单但高效的同态加密方案之上,该方案是为此目的开发的。这允许计算在广告保持加密的同时为每个用户选择广告的函数。
在个性化广告的另一种方法[50]中,移动设备将用户的位置发送给提供商,提供商将定制广告(如附近商店的折扣券)发送回用户。当然,这可能允许提供商监控有关用户习惯和偏好的一切。然而,这个问题可以通过同态加密来解决——前提是广告来自第三方(或多个),并且不与提供商勾结。
2.1.2 医学应用
Naehrig等人[50]提出了一种场景,即患者的医疗数据以加密的形式(连续)上传到服务提供商。这里,用户是数据所有者,因此数据在用户的公钥下加密,只有用户才能解密。然后,服务提供商根据加密数据进行计算,这些数据可以包括血压、心率、体重或血糖读数,以预测某些情况发生的可能性,或者更一般地只跟踪用户的健康状况。这里的主要好处是允许基于各种来源的读数进行实时健康分析,而不必向任何一个来源披露这些数据。Lauter[45]描述了微软对心脏病发作预测的实际实现。
2.1.3 数据挖掘
从大型数据集中挖掘数据提供了巨大的价值,但代价是用户的隐私。虽然Yang, Zhong和Wright[64]经常被引用使用同态加密作为这个问题的解决方案,但该方案实际上使用了函数加密,这是1.2节中讨论的一个常见混淆。然而,应用同态加密肯定是一种可行的解决方案。
2.1.4 金融隐私
想象这样一个场景,一家公司拥有敏感数据和他们不想公开的专有算法,例如金融部门的股票价格预测算法。Naehrig等[50]建议使用同态加密以加密形式上传数据和算法,以便将计算外包给云服务。
然而,保持算法的秘密并不是同态加密所提供的,而是混淆电路研究的一部分(参见1.2节)。在完全同态方案中最接近的属性被称为电路隐私,但这只是保证输出不会泄露有关函数的信息,而不是可以加密函数本身。
同态加密提供了一个相关问题的解决方案。假设一家公司a拥有股票投资组合等敏感数据,而另一家公司B拥有对股票价格进行预测的秘密算法。如果A想要使用B的算法(当然是有价格的),要么A必须将股票投资组合透露给B,要么B必须将算法给A。使用同态加密,然而,A可以用电路私有方案加密数据并将其发送给B, B运行私有算法,只发回结果,结果只能通过A的秘密密钥解密。这样,B不了解A的数据,A也不了解使用的算法。
2.1.5 法医图像识别
B¨osch等[14]描述了如何外包法医图像识别。警察和其他执法机构正在使用类似的工具来检测硬盘驱动器、网络数据流和其他数据集中的非法图像。警方使用一个包含“不良”图片哈希值的数据库。一个主要的问题是,犯罪者可以获得这个数据库,检查他们的图像是否会被检测到,如果是,就修改它们。
该方案使用Brakerski和Vaikuntanathan[17]提出的某种同态加密方案来实现警察数据库加密的场景,同时公司的合法网络流量保持私有。该公司将经过散列和加密的图片数据流与警方创建的加密数据库进行比较。服务提供者对加密数据库本身一无所知,在给定的时间间隔或阈值之后,将临时变量发送给警察。
2.2 作为构建块的同态加密方案
同态加密方案可用于构建密码工具,如零知识证明、签名、MAC和多方计算实现。
2.2.1 零知识证明
Gentry在他的论文[28]中表明,同态加密可以用于构造小尺寸的非交互式零知识(NIZK)证明。用户想要证明对于一个布尔电路C比特π1、…、πt的令人满意的分配。NIZK证明包括生成公钥、加密πi和在这些加密上对C进行同态评估。附加了一个标准的NIZK证明,以证明每个密文加密0或1,并且计算加密1的输出。
2.2.2 计算外包
计算外包是云计算的第二大支柱,仅次于数据外包。用户希望将函数f的计算委托给服务器。然而,服务器可能是恶意的,或者只是容易出现故障,这意味着用户可能不相信计算的结果。用户希望有一个证明,证明计算是正确的,验证这个证明也应该比用户进行计算要有效得多。
Chung等人[18]使用完全同态加密来设计委托计算的方案,改进了Gennaro等人[26]的结果,而van Dijk和Juels[63]则研究了FHE单独解决云计算中的隐私问题的不可行性。
计算委托的一个例子是消息验证器。对数据集进行外包计算的用户可能希望检查返回值是否确实是正确的结果。标签应该与原始数据集的大小无关,并且只对私钥持有者可验证。Gennaro和Wichs[27]在完全同态加密方案的基础上提出了这样一种方案,可以认为是完全同态签名[10]的对称密钥版本。但是,它只支持有限数量的验证查询。
2.2.3 签名
Gorbunov等人[39]提出了一种水平完全同态签名方案的构造方法。该方案可以在签名数据上评估具有最大深度d的任意电路,并同态地产生短签名,任何人都可以使用公共验证密钥来验证该短签名。用户上传签名数据x,然后服务器对数据运行函数g,得到y = g(x)。此外,服务器发布签名σg,y来验证计算结果。
这项工作还引入了同态陷门函数(HTDF)的概念,它是签名构造的构建块之一。HTDF本身是基于小整数解(SIS)问题。Boneh和Freeman[10]给出了全同态签名的第一个定义。
2.2.4 多方计算
多方计算需要参与者之间的交互。Damgard等人[21]描述了如何在计算过程中使用某种同态方案来构造离线乘法。玩家在预处理阶段使用某种同态方案,但在计算阶段返回到更有效的多方计算技术。
2.3 FHE的局限性
在文献和直觉上,有几个应用程序允许完全同态加密作为解决方案。但是,在本小节中,我们将讨论FHE在现实场景中的三个主要限制。然后,我们给出了一些例子,所有这些例子都包含前两个局限性。
第一个限制是支持多用户。假设同一系统(依赖于计算中使用的内部数据库)有许多用户,他们希望保护自己的个人数据不受提供商的侵害。一种解决方案是提供商为每个用户提供一个单独的数据库,在该用户的公钥下进行加密。如果这个数据库非常大并且有很多用户,这将很快变得不可行的。López-Alt等[46]通过定义和构建多密钥FHE,为解决这一问题指明了方向。
接下来,对于涉及以同态方式运行非常大且复杂的算法的应用程序,存在一些限制。如今,所有的全同态加密方案都有很大的计算开销,它清楚地描述了加密版本中的计算时间与计算时间的比率。尽管大小是多项式,但这种开销往往是一个相当大的多项式,这大大增加了运行时间,并使复杂函数的同态计算不切实际。即使在未来应该找到一个非常有效的FHE,其他问题仍然存在。例如,对于电路,在对加密数据进行操作时,不存在中止算法的概念。在比较的情况下,这将需要运行本身就很大的完整电路。换句话说,某些机制似乎只是因为值仍然是隐藏的而变得更加重要。Goldwasser等人建议用图灵机代替电路来解决这个问题。
最后,FHE并不一定意味着秘密函数的评估。在前面讨论财务数据的适用性时,我们已经遇到过这种情况。本课题属于混淆研究。
3 定义
本节概述了FHE文献中使用的术语。我们的一些定义直接来自现有的论文,而另一些定义则被重新措辞,要么是因为没有令人满意的正式定义,要么是为了将这些定义纳入我们的正式框架;在第一种情况下,我们给出了引文。
我们从一个空间P ={0,1}开始,我们称之为明文空间,以及一个从明文元组到P的函数族F。我们可以把这样一个函数表示为输入上的布尔电路。如果我们用C表示这个电路,我们用普通函数C(m1, m2,…, mn)表示电路在元组(m1,m2,…,mn)上的求值。我们的第一个定义遵循Brakerski和Vaikuntanathan[16]。
定义1(C–求值方案)。设C是一组电路。C的C评估方案是概率多项式时间算法(Gen、Enc、Eval、Dec)的元组,使得:
Gen(1^λ,α)是关键的生成算法。它接受两个输入,安全参数λ和辅助输入α,并输出一个密钥三元组(pk,sk,evk),其中pk是用于加密的密钥,sk是用于解密的密钥,evk是用于求值的密钥。
Enc(pk,m)是加密算法。作为输入,它采用加密密钥pk和明文m。它的输出是密文c。
Eval(evk,C,c1,…,cn)是求值算法。它将求值密钥evk、电路C∈C和输入元组作为输入,这些输入元组可以是密文和先前求值结果的混合。它产生一个求值输出。
Dec(sk,c)是解密算法。它以解密密钥sk和密文或评估输出作为输入,并产生明文m。
这里,X表示包含新密文的密文空间(见等式(1)),Y表示求值输出的空间,Z是X和Y的并集。Z*包含由Z中的元素组成的任意长度元组。对于pk、sk和evk,密钥空间分别由Kp、Ks和Ke表示。公钥包含对明文和密文空间的描述。密钥生成算法Gen的输入以一元表示法给出,即1^λ。Gen还可以从空间auxs中获取另一个可选输入α,这是辅助输入,将在备注3中说明清楚。最后,C是允许电路的集合,即该方案可以求值的所有电路。
定义了这些空间后,算法的域和范围由下式给出
其中X∪Y=Z和A是一个辅助空间。注意,一般来说,求值空间可以与密文空间不相交。在本文中,我们将密文空间X视为加密的图像,将求值空间Y视为求值的图像。因此,Z不能包含不是加密算法或求值算法的可能输出的元素。正式地
值得注意的是,求值密钥通常也是公钥的一部分。通过以这种方式定义方案,并使用单独的求值密钥,我们并不是禁止pk=evk,而是断言它不是严格必要的。分离pk和evk正在成为一种标准定义[16,§3.1]。
备注1(密文解密)。Brakerski和Vaikuntanathan[17]提到,在加密算法的输出上运行解密算法并不是严格必要的:“……我们不要求密文ci本身是可解密的,只要求它们在同态评估后变得可解密。“他们指出,在解密之前,人们总是可以用一个空白电路(本质上是一个计算函数f(x)=x的电路)来求加密的密文,从而简化了解密算法的允许输入。从现在起,我们允许对新的密文进行解密,因为这似乎是一种更自然的方法,适用于大多数已知的FHE方案。解密算法可以对密文或评估进行操作(从密文空间和评估空间中获取值)。此选择消除了对空白回路的需要。然而,一般来说,这种区分是不必要的,尤其是当评估空间和密文空间相同时。
3.1 属性
这里给出了同态加密方案的属性。一方面,我们需要诸如正确性之类的东西,甚至将其称为加密方案,另一方面我们定义了诸如紧凑性和电路私密性之类的属性,这些属性排除了同态加密问题的琐碎解决方案。
定义2(正确解密)。C–评估方案(Gen,Enc,Eval,Dec)被认为是正确解密的,如果对于所有m∈P,
其中sk和pk是Gen(1^λ,α)的输出。
这意味着我们必须能够将密文解密为正确的明文,而不会出错。
定义3(正确评估,[16,Def.3.3])。C–评估方案(Gen,Enc,Eval,Dec)正确评估C中的所有电路,如果对于所有ci∈X,其中mi← Dec(sk,ci),对于每个C∈C,以及一些可忽略的函数ε,
其中sk和pk是Gen(1^λ,α)的输出。
这意味着,以压倒性的概率,对允许电路的同态评估的解密产生正确的结果。请注意,对于定义2和3,我们有意限制为X,而不是Y。这在第3.3节中得到了进一步的发展。
从现在开始,如果一个c -求值方案同时具有正确的求值和正确的解密属性,我们就说它是正确的。
定义4(紧凑性[62,Def. 3])。对于Gen(1λ, α)输出的任意密钥三元组(sk, pk, evk),任意电路C∈C,所有密文ci∈X,输出Eval(evk, C, c1,…, cn)不大于p(λ)位,与电路大小无关。
这意味着密文大小不会通过同态运算增长太多,并且输出长度仅取决于安全参数。这也排除了平凡同态方案,其中求值算法是身份函数(也就是说,它输出(C,c1,…,cn)),并且解密函数被定义为解密输入密文c1,cn,将适当的函数应用于相应的明文,并输出此结果[30]。
备注2(关于紧凑性)。Gentry最初的定义略有不同,可以非正式地解释为:如果存在一个“合理”长度的电路CD来计算解密电路,则该方案是紧凑的。这个定义依赖于解密电路的大小。然而,我们认为第一个定义依赖于Eval输出的长度——在他的工作中直观地给出——并在接下来的工作中用作紧凑性的定义[16,62],这提供了更好的理解。我们在第4.1节中进一步研究了这两个概念之间的关系(并正式陈述了后一个概念)。
在预期以下结果的情况下,我们引入了另一个最初由Gentry使用的定义,该定义将本节[28,Def 2.1.2]中迄今为止看到的所有定义分组。
定义5(紧凑求值)。如果C求值方案紧凑且正确,则该方案(Gen、Enc、Eval、Dec)会紧凑地求值C中的所有电路。
我们现在定义电路隐私。人们可能容易将电路隐私与电路混淆在语义上混淆,因为两者似乎都可以保持电路的秘密或私有。然而,电路混淆处理的是电路的隐藏。如果所使用的算法本身是有价值的并且应该是秘密的,那么这一点就很重要。相反,电路私密性表征了算法Eval和Enc的输出的分布。
定义6(电路私密性[28,Def. 2.1.6])。对于Gen(1^λ, α)输出的任意密钥三元组 (sk, pk, evk),对于所有电路C∈C,所有ci∈X,使得mi←Dec(sk, ci), 可以认为C - 评估方案 (Gen, Enc, Eval, Dec)是完美的/统计的/计算私有的电路,Z上的两个分布
两者都采用了每个算法的随机性,分别在统计上或计算上完全不可区分。
为什么这个定义意味着电路是私有的,可能不能立即弄清楚。从本质上讲,它指出,特定电路对密文求值的输出看起来像明文值v的加密输出,在这种情况下,由电路和相应的明文生成。因为v只是另一个明文(即v = C(m1, m2,…, mn)),很难确定它是如何生成的(难度等级从完美到计算)。
电路隐私在文献中也被称为“强同态性”[19,56],目前学界对电路隐私的准确定义仍存在轻微分歧。虽然我们保留了Gentry[28]给出的原始定义,但存在一个类似的稍微弱一点的概念,即函数隐私。重要的区别是,函数隐私只要求对加密数据上的不同电路进行评估,产生统计上接近、计算上接近或相同的分布。另一方面,电路私密性要求这些分布与新密文的分布相同
3.2 分类
并非所有同态格式都具有相同的性质。本文的这一部分探讨了定义,这些定义允许我们根据它们可以评估的电路对不同类型的方案进行分类和区分。
定义7(部分同态)。具有正确解密和正确求值的c -求值方案(Gen, Enc, Eval, Dec)称为某种同态加密方案(SHE)。
由于对密文的紧凑性没有要求,所以密文的长度可以随着每一次同态操作而大幅度增加。此外,允许电路的集合C由一些电路组成;这里没有要求这必须包括哪些电路。
定义8(水平同态[16,Def. 3.6])。c -求值方案(Gen, Enc, Eval, Dec)被称为水平同态方案,如果它需要一个辅助输入α = d到Gen,它指定了可以求值的电路的最大深度。进一步的要求是正确性、紧凑性和求值输出的长度不依赖于d。
除了电路深度之外,对C没有任何限制。如果我们要求C是深度最多为d的所有二进制电路的集合,则该方案被称为水平全同态。
在某种程度上和水平同态方案之间的差异是一个潜在的混淆点。某种程度上同态加密可以处理的电路深度可以通过参数选择来增加——这通常意味着密文大小将随着允许的电路深度而增加。对于分级同态加密方案,最大深度是一个输入参数,密文的长度不取决于它。
备注3。在定义1中引入了参数α,专门用于指定可以求值的电路的最大深度。因此,当我们后来假设α是λ中的多项式时,这是合理的,因为在所有现有的方案中,α=d是一个常数。然而,我们的目标是尽可能使用最通用的框架,因此我们也允许α可能具有不同的功能并且大得多的情况。
定义9(全同态[16,Def.3.5])。全同态加密方案是一种紧凑、正确的C求值方案(Gen、Enc、Eval、Dec),其中C是所有电路的集合。
这个定义意味着该方案可以计算任意大小的任何电路,在设置参数时不需要知道电路的大小。
3.3 分阶段求值
有时我们想要在两个或多个阶段中计算一个结果,其中一个阶段的结果可以用作后面阶段的输入。在这种情况下,我们想对Eval输出的密文和Enc输出的密文求值。
正确求值的定义(定义3)仅保证算法Eval在其输入密文位于X时工作,X是可以由Enc算法输出的一组新密文。我们希望研究在给定求值输出时,在哪些条件下我们可以希望求值算法能够工作(我们在第4.2节中提出了含义)。
分阶段求值被称为i跳同态加密([56,第2.2节],[34,第1.4节]),其中i要么是整数,要么可以用“multi”、“poly”或∞代替(见下文定义12、13和14)。我们现在定义分阶段计算(也称为分阶段计算)。
宽度为n的i级中的计算Ci,n由一组电路{Ckl}定义,这些电路由1≤k≤i,1≤l≤n索引,其中Ckl具有kn输入。给定初始明文m01,m02,…,m0n,我们计算
对于1≤k≤i和1≤l≤n,Eval和Dec之后的分阶段计算的输出为mi1、mi2,min.用向量m0表示初始明文,用向量mi表示输出明文,我们引入了符号向量mi=Ci,n(向量m0)。
设(pk,evk,sk)是Gen输出的关键三元组,设c01,c02,c0n是来自X的密文序列。递归计算1≤k≤i,1≤l≤n的密文{ckl}
加密的分段计算的输出是密文序列ci1、ci2、,cin。用向量c0表示新密文(fresh ciphertexts),用向量ci表示输出密文,我们引入具有多个输出的Eval的自然符号
备注4。对阶段计算稍微狭义一点的观点[34,56]是,只有一个阶段输出的密文才能被下一个阶段输入。由于通常认为可以将恒等函数应用于密文,因此这个公式通常并不弱于我们更一般的观点。
设向量c=(c1,…,cn)是密文元组,向量m=(m1,…,mn)是明文元组,使得在密钥sk下,对于1≤k≤n,Dec(sk,ck)=mk。然后我们引入自然符号
定义10 (i-Hop正确性)。设pk, evk, sk为Gen(1^λ)输出的密钥,设Ci,n = {Ckl}为任意分阶段计算,其中n是λ的多项式,向量c0 = (c01,…c0n)在X^n中。一个c -求值方案(Gen, Enc, Eval, Dec)是i-跳正确的,如果
其中ε是一个可忽略的函数,并且概率取决于Eval算法的调用。
虽然之前对i-跳(和多跳,见下文)的定义隐含地使用了像i-跳正确性这样的结构,但在文献中从未明确定义过。此外,我们允许Eval失败,尽管只有可以忽略不计的概率。
在图2中,演示了i = 2和n = 2的分阶段求值,其中Eval的每次调用都会输出n个结果,但并不是所有结果都必须在Eval的下一次迭代中使用(用虚线箭头表示)。此外,Eval在整个过程中可能使用i·n = 4个不同的电路。
现在我们已经定义了i-跳正确性,我们可以定义i-跳, multi-跳, poly-跳和∞-跳。类似的i-跳和multi-跳的定义可以在Gentry等人[34,Section 1.4]和Rothblum[56]的工作中找到。主要的区别是,我们允许来自以前的Eval算法以及新的密文的输入。前面的定义只允许直接前任Eval调用的输出作为输入。
定义11 (i-跳,[34,56])。设i∈n,如果j-跳正确性对所有j都成立且1≤j≤i,则c -评价方案(Gen, Enc, Eval, Dec)为i-跳。
备注5 (FHE和i-跳)。完全同态和i-跳之间的关系是另一个可能引起混淆的原因。人们可能会期望,如果有可能计算任意电路(完全同态加密),就有可能连续执行任意多个电路。然而,事实并非如此。Eval的输出可能看起来与新的密文非常不同,并且不能保证它们形成Eval的有效输入。例如,假设我们有一个1跳完全同态加密方案,电路C以c1,…, cn作为输入,输出c1’,…, cv’,和一个电路C’,它把c1,…, cv作为输入,输出c1’,…, cw’。如果我们运行Eval(evk, C’◦C, c1,…, cn)(其中C0◦C是两个电路的连接),这当然是一个有效的操作,因为我们正在评估一个电路(不要与阶段计算混淆)。然而,如果我们首先运行Eval(evk, C, c1,…, cn),得到c1’,…, cv’,然后尝试运行Eval(evk, C’, c1’,…, cv’), 1跳方案不支持,因为c1’,…, cv’将不是有效输入。这一观察结果对于两个独立实体对一些加密数据进行计算,第二个实体计算第一个实体的输出的应用程序非常重要。在这种情况下,第二个实体无法访问新的密文,并被迫对第一个实体给出的计算输出进行操作。这在单跳方案中是不可能的。
跳点不是被一个整数所限定,而是被某个依赖于λ的多项式所限定,这将我们引入下一个定义。
定义12 (multi-跳,[34,第1.4节],[56])。设p是某个多项式。如果对于所有j,且1≤j≤p(λ), j-跳正确性成立,则我们说c -求值方案(Gen, Enc, Eval, Dec)是多跳的。
定义13 (Poly-跳)。设p是某个多项式,且设α∈A。如果j-跳正确性对所有j都成立,且1≤j≤p(λ,α),则c -求值方案(Gen, Enc, Eval, Dec)是Poly跳的。
据我们所知,这是第一个提出的poly跳定义。这似乎是对i-跳和多跳现有定义的自然扩展。
这样,辅助输入可能会影响密钥的数量,从而影响可能计算的数量。
定义14(∞-跳)。我们说一个c -求值方案(Gen, Enc, Eval, Dec)是∞-跳,如果对所有j都满足j-跳正确性。
同样,据我们所知,∞-跳还没有在文献中提到。像poly-跳一样,∞-跳是现有定义的自然扩展。它允许无限跳数。因此,这对FHE有直接的影响。有关此主题的进一步讨论,请参阅第4节。
备注6(跳数和分类)。对于跳点正确性的概念,我们不需要一个完全同态的格式——这个定义适用于3.2节中的任何同态格式(有些同态、水平同态、水平完全同态和完全同态)。
备注7(poly-跳vsmulti-跳)。poly-跳和multi-跳的区别是什么?如果需要一个安全参数来输出公钥,那么安全参数的任何边界也是公钥的边界。如果用户不能独立地(或在某种程度上独立地)增加公钥的大小,这是有意义的。然而,这是定义1所允许的,作为密钥生成算法的某种形式的辅助输入。没有什么可以阻止辅助输入定义公钥大小,而不依赖于安全参数。这与poly-跳有关,因为在实践中,水平同态方案可以通过拥有几个密钥对来实现,通过这些密钥对可以执行加密操作(参见5.1节获得更详细的解释)。这意味着公钥的大小与此密钥数量相乘。当然,如果密钥对的数量是λ的多项式(或者更一般地说,如果α是λ的多项式),那么poly-跳和multi-跳是相同的。
4 含义
现在我们详细介绍上一节中给出的定义的含义。首先,我们回到紧凑性的问题及其两个看似独立的定义。
4.1 巩固紧凑性
如上所述,定义4与Gentry[28]最初给出的紧凑性定义之间存在差异。本节将致力于协调紧凑性的这两种定义。下面给出了Gentry给出的定义,以及紧求值的定义,这对引理1很重要。
备注8。在这里,许多结果只有当密钥生成算法的辅助输入α多项式地以λ为界时才成立。对于所有有意义的应用程序(以及迄今为止已知的所有同态加密方案),这似乎都是如此,但我们不能正式保证它(另见注释7)。因此,我们明确地说明了什么时候我们需要这个声明才能保持。
定义15(G-紧凑[28,定义2.1.2])。如果存在多项式f,则C–求值方案是G-紧凑的,使得对于安全参数λ的每个值,解密算法可以表示为大小最大为f(λ)的电路CD。
定义16(G-紧凑求值[28,Def.1.3])。如果C–求值方案(Gen、Enc、Eval、Dec)是G-紧凑的,并且对所有允许的电路都是正确的,则该方案被称为G-紧凑求值C中的所有允许的回路。
回想一下,电路的大小就是它所拥有的门的总数。将电路描绘为有向图,这是所有顶点的和减去输入顶点的和[44,§1.2,p.13]。目前尚不清楚紧凑性的定义是否与我们之前给出的定义相同。
定理1设α由λ中的一个多项式定界。C–求值方案(Gen,Enc,Eval,Dec)G-紧凑求值C当且仅当该方案紧凑求值C。
证据见附录A。
定理2具有完美电路私密性的C–求值方案(Gen,Enc,Eval,Dec)暗示了当α在λ中多项式有界时的紧凑性。
证据见附录B。
4.2 FHE和跳跃结果
我们现在给出了与FHE方案和跳跃正确性有关的结果,假设α由λ多项式定界。图3显示了这些结果的全面概述,也包括定理2。该图如图1所示,其中有两种不同类型的箭头。简单的黑箭头是一个要求,因此例如定理4具有完美电路私密性和全同态两个要求。每个定理都需要所有的要求。第二种箭头类型是双线的,这代表了定理的含义。至于定理4,给定的要求产生了一个无限跳方案。
定理3统计电路私有的全同态加密方案(Gen、Enc、Eval、Dec)是多跳的。
证据见附录C。
我们现在研究完全同态和i-跳之间的关系,注意到一个部分同态加密需要什么属性才能变成万全同态加密。首先,我们研究了全同态方案在哪些条件下允许无限阶段的计算(∞-跳):
定理4一种具有部分同态性的加密方案(Gen, Enc, Eval, Dec)是一种完美电路私有的∞-跳加密方案。
证明。由于该方案具有完美的电路私密性,因此Eval的输出对新加密的分布是相同的。这意味着它们具有完全相同的形式(X = Y = Z)并且能够正确解密。所以它们是密文,构成了Eval的有效输入。无论我们多频繁地应用evaluate,这都是成立的,因为输出总是与输入相同的形式。
下面的定理考虑了另一个方向——当一个∞跳方案是完全同态的。
定理5 C中带有NAND的完全电路私有和∞-跳的某种同态加密方案(Gen, Enc, Eval, Dec)是完全同态的。
证明。由于该方案具有良好的电路私密性,根据定理2,该方案具有紧凑性。因此,我们所需要证明的是,该方案可以计算任何电路。假设情况并非如此,则存在一个电路C,该方案无法正确计算。但我们可以将C表示为一个仅由nand门组成的电路。由于方案为∞-跳,且NAND∈C,所以无论这个输入的求值迭代是什么级别,我们都可以正确地对对应输入上的每个NAND门求值。这样,我们就找到了一种用方案对该电路进行正确求值的方法,即C∈C。这与我们的假设是矛盾的,从而表明该方案是完全同态的。
推论1完全电路私有且NAND∈C的某种同态加密方案(Gen, Enc, Eval, Dec)是完全同态的。
证明。通过定理2和定理4,然后定理5。
5 现有的方案
在本节中,我们简要介绍现有的完全同态加密方案。在金特里的突破之前,朝着完全同态的方向只取得了有限的进展。Fellows和Koblitz的Polly Cracker[24]是完全同态的,只是它缺乏紧凑性。无论如何,这都不是为了实用。Albrecht等[2]表明几乎所有SHE方案都是Polly Cracker的变体。Boneh-Goh-Nissim方案[11]是紧凑的,但只能处理单个乘法。显然,根据定义9或FHE[28]的当代处理,这些格式不是完全同态的。
表1列出了各种著名的完全同态加密方案,从Gentry的2009年方案开始。对于每一种方案,表中都提到了基本的计算假设(如下所述)以及渐近或具体运行时的指示。
5.1 自举和替换
在第一个完全同态方案的发展过程中,一个关键的概念是Gentry的自举技术。基于Gentry蓝图的方案是基于噪声的,这意味着明文被噪声隐藏,可以通过解密去除噪声。但是,这种噪声会随着每次同态计算而增加,一旦超过一定的阈值,解密就会失败。
为了克服这个问题,Gentry引入了加密的概念,其工作原理是重新加密密文(使其成为双重加密),然后通过使用解密电路对双重加密的明文和加密的解密密钥进行同态计算来去除内部加密。只要评估算法能够处理解密过程,再加上一个门,就可以在评估感兴趣的电路方面取得进展。
定义17(可自举)。如果一个c -求值方案能够同态地计算它自己的解密电路加上一个额外的NAND门,那么它被称为可自举的。
这个非正式的定义本质上抓住了文献[28]中更精确的定义。现在的问题是:在自己的公钥下发布秘密密钥的加密是否会损害安全性?如果我们假设在其对应的公钥下发布密钥的加密是安全的,我们实现了完全同态加密甚至i-跳[28,62,17,58]。这种假设被称为循环安全。但是,如果循环安全性不成立,那么一种可能性是使用公钥/密钥对链,其中密钥总是在下一个公钥下加密。这允许部分同态方案变成水平同态,其中水平取决于密钥对的数量。
另一种实现同态加密的方法是由Brakerski等[15]提出的。挑战仍然是如何管理噪声,但这一次是通过降低密文空间的模量和噪声来实现的。
一个安全参数决定了模数可以有多小,它给出了级别数量的界限。这一系列工作产生了原生水平同态方案[16,15,55]。然而,作者通常注意到,可以将自举作为一种优化,以及一种获得全同态i-跳方案的方法,再次假设循环安全性。
5.2 安全性假设
我们现在简要概述了现有方案所基于的问题。形式定义通常直接取自相应的论文,但尽可能通过省略参数来简化。Ajtai[1]对其中许多问题进行了研究。
下面的大多数问题都可以归结为最短向量问题(SVP)或最接近向量问题(CVP),这非正式地要求玩家分别提供格中最短的可能向量和最接近点的向量。这些问题也有决策变异。例如,GapSVPγ是证明有一个向量比1短,或者所有向量都比γ长的问题。此外,我们还提到了最短独立向量问题(SIVP),它本质上是计算只有短向量的格基。
我们首先考虑“带误差学习”(Learning With Error)问题家族。所有这些问题都存在于搜索和决策变体中,就像计算Diffie-Hellman和决策Diffie-Hellman问题一样。
LWE:[53]带误差学习问题是“带噪声学习奇偶性”问题的推广。
PLWE:[16]多项式LWE问题是带误差环学习问题(RLWE)的一个变体,与DLWE密切相关。
RLWE:[49]这与PLWE是相同的问题,其中f(x)=xd+1,d=d(λ)是2的幂。
在误差项中也存在一种具有增强数据的变体,称为增强LWE(Augmented L WE)。对于某些参数,A-LWE和LWE[8]一样难。
Regev[53]存在从LWE到SVP和SIVP的量子减少。众所周知,搜索和决策变体同样困难[47]。
SSSP:[28]这被称为稀疏子集和问题。在他的原创作品中,Gentry“压缩了解密电路”,这减少了解密电路的大小,使其位于该方案可以同态评估的电路集中。思想:密钥被写成一些元素的总和,这些元素被“隐藏”在一组更大的元素中。这个大集合成为公钥的一部分,而私钥包含一个指示向量,指示哪些元素属于较小的集合(即,与私钥相加)。这为对手提供了有关密钥的信息,因此我们必须确保它不能从公钥中提取。SSSP将这一要求正式化。由于所有遵循Gentry蓝图的论文都使用这种挤压技术,SSSP问题在表格中出现了好几次。其正式定义如下。
假设S和T是两个自然数,且S<<T,设q为质数。挑战者设置b←{0,1}。如果b = 0,则生成一个集τ,其基数为|τ| = T,由[−q/2, q/2]中的均匀随机整数组成,使得存在一个基数S的子集,其元素和为0 mod q。如果b=1,则生成集τ时不需要此要求。挑战在于猜测b。
BDD:有界距离解码问题与最近向量问题相同,只是对于BDD,可以保证向量t非常接近格。最近向量问题是格理论中的一个问题,它非正式地要求格上最接近给定向量t∈Rn的点。
存在量子减少,证明GapSVP、BDD和SIVP问题同样困难,以及SVP和CVP[53]之间的等价性。然而,SVIP和BDD之间的等价性仍然是一个悬而未决的问题。
AGCD:[41]近似最大公约数问题是给定一个数p的近似倍数,以找到该数p。给定形式为xi=qi·p+ri的多项式多个数,其中ri远小于qi·p,输出p。
决策变量包括一个额外的整数z=x+b·α。这里,x与xi的形式相同,b为0或1,α来自一个适当的区间,具体取决于参数。任务是找到b。
PCP:多项式余弦问题[58]是一个决策问题,可以非正式地描述为必须决定给定值是对小多项式mod p的计算,还是从Fp中随机采样。更正式地说,我们可以在一个有挑战者的场景中描述该问题:
挑战者首先选择b← {0,1}随机并运行该方案的密钥生成算法,该算法输出一个素数p和一个值α∈Fp,该值是在一些约束条件下导出的,我们在这里不讨论这些约束条件。如果b=0,挑战者随机选择系数在一定范围内的多项式R(x),并计算R=R(α)mod p。如果b=1,挑战者选择R← 随机Fp。
现在的问题是:给定(p,α,r),决定b=0还是b=1。
值得注意的是,这个问题与其他问题的不同之处在于,它是根据相应的方案定义的,这使得它不那么自然,也更难概括解释。PCP问题与Gentry[28]定义的理想余弦问题有关。
5.3 实现
可以公平地说,FHE大多存在于理论上。然而,正如上表所建议的那样,也存在一些实现。其中最重要的是Halevi和Shoup的HElib[40],它实现了BGV方案[15]以及优化,如密文打包[59],它允许在单个密文中编码多个明文。2014年,自举技术被引入库中[40]。然而,在撰写本文时,安全的高斯随机性分布尚未实现,因此没有HElib的安全性证明。
IBM、微软和斯坦福/麻省理工学院团队在2015年iDASH安全基因组分析大赛上使用了该文库[45]。存在另一个名为FHEW[22]的库,该库基于Ducas和Micciancio[23]的FHE方案。
结论
在本文中,我们对同态加密领域中的定义进行了简化和结构化。我们研究了现有的应用程序是否需要同态加密来解决其理论和实践中的问题。此外,我们回顾了当前的技术现状,并对其进行了系统的介绍。
还有很多工作要做。目前的方案在日常应用中还有一定的实用性。因此,我们可以期待继续关注提高现有计划的效率和构建新的高效计划。事实上,考虑到一些应用程序不需要完全同态加密,一个重要而有前途的研究方向是确定哪些应用程序将受益于适当的同态加密方案,然后为各自的用例定制方案。
然后是更具理论性的工作路线。虽然已经提出了群同态加密方案的框架[5],在某种程度上也提出了FHE[4],但对于完全(或至少在一定程度上)的同态加密方案,缺乏完全通用的等效结果。如第5节所述,所有超越简单群同态运算的安全方案都是基于噪声的,其中一个主要挑战是控制噪声。事实上,这通常是全同态加密方案效率显著降低的原因。关于部分/完全同态加密方案的统一观点对于更好地理解预期的安全性和可能的设计空间可能非常有用。
总而言之,FHE是一个有趣且具有挑战性的研究领域,具有巨大的潜力,还有很多工作要做。然而,如果研究(特别是效率的提高)以目前的速度继续下去,我们相信现实世界的应用可能指日可待。