Tenseal - это библиотека для выполнения гомоморфных операций шифрования на тензорах, построенной на вершине Microsoft Seal. Он обеспечивает простоту использования через API Python, сохраняя при этом эффективность, внедряя большую часть его операций с использованием C ++.
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 tensealЭто устанавливает последнюю упакованную версию на PYPI. Если на вашей платформе нет готового пакета, откройте проблему, чтобы сообщить нам.
Поддерживаемые платформы и их требования перечислены ниже: (это требуется только для построения тензурки из источника)
Если вы хотите установить Tenseal из репозитория, вам следует сначала убедиться, что требования к вашей платформе (перечисленная выше) и Cmake (3.14 или выше), затем получите сторонние библиотеки (если вы еще не этого не сделали), выполнив следующую команду из корневого каталога проекта
$ git submodule init
$ git submodule updateTenseal использует буферы протокола для сериализации, и вам также понадобится компилятор буфера протокола.
Если вы находитесь в Windows, вам сначала необходимо построить библиотеку Seal с помощью Visual Studio, вам следует использовать файл Solution SEAL.sln в third_party/SEAL для создания проекта nativesrcSEAL.vcxproj с Configuration=Release and Platform=x64 . Для получения дополнительной информации проверьте инструкции по строительству Microsoft Seal
Затем вы можете запустить сборку и установку
$ pip install . Вы можете использовать наше изображение Docker для готовой к использованию среды с установленной 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, «Tenseal: библиотека для зашифрованных тензоров с использованием гомоморфного шифрования», 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. Нажмите здесь, чтобы присоединиться к нашему сообществу Slack!
Приглашаются запросы. Для серьезных изменений, пожалуйста, сначала откройте проблему, чтобы обсудить, что вы хотели бы изменить.
Пожалуйста, обязательно обновите тесты по мере необходимости.
Apache License 2.0