Skip to main content

Rosetta 是一个开源的隐私保护机器学习框架。

项目描述

标识

github 许可证


概述

Rosetta 是一个基于TensorFlow的隐私保护框架。它集成了主流的隐私保护计算技术,包括密码学、联邦学习和可信执行环境。Rosetta 旨在为人工智能提供隐私保护解决方案,而不需要密码学、联邦学习和可信执行环境方面的专业知识。Rosetta 重用了 TensorFlow 的 API,并允许将传统的 TensorFlow 代码转换为隐私保护的方式,并且只需极少的更改。例如,只需添加以下行。

import latticex.rosetta

当前版本集成了 3 方的安全多方计算协议。底层协议是SecureNN。在诚实多数的半诚实模型中是安全的。

安装

目前,Rosetta 在 Ubuntu 18.04 上运行,并且基于带有 CPU 的 TensorFlow 1.14(目前尚不支持 Windows 操作系统)。您可以按如下方式安装 Rosetta。

首先,请检查您的本地系统是否满足我们的基本环境要求。

然后使用以下代码安装本机 TensorFlow。请注意,您也可以从源代码安装它。

# install tensorflow
pip3 install tensorflow==1.14.0

然后使用我们的一体化脚本构建和安装 Rosetta,如下所示。

# clone rosetta git repository
git clone https://github.com/LatticeX-Foundation/Rosetta.git
cd Rosetta
# compile, install and run test cases
bash compile_and_test_all.sh

在运行您的程序之前,您应该配置您的网络拓扑,以便可以建立一个分布式网络供各方相互通信。

您可以使用示例来检查一切运行正常。Rosetta 的安装、配置和部署的详细步骤请参考部署指南。

用法

以下是使用 Rosetta 进行矩阵乘法的玩具示例。

在这个例子中,我们假设三个人想要得到他们私有矩阵的乘积,而不想让其他人知道他们持有什么。为简洁起见,我们称它们为 P0、P1 和 P2。

使用 Rosetta,他们每个人都可以运行以下脚本,从中可以看出,除了原生 TensorFlow 行之外,只需要少量代码。

#!/usr/bin/env python3

# Import rosetta package
import latticex.rosetta as rtt
import tensorflow as tf

# You can activate a backend protocol, here we use SecureNN
rtt.activate("SecureNN")

# Get private data from every party
matrix_a = tf.Variable(rtt.private_console_input(0, shape=(3, 2)))
matrix_b = tf.Variable(rtt.private_console_input(1, shape=(2, 1)))
matrix_c = tf.Variable(rtt.private_console_input(2, shape=(1, 4)))

# Just use the native tf.matmul operation.
cipher_result = tf.matmul(tf.matmul(matrix_a, matrix_b), matrix_c)

# Start execution
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    # Take a glance at the ciphertext
    cipher_result = sess.run(cipher_result)
    print('local ciphertext result:', cipher_result)
    # Set only party a and c can get plain result
    a_and_c_can_get_plain = 0b101 
    # Get the result of Rosetta matmul
    print('plaintext matmul result:', sess.run(rtt.SecureReveal(cipher_result, a_and_c_can_get_plain)))

要联合运行这个,配置网络后,三个人可以分别运行以下命令行:

python rosetta_demo.py --party_id=0

,

python rosetta_demo.py --party_id=1

python rosetta_demo.py --party_id=2

然后会提示每一方输入他的私有矩阵,例如P0可能有:

[2020-07-29 20:10:49.070] [info] Rosetta:协议 [SecureNN] 后端初始化成功!

请输入私有数据(浮点数或整数,6 项,以空格分隔):2 3 1 7 6 2

请注意,在这个玩具示例中,像这样来自控制台的输入纯粹是出于教学目的。请参阅我们的文档以了解可用于生产的数据 API。

最后,P0 和 P2 将得到明文输出,而 P1 没有,正如需要的那样。具体来说,P0 和 P2 可能具有:

明文 matmul 结果: [[b'8.000000' b'14.000000' b'18.000000' b'4.000000'] [b'4.000000' b'7.000000' b'9.000000' b'2.000000'] [b'24.000000' b'42.000000' b'54.000000' b'12.000000']]

[2020-07-29 20:11:06.452] [info] Rosetta:协议 [SecureNN] 后端已发布。

而 P1 有:

明文 matmul 结果: [[b'0.000000' b'0.000000' b'0.000000' b'0.000000'] [b'0.000000' b'0.000000' b'0.000000' b'0.000000'] [b'0.000000' b'0.000000' b'0.000000' b'0.000000']]

[2020-07-29 20:11:06.452] [info] Rosetta:协议 [SecureNN] 后端已发布。

就是这样,您可以看到 Rosetta 非常易于使用。

有关更多详细信息,请查看教程和示例。

注意:目前 Rosetta 已经支持 128 位整数数据类型,可以通过配置环境变量来启用export ROSETTA_MPC_128=ON

入门

为了帮助您轻松开始使用 Rosetta 的第一个可行程序,我们的教程将带您进入这个奇妙的世界。在这个详细的教程中,我们将帮助您了解有关 Rosetta 的基本概念,然后通过易于理解的示例向您展示如何使用我们提供的接口,最后帮助您建立一个可行的隐私保护机器学习模型。 -世界数据集。

希望本教程以及示例中的更多其他示例能够激发您深入了解此隐私保护框架的兴趣。

罗塞塔的工作原理

Rosetta 通过扩展和破解 Python 前端和 TensorFlow 后端的操作内核来工作。它将TensorFlow相关组件和隐私技术的开发解耦,让人工智能和密码学的开发者都可以专注于他们感兴趣的事情。

在运行您的 Rosetta 程序时,首先将转换原生 TensorFlow 数据流图,在此过程中,图中的原生操作将替换为 SecureOps。

而在第二阶段,将调用以特定加密协议实现的操作的后端内核来执行底层安全计算。

为罗塞塔做贡献

Rosetta 是一个在 LPGLv3 许可下开发并由LatticeX Foundation维护的开源项目。欢迎个人和组织投稿。在开始之前,请查看我们的贡献指南。我们的项目遵守行为准则。通过参与我们的社区,您应该遵守此准则。您也可以通过单击此处打开问题。

接触

您可以通过电子邮件联系我们。欢迎您加入Slack上的 Rosetta 社区,提出任何问题并与其他开发人员讨论任何有趣的话题

执照

Rosetta 库是根据 GNU Lesser General Public License v3.0 获得许可的。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

latticex-0.3.0.tar.gz (2.0 MB 查看哈希

已上传 source

内置分布

latticex-0.3.0-py3-none-any.whl (2.0 MB 查看哈希

已上传 py3