Tensealは、Microsoftシールの上に構築されたテンソルで同種暗号化操作を行うためのライブラリです。 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に最後のパッケージバージョンがインストールされます。プラットフォームに準備が整ったパッケージがない場合は、問題を開いてお知らせください。
サポートされているプラットフォームとその要件を以下にリストします。
リポジトリからTensealをインストールする場合は、まずプラットフォーム(上記のリスト)とCmake(3.14以降)の要件をインストールしておく必要があります。
$ git submodule init
$ git submodule updateTensealはシリアル化にプロトコルバッファーを使用しており、プロトコルバッファーコンパイラも必要になります。
Windowsにいる場合は、まずVisual Studioを使用してシールライブラリを構築する必要がありますSEAL.slnを使用して、 third_party/SEALのSLNを使用して、 Configuration=ReleaseとPlatform=x64でプロジェクトnativesrcSEAL.vcxprojを構築する必要があります。詳細については、Microsoftシールの構築の指示を確認してください
その後、ビルドとインストールをトリガーできます
$ pip install . Dockerイメージを使用して、緊張した環境を取り付けてすぐに使用できるようになります
$ docker container run --interactive --tty openmined/tenseal注: openmined/tensealは、最後のリリースの画像を指します。Masterブランチから構築された画像には、 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。Retiat、B。Cebere、Ae Belfedhal、「Tenseal:同種暗号化を使用した暗号化されたテンソル操作のライブラリ」、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}
}
このライブラリの使用をサポートするには、 #Support Slackチャンネルに参加してください。 Slackコミュニティに参加するには、ここをクリックしてください!
プルリクエストは大歓迎です。大きな変更については、最初に問題を開いて、何を変えたいかを議論してください。
必要に応じて、必ずテストを更新してください。
Apacheライセンス2.0