張力是在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