A Tenseal é uma biblioteca para fazer operações de criptografia homomórfica em tensores, construídos sobre o Microsoft Seal. Ele fornece facilidade de uso por meio de uma API Python, preservando a eficiência implementando a maioria de suas operações usando C ++.
tenseal.sealapi Mostramos as operações básicas sobre dados criptografados, uso mais avançado para aplicativos de aprendizado de máquina pode ser encontrado em nossa seção de 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 tensealIsso instala a última versão embalada no Pypi. Se sua plataforma não tiver um pacote pronto, abra um problema para nos informar.
Plataformas suportadas e seus requisitos estão listados abaixo: (Isso é necessário apenas para a construção de tenseal a partir da fonte)
Se você deseja instalar o Tenseal a partir do repositório, primeiro certifique -se de ter os requisitos para sua plataforma (listada acima) e CMake (3.14 ou superior) instalados e, em seguida, obtenha as bibliotecas de terceiros (se você já não o fez) executando o seguinte comando do diretório raiz do projeto
$ git submodule init
$ git submodule updateA Tenseal usa buffers de protocolo para serialização e você também precisará do compilador de buffer de protocolo.
Se você estiver no Windows, primeiro precisará criar a biblioteca do Seal usando o Visual Studio, use o SEAL.sln do arquivo da solução.sln em third_party/SEAL para criar o projeto nativesrcSEAL.vcxproj com Configuration=Release e Platform=x64 . Para mais detalhes, verifique as instruções na construção do selo da Microsoft
Você pode acionar a compilação e a instalação
$ pip install . Você pode usar nossa imagem do Docker para um ambiente pronto para uso com Tenseal instalado
$ docker container run --interactive --tty openmined/tenseal Nota: Pontos openmined/tenseal para a imagem da última versão, use openmined/tenseal:dev para a imagem construída a partir da filial mestre.
Você também pode criar sua imagem personalizada, isso pode ser útil para os desenvolvedores que trabalham no projeto
$ docker build -t tenseal -f docker-images/Dockerfile-py38 .Para executar interativamente esta imagem do docker como um recipiente após a construção, você pode executar
$ docker container run -it tensealPara usar esta biblioteca em outro projeto Bazel, adicione o seguinte no seu arquivo de espaço de trabalho:
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()
Você pode comparar a implementação em qualquer momento executando
$ bazel run -c opt --spawn_strategy=standalone //tests/cpp/benchmarks:benchmarkOs benchmarks de cada mesclagem de relações públicas são enviados aqui.
A. BENAISSA, B. RETIUTA, B. CEBERE, AE BELFEDHAL, "Tenseal: uma biblioteca para operações tensoras criptografadas usando criptografia homomórfica", ICLR 2021 Workshop sobre aprendizado de máquina distribuído e 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 obter suporte no uso desta biblioteca, junte -se ao canal #Support Slack. Clique aqui para se juntar à nossa comunidade Slack!
Solicitações de tração são bem -vindas. Para grandes mudanças, abra um problema primeiro para discutir o que você gostaria de mudar.
Certifique -se de atualizar os testes conforme apropriado.
Licença Apache 2.0