谷歌近日开源了首个通用全同态加密(FHE)的转译器(transpiler),可以将普通的C++程序转译为基于TFHE同态库的同态程序,将明文运算转换为了同态密文运算。这个项目依赖XLS和TFHE两个库。本文内容整理自google官方博客、github仓库和白皮书。

一、我们在全同态加密领域的最新进展

作为开发者,让用户安全地使用在线服务并保护用户数据隐私是我们的责任。首先产品需要做到:安全功能是默认的、设计时考虑隐私保护、将隐私数据控制权还给用户。我们在Google所做的全部产品都以这些原则为基础,我们很自豪能够成为新的隐私保护技术的行业领导者,我们开发、部署和大规模应用了这项技术,这使我们能够在保护用户隐私的同时学到有价值的洞见并获得经验。

这就是为什么今天,我们很高兴地宣布,我们是开源了全同态加密库。它是首个通用全同态加密(FHE)的转译器(transpiler),这将使得开发人员能够在密态数据上计算,而不需要访问个人隐私身份数据信息。

二、深入了解背后的技术

借助FHE,密态数据可以通过网路传输到云端,并在不解密的情况下进行处理。开发人员基于任何类型的基础运算编写代码,例如字符串处理或数学运算,谷歌的转译器将该代码转换为可以在密态数据上运行的中间码。借助这些基础的运算,开发人员可以创建运行在密态数据上的应用程序。FHE还可以用于保护隐私的在敏感数据上的机器学习模型训练。

例如,假设您正在为糖尿病患者构建一个应用程序。此应用程序可能会从其用户那里收集敏感信息,您需要一种方法来保护这些数据的私密性和安全性,同时还要与医学专家共享这些数据,以获得可能导致重要医学进步的宝贵洞见。借助 Google的FHE转译器,您可以对收集的数据进行加密并与医学专家共享,这些专家反过来可以在不解密的情况下分析数据,从而为医学界提供有用的信息,同时确保没有人可以访问数据的敏感明文信息。

在接下来的10年里,FHE甚至可以通过分析数千个加密样本的遗传信息并测试不同的理论假设,从而来识别与他们正在研究的疾病最密切相关的基因,从而帮助研究人员找到特定基因突变之间的关联。

通过设计使产品具有更多隐私保护功能

我们原则之一是通过设计使我们的产品保护隐私,这促使我们发展突破性的隐私计算技术,在保护您的隐私的同时实现个性化体验。隐私保护技术处于Google创新的前沿,它们已经显示出塑造更加私密的互联网的巨大潜力。

2016年,谷歌研究人员发明了联邦学习,这是一种通过在个人设备上保留尽可能多的个人信息来帮助保护隐私的技术。2019年,谷歌向组织或开发者免费提供其差分隐私库,这是一种先进的匿名化技术。没有人比我们更广泛地使用差分隐私技术。

我们很高兴看到这些技术在全球得到应用;例如,在法国,一家名为 Arkhn 的初创公司已经能够使用差分隐私在医院之间共享数据来加速科研。

将FHE应用于大多数场景之前,我们还有很长的路要走。但是,这个过程就像HTTPS需要一些时间才能起飞并被广泛采用。今天的故事是,为用户提供有用的产品时保护隐私和数据安全。

在Google,我们知道向开发者社区开放我们的技术以获取反馈和使用,有助于使技术变得更好。我们将不断发布新产品并开源,我们将继续投入和引领隐私保护技术领域。我们很高兴通过与各地的开发人员分享这一最新进展。我们迫不及待地想看看您将构建什么应用,我们期待在实现更安全互联网的过程中进行合作。

三、FHE C++转译器的设计

FHE C++ Transpiler是一种开源技术,允许任何C++开发人员对程序进行转译。

此转译器将Google的XLS库连接到TFHE库。它将允许开发人员(包括那些没有密码学专业知识的开发人员)编写在密态数据上运行的代码,而不会泄露数据内容或计算结果。该库应该有助于为FHE应用的进一步发展奠定基础。

这个项目目前一个探索性的概念验证。虽然它可以在生产中部署,但FHE-C++ 计算效率还是很低,目前不实用。这个转译器严重依赖TFHE库来保证安全。由于TFHE相对较新,因此尚未对TFHE进行可靠的密码学分析。因此,在实际生产部署中使用此库,请注意TFHE中可能存在尚未发现的漏洞。

FHE C++ Transpiler按顺序执行以下五个步骤:

  1. XLS[cc]阶段,将C++函数转换为XLS中间码(IR);

  2. 优化器阶段,优化XLS IR;

  3. Booleanifier 阶段,根据运算的基本布尔运算(例如 AND、OR、NOT)重写XLS IR;

  4. FHE IR Transpiler阶段,将布尔化的XLS IR转换为C++版本,即FHE-C++;

  5. TFHE测试基准阶段,运行带有TFHE库的FHE-C++。

该库包含前四个阶段的代码,用户需要编写自己的C++代码进行转译,以及第五阶段的TFHE测试基准。示例有说明如何构建新的测试基准。

进一步说明每个步骤的详细内容。

1)第一步,将C++代码编译为XLS中间码。

2)第二步,优化性能;

3)第三步,将XLS IR转换为Boolean形式的XLS IR,也就是将XLS中间语言以二进制电路的形式表示和描述。有点类似于零知识证明的做法。

4)第四步,将Boolean XLS IR转换为C++代码,调用FHE库的运算符。

5)第五步,在TFHE上运行测试。

模块化的设计

  • 输入代码可以是可以翻译成XLS 的任何语言。这大大减少了转换现有代码的负担,因为它不需要用固定支持的语言编写;

  • 输出FHE代码可以是任何FHE库的;

  • 底层FHE后端可以是任何将门作为API接口的FHE库;

四、应用样例

1. 计算器

计算器演示将两个加密的短整数相加、相减或相乘,而服务器不知道这些整数或结果的明文。

2. 斐波那契

Fibonacci 演示计算 Fibonacci 序列的总和。

3. 猜单词游戏Hangman

Hangman是经典游戏,这里改造为隐私版本。服务器不知道玩家选择了哪些字母,也不知道他们是赢了还是输了。

4. PIR隐私信息检索

此演示重点介绍了隐私信息检索(PIR)。用户提供的字符串进行检索,而服务器不知道查询条件和要查询的数据。这个操作的复杂度是O(N),其中N是数据库中的记录数。

5. 反转字符串

反转加密字符串。

6. 简单的总和

两个加密整数求和。

7. 字符串大小写

在这个演示中,句子的每个单词的首字母大写。

8. 剪刀石头布

该演示允许您在服务器上玩石头剪刀布。提供玩家的输入,服务器将评估游戏的结果,而不会获得输入或结果的明文。

五、参考文献

  1. whitepaper

    https://github.com/google/fully-homomorphic-encryption/blob/main/transpiler/docs/whitepaper.pdf

  2. github仓库

    https://github.com/google/fully-homomorphic-encryption/tree/main/transpiler

  3. google developer blog,

    https://developers.googleblog.com/2019/09/enabling-developers-and-organizations.html

  4. TFHE,https://tfhe.github.io/tfhe/

  5. XLS,https://google.github.io/xls/

声明:本文来自开放隐私计算,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。