La tension est une bibliothèque pour effectuer des opérations de chiffrement homomorphes sur les tenseurs, construites sur le sceau Microsoft. Il offre une facilité d'utilisation via une API Python, tout en préservant l'efficacité en mettant en œuvre la plupart de ses opérations à l'aide de C ++.
tenseal.sealapi Nous montrons les opérations de base sur les données cryptées, une utilisation plus avancée pour les applications d'apprentissage automatique peut être trouvée dans notre section de tutoriel
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 tensealCela installe la dernière version emballée sur PYPI. Si votre plateforme n'a pas de package prêt, veuillez ouvrir un problème pour nous le faire savoir.
Les plates-formes prises en charge et leurs exigences sont répertoriées ci-dessous: (Ce n'est pas nécessaire pour construire la tension de la source)
Si vous souhaitez installer la tension du référentiel, vous devez d'abord vous assurer que les exigences pour votre plate-forme (répertoriée ci-dessus) et CMake (3.14 ou plus) ont été installées, alors effectuez les bibliothèques tierces (si vous ne l'avez pas déjà fait) en exécutant la commande suivante à partir du répertoire racine du projet
$ git submodule init
$ git submodule updateLa tension utilise des tampons de protocole pour la sérialisation, et vous aurez également besoin du compilateur de tampon de protocole.
Si vous êtes sous Windows, vous devrez d'abord construire la bibliothèque de sceau à l'aide de Visual Studio, vous devez utiliser le fichier de solution SEAL.sln dans third_party/SEAL pour construire le projet nativesrcSEAL.vcxproj avec Configuration=Release and Platform=x64 . Pour plus de détails, vérifiez les instructions dans la création de Microsoft Seal
Vous pouvez ensuite déclencher la construction et l'installation
$ pip install . Vous pouvez utiliser notre image Docker pour un environnement prêt à l'emploi avec la tenue installée
$ docker container run --interactive --tty openmined/tenseal Remarque: openmined/tenseal pointe vers l'image de la dernière version, utilisez openmined/tenseal:dev pour l'image construite à partir de la branche maître.
Vous pouvez également créer votre image personnalisée, cela peut être pratique pour les développeurs travaillant sur le projet
$ docker build -t tenseal -f docker-images/Dockerfile-py38 .Pour exécuter de manière interactive cette image Docker en tant que conteneur après sa construction, vous pouvez courir
$ docker container run -it tensealPour utiliser cette bibliothèque dans un autre projet Bazel, ajoutez ce qui suit dans votre fichier d'espace de travail:
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()
Vous pouvez comparer l'implémentation à tout moment en exécutant
$ bazel run -c opt --spawn_strategy=standalone //tests/cpp/benchmarks:benchmarkLes repères de chaque fusion PR sont téléchargés ici.
A. Benaissa, B. Retiat, B. Cebere, AE Belfedhal, "Tenseal: A Library for Crypted Tensor Operations Using Homomorphic Encryption", ICLR 2021 Workshop on Distributed and Private Machine Learning (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}
}
Pour le support dans l'utilisation de cette bibliothèque, veuillez rejoindre le canal #Support Slack. Cliquez ici pour rejoindre notre communauté Slack!
Les demandes de traction sont les bienvenues. Pour les changements majeurs, veuillez d'abord ouvrir un problème pour discuter de ce que vous souhaitez changer.
Assurez-vous de mettre à jour les tests, le cas échéant.
Licence Apache 2.0