Tenseal adalah perpustakaan untuk melakukan operasi enkripsi homomorfik pada tensor, dibangun di atas Microsoft Seal. Ini memberikan kemudahan penggunaan melalui API Python, sambil menjaga efisiensi dengan menerapkan sebagian besar operasinya menggunakan C ++.
tenseal.sealapi Kami menunjukkan operasi dasar atas data terenkripsi, penggunaan yang lebih maju untuk aplikasi pembelajaran mesin dapat ditemukan di bagian tutorial kami
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 tensealIni menginstal versi kemasan terakhir di PYPI. Jika platform Anda tidak memiliki paket siap, silakan buka masalah untuk memberi tahu kami.
Platform yang didukung dan persyaratannya tercantum di bawah ini: (Ini hanya diperlukan untuk membangun tenseal dari sumber)
Jika Anda ingin menginstal tenseal dari repositori, terlebih dahulu Anda harus memastikan persyaratan untuk platform Anda (tercantum di atas) dan cmake (3.14 atau lebih tinggi) diinstal, maka dapatkan perpustakaan pihak ketiga (jika Anda belum) dengan menjalankan perintah berikut dari direktori root proyek tersebut
$ git submodule init
$ git submodule updateTenseal menggunakan buffer protokol untuk serialisasi, dan Anda akan membutuhkan kompiler buffer protokol juga.
Jika Anda berada di Windows, pertama -tama Anda harus membangun pustaka seal menggunakan Visual Studio, Anda harus menggunakan solusi file SEAL.sln di third_party/SEAL untuk membangun proyek nativesrcSEAL.vcxproj dengan Configuration=Release dan Platform=x64 . Untuk detail lebih lanjut, periksa instruksi dalam membangun segel Microsoft
Anda kemudian dapat memicu build dan instalasi
$ pip install . Anda dapat menggunakan gambar Docker kami untuk lingkungan yang siap digunakan dengan tenseal terpasang
$ docker container run --interactive --tty openmined/tenseal Catatan: openmined/tenseal Points ke gambar dari rilis terakhir, gunakan openmined/tenseal:dev untuk gambar yang dibangun dari cabang master.
Anda juga dapat membangun gambar khusus Anda, ini mungkin berguna bagi pengembang yang mengerjakan proyek
$ docker build -t tenseal -f docker-images/Dockerfile-py38 .Untuk menjalankan secara interaktif gambar Docker ini sebagai wadah setelah dibangun, Anda dapat menjalankan
$ docker container run -it tensealUntuk menggunakan perpustakaan ini di proyek Bazel lain, tambahkan yang berikut ini di file ruang kerja Anda:
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()
Anda dapat membandingkan implementasi kapan saja dengan berjalan
$ bazel run -c opt --spawn_strategy=standalone //tests/cpp/benchmarks:benchmarkTolok ukur dari setiap penggabungan PR diunggah di sini.
A. Benaissa, B. Retiat, B. Cebere, AE Belfedhal, "Tenseal: Perpustakaan untuk Operasi Tensor Terenkripsi Menggunakan Enkripsi Homomorfik", ICLR 2021 Workshop tentang Pembelajaran Mesin Terdistribusi dan Pribadi (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}
}
Untuk dukungan dalam menggunakan perpustakaan ini, silakan bergabung dengan saluran #Support Slack. Klik di sini untuk bergabung dengan komunitas Slack kami!
Permintaan tarik dipersilakan. Untuk perubahan besar, buka masalah terlebih dahulu untuk membahas apa yang ingin Anda ubah.
Pastikan untuk memperbarui tes yang sesuai.
Lisensi Apache 2.0