当人们想到加密时,首先联想到的通常是静态数据加密和传输中的数据加密。静态数据加密允许将数据存储在加密的硬盘、可移动设备或云数据库中,确保只有合法的所有者才能查看或编辑明文内容。而传输中的数据加密则保证了通过互联网传输的数据仅能被指定的接收者访问,即使数据经过公共路由器或通道传输。这两种场景都依赖于加密,并且附加了数据完整性保证,即在传输过程中数据未被恶意攻击者篡改。这种加密方式被称为认证加密:一旦数据被加密,链路中的任何人都无法推断出任何一位数据(机密性),同时也无法在不被检测到的情况下篡改密文(完整性/真实性)。
然而,一些协作性使用场景需要在密文上进行非平凡的处理。这涉及隐私保护技术或使用中的加密,完全同态加密(FHE)就是其中之一。举个例子,在云端的电子投票中,选民可以加密他们的选票,然后中间的某个实体会汇总所有选票并统计投票结果,最后只公布最终结果。然而,使用认证加密时,中间实体需要解密所有选票才能进行这样的计算,这就会使得每张选票的内容被明文查看,非常麻烦。理论上,我们可以对选票进行洗牌(一些电子投票协议实际上就是这样做的),但与纸质选票不同,传统的加密机制在保证完整性的同时,也使得很难将加密选票与其发送者的身份解除关联。
在电子投票方案中,可以为统计选票的实体添加一个硬件隔离区,这就是可信执行环境(Trusted Execution Enclave)的目标。这些隔离区可以使攻击者更难与该实体交互。然而,硬件的故障可能会导致解密密钥泄露,并且与软件错误不同,硬件设计漏洞无法轻易修补。
为了解决这个问题以及其他类似的场景,我们可以使用完全同态加密(FHE)。FHE是一种特殊的加密形式,它允许在不解密的情况下对密文进行函数计算,并直接得到该函数输出的加密结果。
大多数情况下,待评估的函数f是公开的,因此将f(x)的加密转换为明文结果的处理步骤是公开的,可以在云端完成,无需涉及任何秘密信息。
该图展示了电子投票的三种场景:在最左侧的图像中,一个受信任的实体负责对各个选票进行洗牌和解密,然后公布它们的总和。在这种情况下,我们必须信任执行计算的实体,以确保选民隐私得到保护并且选票被正确计数。中间的图像展示了使用可信执行环境(Trusted Enclave)来执行相同的计算,这种环境被信任能够提供完整性和隐私保证。在最右侧的图像中,使用了同态加密:加密的选票可以在解密之前(公开地)进行相加操作。E( ) 表示加密操作,而 D( ) 表示解密操作。
完全同态加密(FHE)具有紧凑性,这意味着输出密文的位大小及其解密难度仅取决于明文结果的比特数,而不取决于所执行的计算链。这就排除了那些简单地将输入密文 x 与函数 f 的源代码连接起来的非紧凑型密码系统,这种系统让接收方在解密 x 后再应用 f,承担所有计算工作。
FHE外包通常被视为可信执行环境的替代方案,基于数学问题的复杂性而非实际的物理屏障。因此,FHE完全不受被动侧信道攻击或云主机其他腐败行为的影响。想象一下,某人需要外包一些计算任务,但数据非常敏感。在这种情况下,如果其他人可以在虚拟机上拥有最高权限,他们可能会犹豫是否使用云虚拟机。他们也可能对在像SGX这样的可信执行环境中运行任务持保留态度,因为云主机的CPU和内存始终在被监控负载、功率、温度等,或许可以从这些测量中提取出一些信息。FHE的优势在于,它保证要提取任何单一信息位,都需要破解一个后量子数学问题,而与我们能够收集到的任何测量数据无关,这可能会让人感到放心。
虽然这种方案提供的机密性可以防止攻击者在没有密钥的情况下读取任何信息位,但FHE的通用可塑性则允许攻击者在计算过程中任意翻转计算结果的比特位:在电路中,这相当于主动侧信道攻击,攻击者被赋予了一个可以瞄准任意比特位的神奇激光束。起初,这听起来可能很可怕,但在FHE中,这些攻击对应于不诚实的同态操作执行,可以通过在计算中增加复制或冗余来避免这些攻击。
完全同态加密(FHE)通常以公钥的方式呈现,主要包含以下几种密钥:
解密密钥(Decryption Key):这是加密系统的主密钥,所有其他密钥都可以从中派生。解密密钥通常在本地生成,从不传输。只有解密密钥的所有者才能解密FHE密文。加密密钥(Encryption Key):在公钥模式下,当生成初始密文的方不是解密密钥的所有者时,这个中等大小的密钥通常由随机的零加密组成。由于FHE支持仿射函数,这种加密方式足以加密任何消息。评估密钥(Evaluation Key):这个密钥应提供给任何需要对密文进行函数评估的方。这个密钥可以像任何公钥一样安全地发布或传输。评估密钥的大小从空到非常大不等,具体取决于要评估的函数是线性的还是任意的。
解密密钥的所有者是加密系统中最敏感机密的拥有者。这个人负责确保所执行的同态操作链是合法的,并确认最终的密文是安全可解密的,之后再解密得到明文结果。如果在操作链中引入了恶意操作,解密密钥在解密时可能会泄露。幸运的是,同态操作可以公开进行,并且可以进行验证。
完全同态加密(FHE)场景在本节中,我们将描述几个可以使用FHE的场景,并讨论每种设置的优缺点。外包模式
在下图中,橙色的钥匙象征着解密密钥(及其所有者)。FHE密文由与解密密钥相同颜色的锁表示。贡献私有数据的一方用圆柱体表示:在这里,只有Alice贡献了私有数据。在Bob的一方,评估函数和评估密钥是公开的,计算过程用绿色的框表示,可以确定性地进行。每个人都可以重现计算过程,并检测声称的输出密文是否正确。
这是历史上第一个被公布的FHE使用案例。它旨在将云计算转变为类似于安全隔离区的私有计算,但基于密码学安全而非硬件安全。在这种设置中,Alice拥有一些私有数据,但计算能力有限。Bob模拟一个具有更大计算能力的云实例,但他不提供任何额外的私有数据。Alice可以通过加密输入来外包计算,Bob则以同态方式评估所需的(公开的)函数,然后将加密结果返回给Alice。
根据当前的硬件能力,这种外包模式在实际应用中仍然有些慢——在非线性使用案例中,我们通常可以计算出运行时间的开销系数为100万,内存开销为1000倍。然而,FHE硬件正在开发中,以缩小这一差距,例如Darpa DPRIVE项目或CryptoLight。
目前,外包模式在实际中主要用于PIR(私有信息检索)场景,其中服务器(Bob)拥有一个大型的公共数据库,客户端(Alice)发出查询,而被查询的索引应保持私密。这类PIR方案极大地受益于同态加密操作的线性和紧凑性,而电路的小乘法深度则使计算成本保持在合理范围内。
该表总结了外包模式的优缺点。
两方计算模式
该图使用与之前相同的颜色编码。这次,Bob 用一些私人数据参与了计算。 Bob 这边的计算不再是公开可验证的,用红色框表示,这种模式应该仅限于诚实但好奇的用例。
在这个新设置中,唯一的区别是 Bob 使用一些私有数据参与计算。在这种情况下,FHE 是一个很好的两方计算解决方案,只需最少的通信,并在查询器端提供强有力的保证:Bob 对 Alice 的数据一无所知,而 Alice 则了解计算结果。
这种情况的一个潜在应用是百万富翁问题,其中爱丽丝和鲍勃是两个百万富翁,他们想知道谁更富有,但又不想向对方透露自己的财富。此问题的解决方案用于电子商务应用程序。
聚合模式
这是外包模式的改进,来自许多参与者的数据可以以紧凑的方式聚合(从某种意义上说,输出不会随着参与者数量的增加而增长)和公开可验证的方式。典型用途包括联合学习和电子投票。
客户端-服务器模式
此设置是两方计算模式的改进,其中计算方现在向拥有自己的密钥的多个客户端提供安全计算服务。例如,FHE 可以用作私有模型预测服务(例如,具有私有模型和输入的 ML 服务):服务器具有私有模型(私有但以明文形式),每个客户端都有自己的数据并希望运行预言。结果,每个客户端都使用自己的密钥检索自己的加密预测。
如何确保同态加密计算的函数是合法的?在同态加密(FHE)中,确保计算的函数合法性通常在协作场景下更容易实现,因为每个参与者都有动机诚实地遵循协议。例如,FHE可以用于在两个不同国家的同一集团内的两个法律实体之间计算统计数据。法规如《通用数据保护条例》(GDPR)允许发布一些统计数据,但通常禁止将所有个人数据集中在同一地点。在这种情况下,使用FHE是可行的,所有参与者都有动机诚实地遵循协议。
在非协作场景中,确保相关函数被正确计算的最简单方法是引入冗余。例如,在外包和聚合场景中,同态计算是完全公开的,并且可以是确定性的。只要两个或多个独立实体最终生成完全相同的输出密文,计算就被认为是正确的,结果也可以安全解密。冗余越多,对结果的信心越高,但这通常需要在效率上进行权衡。
此外,当计算方通过数字签名来证明FHE结果的有效性时,所有人都可以重新追溯同样的FHE计算并检查证明是否有效。FHE计算方的任何作弊企图都可以被公开发现,并与公开可验证的证书关联,这种模型称为强隐蔽安全模型(strong covert security model)。
完全同态签名(Fully Homomorphic Signatures)是另一种验证计算正确性的方法,无需独立的验证者,但通常需要更多的资源。
如何确保最终接收者只解密最终结果而非中间变量?确保最终接收者只解密最终结果而非中间变量的最简单方法是确保解密密钥的所有者无法访问任何中间密文。
在两方或客户端-服务器场景中,例如Alice加密输入,Bob在密文上进行计算并将加密的输出传回Alice,在这种情况下,Alice显然只能解密结果,无法访问任何其他变量。
在云端聚合场景中,如电子投票,许多参与者在公共云上发送加密选票时,会使用另一种技术:解密密钥通常不会分配给单一接收者,而是通过秘密共享在多个解密权限成员之间分配。在这种情况下,解密只能通过执行多方计算来触发,该计算涉及权限成员之间的在线通信。如果有一名成员拒绝解密某个密文,则解密将无法进行。这确保了只有经过所有权限成员同意的密文才能被解密。
同态加密的构建模块同态加密有三种类型:部分同态加密(PHE)、分层同态加密(LHE)和完全同态加密(FHE)。部分同态加密仅允许我们计算有限的函数集(例如仅求和、仅线性函数、仅双线性函数),而分层和完全同态加密则可以评估任意电路,或者等价地评估控制流与数据无关的函数。对于LHE,加密参数依赖于函数的复杂度,并且随着电路复杂度的增加,密文和密钥的大小也会增大。而FHE方案允许在给定参数(即给定密钥和密文大小)的情况下,评估任何可以用算术或二进制门表示的电路函数。与LHE不同的是,即使评估的电路越来越复杂,该方案的参数(以及密钥和密文)也不会变大。
换句话说,当被问及某个明文电路是否可以同态运行,以及运行的成本(时间和内存开销)时,PHE可能会给出否定的答案。LHE会给出肯定的回答,但对于复杂电路可能会设定任意高的成本。而FHE同样会给出肯定的回答,并且在明文电路尚未指定之前,它已经提供了密钥、加密和解密算法,以及如何同态评估一组通用门的方式。因此,FHE是唯一保证同态评估的内存和运行时间始终与原始明文电路成正比的模式。为了实现这一点,目前已知的所有FHE方案都处理带有噪声的密文,随着计算的进行,这些密文的噪声会越来越大。为了避免噪声溢出到计算中并导致解密错误,这些方案会定期执行一种非常耗时的操作,称为“自举”(bootstrapping),将噪声降低到可控水平。在系列博客的第二篇文章中,我们将深入探讨每种方案的具体细节、自举过程以及如何通过FHE编译器最小化噪声和其他成本。
声明:
本文转载自Cryptography Caffe,版权所有归原作者 [Nicolas Gama 和 Sandra Guasch] 所有。如对转载有异议,请联系 Gate Learn 团队,他们将及时处理。
责任声明:本文中表达的观点仅代表作者个人意见,不构成任何投资建议。
文章的其他语言版本由 Gate Learn 团队翻译,除非特别说明,严禁复制、分发或抄袭翻译文章。