Tenseal ist eine Bibliothek für homomorphe Verschlüsselungsvorgänge auf Tensoren, die auf Microsoft Seal basiert. Es bietet eine einfache Nutzung durch eine Python -API und bewahrt gleichzeitig die Effizienz, indem die meisten seiner Vorgänge mit C ++ implementiert werden.
tenseal.sealapi Wir zeigen die grundlegenden Vorgänge über verschlüsselte Daten. Eine fortgeschrittenere Nutzung für Anwendungen für maschinelles Lernen finden Sie in unserem Tutorial -Abschnitt
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 tensealDies installiert die letzte verpackte Version auf PYPI. Wenn Ihre Plattform kein fertiges Paket hat, öffnen Sie bitte ein Problem, um uns mitzuteilen.
Unterstützte Plattformen und ihre Anforderungen sind nachstehend aufgeführt: (Dies ist nur für den Aufbau von Tensal aus der Quelle erforderlich)
Wenn Sie Tenseal aus dem Repository installieren möchten, sollten Sie zunächst die Anforderungen für Ihre Plattform (oben aufgeführt) und CMake (3.14 oder höher) installiert haben, und erhalten Sie die Bibliotheken von Drittanbietern (wenn Sie es bereits nicht getan haben), indem Sie den folgenden Befehl aus dem Stammverzeichnis des Projekts ausführen
$ git submodule init
$ git submodule updateTenseal verwendet Protokollpuffer für die Serialisierung, und Sie benötigen auch den Protokollpuffer Compiler.
third_party/SEAL Configuration=Release unter Windows sind SEAL.sln müssen Sie zunächst Platform=x64 Visual Studio die Siegelbibliothek nativesrcSEAL.vcxproj . Weitere Informationen finden Sie in den Anweisungen zum Erstellen von Microsoft Seal
Sie können dann den Build und die Installation auslösen
$ pip install . Sie können unser Docker -Image für eine Umgebung mit installiertem Tensal verwenden
$ docker container run --interactive --tty openmined/tenseal HINWEIS: openmined/tenseal zeigt das Bild aus der letzten Version, verwenden Sie openmined/tenseal:dev für das aus dem Master -Zweig erstellte Bild.
Sie können auch Ihr benutzerdefiniertes Bild erstellen, dies ist möglicherweise nützlich für Entwickler, die an dem Projekt arbeiten
$ docker build -t tenseal -f docker-images/Dockerfile-py38 .Um dieses Docker -Image interaktiv als Container auszuführen, nachdem es erstellt wurde, können Sie rennen
$ docker container run -it tensealUm diese Bibliothek in einem anderen Bazel -Projekt zu verwenden, fügen Sie Folgendes in Ihre Arbeitsbereichsdatei hinzu:
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()
Sie können die Implementierung zu jedem Zeitpunkt durch Ausführen reduzieren
$ bazel run -c opt --spawn_strategy=standalone //tests/cpp/benchmarks:benchmarkDie Benchmarks von jeder PR -Zusammenführung werden hier hochgeladen.
A. Benaissa, B. Retiat, B. Cebeere, AE Belfedhal, "Tenseal: Eine Bibliothek für verschlüsselte Tensoroperationen unter Verwendung einer homorphen Verschlüsselung", ICLR 2021 Workshop zum verteilten und privaten maschinellen Lernen (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}
}
Für die Unterstützung bei der Verwendung dieser Bibliothek nehmen Sie bitte dem #Support -Slack -Kanal bei. Klicken Sie hier, um unserer Slack -Community beizutreten!
Pull -Anfragen sind willkommen. Für wichtige Änderungen öffnen Sie zuerst ein Problem, um zu besprechen, was Sie ändern möchten.
Bitte stellen Sie sicher, dass Sie nach Bedarf Tests aktualisieren.
Apache -Lizenz 2.0