Tenseal es una biblioteca para realizar operaciones de cifrado homomórficos en tensores, construidos sobre Microsoft Seal. Proporciona facilidad de uso a través de una API de Python, al tiempo que preserva la eficiencia al implementar la mayoría de sus operaciones utilizando C ++.
tenseal.sealapi Mostramos las operaciones básicas sobre datos cifrados, se puede encontrar un uso más avanzado para aplicaciones de aprendizaje automático en nuestra sección tutorial
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 tensealEsto instala la última versión empaquetada en PYPI. Si su plataforma no tiene un paquete listo, abra un problema para informarnos.
Las plataformas compatibles y sus requisitos se enumeran a continuación: (Esto solo se requiere para construir Tenseal desde la fuente)
Si desea instalar Tenseal desde el repositorio, primero debe asegurarse de tener los requisitos para su plataforma (enumerada anteriormente) y CMake (3.14 o más) instaladas, luego obtenga las bibliotecas de terceros (si no lo hizo) ejecutando el siguiente comando desde el directorio raíz del proyecto del proyecto
$ git submodule init
$ git submodule updateTenseal utiliza tampones de protocolo para la serialización, y también necesitará el compilador de búfer de protocolo.
Si está en Windows, primero deberá construir la biblioteca de sellos utilizando Visual Studio, debe usar el archivo de solución SEAL.sln en third_party/SEAL para construir el proyecto nativesrcSEAL.vcxproj con Configuration=Release y Platform=x64 . Para obtener más detalles, consulte las instrucciones en la construcción de Microsoft Seal
Luego puede activar la compilación y la instalación
$ pip install . Puede usar nuestra imagen Docker para un entorno listo para usar con Tenseal instalado
$ docker container run --interactive --tty openmined/tenseal Nota: openmined/tenseal apunta a la imagen desde la última versión, use openmined/tenseal:dev para la imagen construida desde la rama maestra.
También puede construir su imagen personalizada, esto podría ser útil para los desarrolladores que trabajan en el proyecto.
$ docker build -t tenseal -f docker-images/Dockerfile-py38 .Para ejecutar interactivamente esta imagen de Docker como contenedor después de que se haya construido, puede ejecutar
$ docker container run -it tensealPara usar esta biblioteca en otro proyecto de bazel, agregue lo siguiente en su archivo de espacio de trabajo:
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()
Puede comparar la implementación en cualquier momento ejecutando
$ bazel run -c opt --spawn_strategy=standalone //tests/cpp/benchmarks:benchmarkLos puntos de referencia de cada fusión de relaciones públicas se cargan aquí.
A. Benaissa, B. Retiat, B. Cebere, Ae Belfedhal, "Tenseal: una biblioteca para operaciones tensor cifradas utilizando cifrado homomórfico", Taller ICLR 2021 en aprendizaje automático distribuido y privado (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}
}
Para el soporte en el uso de esta biblioteca, únase al canal #Support Slack. ¡Haga clic aquí para unirse a nuestra comunidad Slack!
Las solicitudes de extracción son bienvenidas. Para cambios importantes, abra primero un problema para discutir lo que le gustaría cambiar.
Asegúrese de actualizar las pruebas según corresponda.
Licencia de Apache 2.0