FHE愿景:从https(传输过程数据加密)到httpz(端到端加密)的新一代互联网协议。(zama)
本文为阅读《SoK: Fully Homomorphic Encryption Compilers》记录。
1.是什么使得开发FHE应用程序具有挑战性?
每个FHE方案都提供了一组新的配置和性能权衡,而要获得最先进的结果,需要对底层方案高度熟悉。并且FHE强加了一种根本不同的编程范式,因为需要独立于数据的程序、高效的解决方案经常需要复杂的矢量化方法。以下几点是开发人员目前面临的关键工程挑战:
-
参数选择:FHE引入了计算特定参数的额外挑战,例如对于复杂的计算需要更大的明文模和密文模,来避免溢出或噪声问题。然而随着密文模和明文模参数的增长,LWE问题变的容易,所以需要对密文维度也要增长才能满足安全。现安全参数选择的方式有如下几种:
---查表:基于标准化工作提供的不同安全强度下参数设置表来设置。然而这些参数仅是保守估计,并不高效。https://homomorphicencryption.org
---给定密文维度n,选择可以正确解密计算结果并达到预期安全强度的最小q。然而,有效地计算最小q仍然是一个悬而未决的挑战。虽然有些方案存在对密文噪声增长的分析,但有时会给出更保守的参数。https://eprint.iacr.org/2019/493
---业界给出的方案:逐步减少q,直到计算某些代表性输入值无法正确解密为止。然后在1中查找安全阈值。
-
编码:对于AES等加密方案,开发人员通常不必考虑底层加密方案的明文空间。只要消息可以序列化为二进制字符串,然后按规则填充即可。然而FHE中,明文空间语义决定了同态计算的效果。而且这些语义往往与倾向于使用的应用程序语义不完全匹配。
-
数据无关计算:FHE计算是独立于数据的,否则将违反隐私保障。因此,FHE计算经常被概念化为电路,即通过导线连接的门。无论输入的值是多少,执行都遵循相同的步骤。如何模拟if/else分支。
-
SIMD批处理:SIMD批处理是第二代FHE方案中主要性能突破点之一,即将许多不同的消息打包到单个密文中,由此实现单计算的并行化。利用SIMD批处理来减少延迟需要新的编程范式和算法,例如,如果我们将每个矩阵对角线编码为SIMD向量,而不是按行或按列编码,则矩阵向量乘积可以更有效地表达。对于不同的计算类型,怎样的SIMD编码使计算效率更快值得思考。
-
密文维护:不同的FHE方案使用各种解决方案来管理同态计算过程中密文噪声的增长。这些方案,如relinearization, mod-switching/rescaling or bootstrapping,必须由开发人员在程序代码中明确指定调用,以便用最佳方式管理噪声增长,获得最佳性能。何时调用密文维护方案值得设计应用程序时思考。越少的调用将带来越高的性能。文献17努力实现这一过程的自动化。https://arxiv.org/abs/1912.11951
2.如何使用现存工具实现高效FHE应用?
-
现存FHE工具图:
---FHE库:实现了特定的方案,并提供了略高级别的API,例如keygen、encode、encrypt、add、mult
---FHE编译器: 通过提供一种更高级的语言来抽象参数选择、加密和解密等方面,开发人员可以使用这种语言来指定他们的计算。
-
开源工具参考图:
在表I中,概述了FHE库,并列出了支持的语言、方案、功能和可访问性方面。
在表II中,提供了各种FHE编译器及其特性的概述。FHE编译器大致可以分为通用工具和针对特定应用程序的工具。在后一类中,我们看到编译器的目标是构建机器学习(ML)应用程序。对于SIMD批处理(SIMD),我们区分了仅启用批处理的工具和主动帮助处理矢量化数据的工具。同样,我们区分手动、部分辅助和全自动参数选择。虽然所有工具都包括某种形式的自动密文维护操作,但我们将工具分为使用朴素启发式的工具和使用更高级策略的工具。此外,我们注意到工具是否试图减少它们生成的电路的乘法深度。
在表III将编译器与它们使用的库相关联。在这里,我们可以看到SEAL被比任何其他库多得多的编译器瞄准。
-
现存工具实践FHE应用:
https://github.com/MarbleHE/SoK 实践了三种典型的应用程序来介绍FHE应用的开发:1.风险评分计算:需要进行比较,因此需要二进制电路仿真。虽然很简单,但它代表了一类严重分支的程序,这在传统编程中很常见,但在FHE中很难表达。2. 统计χ2-检验: 在一个公式中将其简化为整数上的多项式函数。默认情况下这些方法不适合FHE,但可以重新制定或近似以允许有效的实现。3. 机器学习: 特别是一系列网络架构的神经网络推理。我们评估了一系列日益复杂的模型,并展示了常用的架构是如何适应FHE的。
3.讨论:何时使用哪种FHE工具?
如果选择不同的工具,每个工具都具有略微不同的功能和优势,那么为给定的应用程序选择合适的工具可能是不平凡的。建议:
如果用多项式激活函数训练模型可以产生足够的精度,我们建议使用针对CKKS方案的nGraph HE编译器。
在需要更深/重复的网络或标准激活功能(例如ReLU)来实现所需精度的情况下,具体库提供的可编程自举功能使其成为最合适的选择。
-
对于计算非多项式函数或需要二进制仿真的通用应用程序:
如果主要使用整数,那么具体的FHE库提供的可编程自举是一个好选择。
对于需要真正的二进制明文空间的应用程序,Cingulata(TFHE)很可能是最简单的方法。
-
对于在大量数据上计算(多项式)统计数据的应用程序,我们建议EVA编译器针对需要近似数量的应用程序使用CKKS/
-
如果仅使用整数,我们建议直接使用针对BFV的SEAL库,因为使用BFV不太复杂,并且当前针对它的编译器会带来显著的速度减慢。
-
对于涉及或使用机器学习推理的应用程序,推荐的方法取决于所使用的ML模型的复杂性
4.github库
EVA: https://github.com/microsoft/EVA.git
基于EVA实现的隐私保护神经网络:https://github.com/and0ooo/privacy-preserving-neural-network-based-on-EVA-compiler.git
E3:https://github.com/momalab/e3.git
Cingulata: https://github.com/CEA-LIST/Cingulata.git
nGraph-HE: https://github.com/IntelAI/he-transformer.git