张力是在Microsoft Seal顶部进行张量的同态加密操作的库。它通过Python API易于使用,同时通过使用C ++实施大多数操作来确保效率。
tenseal.sealapi下完成密封API。 我们显示了对加密数据的基本操作,可以在我们的教程部分上找到机器学习应用程序的更高级用法
import tenseal as ts
# Setup TenSEAL context
context = ts . context (
ts . SCHEME_TYPE . CKKS ,
poly_modulus_degree = 8192 ,
coeff_mod_bit_sizes = [ 60 , 40 , 40 , 60 ]
)
context . generate_galois_keys ()
context . global_scale = 2 ** 40
v1 = [ 0 , 1 , 2 , 3 , 4 ]
v2 = [ 4 , 3 , 2 , 1 , 0 ]
# encrypted vectors
enc_v1 = ts . ckks_vector ( context , v1 )
enc_v2 = ts . ckks_vector ( context , v2 )
result = enc_v1 + enc_v2
result . decrypt () # ~ [4, 4, 4, 4, 4]
result = enc_v1 . dot ( enc_v2 )
result . decrypt () # ~ [10]
matrix = [
[ 73 , 0.5 , 8 ],
[ 81 , - 5 , 66 ],
[ - 100 , - 78 , - 2 ],
[ 0 , 9 , 17 ],
[ 69 , 11 , 10 ],
]
result = enc_v1 . matmul ( matrix )
result . decrypt () # ~ [157, -90, 153] $ pip install tenseal这将在PYPI上安装最后一个包装版本。如果您的平台没有准备好的软件包,请打开一个问题以告知我们。
支持的平台及其要求如下列出:(这仅是从来源构建张力的必需的)
如果要从存储库中安装张力,应首先确保安装平台(上面列出)和安装CMAKE(3.14或更高)的要求,然后通过从项目的根目录中运行以下命令来获取第三方库(如果您还没有)
$ git submodule init
$ git submodule update张力使用协议缓冲区进行序列化,您也需要协议缓冲器编译器。
如果您在Windows上,则首先需要使用Visual Studio构建密封库,应使用解决方案文件SEAL.sln中的third_party/SEAL中的SLN来构建项目nativesrcSEAL.vcxproj ,并具有Configuration=Release = Platform=x64 。有关更多详细信息,请查看构建Microsoft密封的说明
然后,您可以触发构建和安装
$ pip install . 您可以使用我们的Docker映像进行准备使用张力安装的环境
$ docker container run --interactive --tty openmined/tenseal注意: openmined/tenseal指向上一个版本中的图像,使用openmined/tenseal:dev 。
您还可以构建自定义图像,这对于从事该项目的开发人员可能很方便
$ docker build -t tenseal -f docker-images/Dockerfile-py38 .为了在建立该容器后交互式运行此Docker映像,您可以运行
$ docker container run -it tenseal要在另一个Bazel项目中使用此库,请在工作区文件中添加以下内容:
git_repository(
name = "org_openmined_tenseal",
remote = "https://github.com/OpenMined/TenSEAL",
branch = "master",
init_submodules = True,
)
load("@org_openmined_tenseal//tenseal:preload.bzl", "tenseal_preload")
tenseal_preload()
load("@org_openmined_tenseal//tenseal:deps.bzl", "tenseal_deps")
tenseal_deps()
您可以通过运行任何时候基准实现
$ bazel run -c opt --spawn_strategy=standalone //tests/cpp/benchmarks:benchmark每个公关合并的基准都在此处上传。
A. Benaissa,B。Etiat,B。Cebere,AE Belfedhal,“张力:使用同构加密的加密张量操作库”,ICLR 2021分布式和私人机器学习研讨会(DPML 2021)。
@misc{tenseal2021,
title={TenSEAL: A Library for Encrypted Tensor Operations Using Homomorphic Encryption},
author={Ayoub Benaissa and Bilal Retiat and Bogdan Cebere and Alaa Eddine Belfedhal},
year={2021},
eprint={2104.03152},
archivePrefix={arXiv},
primaryClass={cs.CR}
}
要使用此库中的支持,请加入#Suppport Slack Channel。单击此处加入我们的Slack社区!
欢迎拉动请求。对于重大更改,请先开设一个问题,以讨论您想更改的内容。
请确保及时更新测试。
Apache许可证2.0