Tenseal은 Microsoft Seal 위에 구축 된 텐서에서 동성 암호화 작업을 수행하기위한 도서관입니다. C ++를 사용하여 대부분의 작업을 구현하여 Python API를 통해 사용하기 쉽습니다.
tenseal.sealapi 암호화 된 데이터에 대한 기본 작업을 보여주고 머신 러닝 응용 프로그램에 대한 고급 사용량을 자습서 섹션에서 찾을 수 있습니다.
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 tensealPYPI에 마지막 패키지 버전을 설치합니다. 플랫폼에 준비된 패키지가 없으면 문제를 열어주세요.
지원되는 플랫폼 및 해당 요구 사항은 다음과 같습니다.
저장소에서 Tenseal을 설치하려면 먼저 플랫폼 (위에 나열된) 및 CMAKE (3.14 이상)에 대한 요구 사항을 설치해야합니다. 그런 다음 프로젝트의 루트 디렉토리에서 다음 명령을 실행하여 타사 라이브러리를 가져와야합니다.
$ git submodule init
$ git submodule updateTenseal은 직렬화에 프로토콜 버퍼를 사용하며 프로토콜 버퍼 컴파일러도 필요합니다.
Windows에있는 경우 먼저 Visual Studio를 사용하여 SEAL 라이브러리를 빌드해야합니다. SEAL.sln third_party/SEAL 의 Sln을 사용하여 프로젝트 nativesrcSEAL.vcxproj Configuration=Release 및 Platform=x64 구축해야합니다. 자세한 내용은 Microsoft Seal 구축 지침을 확인하십시오.
그런 다음 빌드와 설치를 트리거 할 수 있습니다
$ pip install . Docker Image를 사용하여 Tenseal이 설치된 환경을 사용할 수 있습니다.
$ docker container run --interactive --tty openmined/tenseal 참고 : openmined/tenseal 은 마지막 릴리스에서 이미지를 가리키며 마스터 브랜치에서 구축 된 이미지에 openmined/tenseal:dev 사용하십시오.
사용자 정의 이미지를 구축 할 수도 있습니다. 프로젝트 작업을하는 개발자에게는 편리 할 수 있습니다.
$ docker build -t tenseal -f docker-images/Dockerfile-py38 .이 docker 이미지가 내장 된 후 컨테이너로 대화식으로 실행하려면 실행할 수 있습니다.
$ docker container run -it tenseal다른 Bazel 프로젝트 에서이 라이브러리를 사용하려면 작업 영역 파일에 다음을 추가하십시오.
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()
실행하여 언제라도 구현을 벤치마킹 할 수 있습니다.
$ bazel run -c opt --spawn_strategy=standalone //tests/cpp/benchmarks:benchmark모든 PR 합병의 벤치 마크가 여기에 업로드됩니다.
A. Benaissa, B. Retiat, B. Cebere, Ae Belfedhal, "텐트 : 동종 암호화를 사용한 암호화 된 텐서 작업을위한 도서관", ICLR 2021 분산 및 개인 기계 학습에 관한 워크숍 (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}
}
이 라이브러리 사용을 지원하려면 #Support Slack 채널에 가입하십시오. 슬랙 커뮤니티에 가입하려면 여기를 클릭하십시오!
풀 요청을 환영합니다. 주요 변경 사항을 위해 먼저 문제를 열어 변경하고 싶은 것을 논의하십시오.
테스트를 적절하게 업데이트하십시오.
아파치 라이센스 2.0