跳转到主要内容

张量同态加密操作的库

项目描述


TenSEAL
TenSEAL


一个在张量上执行同态加密操作的库

Tests Linux Package MacOS Package Windows Package

Downloads Version OpenCollective Slack

TenSEAL 是一个在张量上执行同态加密操作的库,基于 Microsoft SEAL 构建。它通过 Python API 提供易用性,同时通过使用 C++ 实现大多数操作来保持效率。

特性

  • :key: 使用 BFV 对整数向量进行加密/解密
  • :old_key: 使用 CKKS 对实数向量进行加密/解密
  • :fire: 加密向量与加密向量以及加密向量与明文向量的逐元素加、减、乘
  • :cyclone: 点积和向量-矩阵乘法
  • :zap: 在 tenseal.sealapi 下的完整 SEAL API

使用方法

我们展示了加密数据上的基本操作,更高级的使用方法可以在我们的 教程部分 找到

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

$ pip install tenseal

这将在 pypi 上安装最后一个打包版本。如果您的平台没有准备好打包版本,请打开一个 问题 通知我们。

从源代码构建

支持的平台及其要求如下:(这仅适用于从源代码构建 TenSEAL)

  • Linux: GNU G++ 的现代版本(>= 6.0)或 Clang++(>= 5.0)。
  • MacOS: Xcode 工具链(>= 9.3)
  • Windows: Microsoft Visual Studio(>= 10.0.40219.1,Visual Studio 2010 SP1 或更高版本)。

如果您想从仓库安装 tenseal,您首先需要确保您的平台满足上述要求(列出),并安装 CMake(3.14 或更高版本),然后通过在项目的根目录中运行以下命令获取第三方库(如果您还没有)

$ git submodule init
$ git submodule update

TenSEAL 使用 Protocol Buffers 进行序列化,并且您还需要协议缓冲区编译器。

如果您在 Windows 上,您首先需要使用 Visual Studio 构建 SEAL 库,您应使用 third_party/SEAL 中的 SEAL.sln 解决方案文件来构建 native/src/SEAL.vcxproj 项目,配置为 Configuration=ReleasePlatform=x64。有关更多详细信息,请查看 构建 Microsoft SEAL 的说明

然后您可以触发构建和安装

$ pip install .

使用 Docker

您可以使用我们的 Docker 镜像 来获得一个预装了 TenSEAL 的可使用环境

$ docker container run --interactive --tty openmined/tenseal

注意: openmined/tenseal 指的是最后发布版本的镜像,使用 openmined/tenseal:dev 获取从 master 分支构建的镜像。

您还可以构建自己的自定义镜像,这可能对在项目中工作的开发者很有用

$ docker build -t tenseal -f docker-images/Dockerfile-py38 .

构建后,您可以运行以下命令将此 Docker 镜像作为容器交互式运行

$ docker container run -it tenseal

使用 Bazel

要将此库用于另一个 Bazel 项目,请将以下内容添加到您的 WORKSPACE 文件中

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, A.E. Belfedhal, "TenSEAL: A Library for Encrypted 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}
}

支持

使用此库的支援,请加入 #support Slack 频道。 点击此处加入我们的 Slack 社区!

贡献

欢迎提交拉取请求。对于重大更改,请先打开一个问题来讨论您想要更改的内容。

请确保适当地更新测试。

许可

Apache License 2.0

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分发

此版本没有可用的源分发文件。请参阅 生成分发存档 的教程。

构建分发

tenseal-0.3.15-cp312-cp312-win_amd64.whl (2.2 MB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

tenseal-0.3.15-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.8 MB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.27+ x86-64 manylinux: glibc 2.28+ x86-64

tenseal-0.3.15-cp312-cp312-macosx_14_0_universal2.whl (3.4 MB 查看哈希值)

上传时间 CPython 3.12 macOS 14.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp312-cp312-macosx_13_0_universal2.whl (4.0 MB 查看哈希值)

上传于 CPython 3.12 macOS 13.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp312-cp312-macosx_12_0_universal2.whl (4.3 MB 查看哈希值)

上传于 CPython 3.12 macOS 12.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp311-cp311-win_amd64.whl (2.2 MB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

tenseal-0.3.15-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.8 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.27+ x86-64 manylinux: glibc 2.28+ x86-64

tenseal-0.3.15-cp311-cp311-macosx_14_0_universal2.whl (3.4 MB 查看哈希值)

上传于 CPython 3.11 macOS 14.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp311-cp311-macosx_13_0_universal2.whl (4.0 MB 查看哈希值)

上传于 CPython 3.11 macOS 13.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp311-cp311-macosx_12_0_universal2.whl (4.3 MB 查看哈希值)

上传于 CPython 3.11 macOS 12.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp310-cp310-win_amd64.whl (2.2 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

tenseal-0.3.15-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.8 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.27+ x86-64 manylinux: glibc 2.28+ x86-64

tenseal-0.3.15-cp310-cp310-macosx_14_0_universal2.whl (3.4 MB 查看哈希值)

上传于 CPython 3.10 macOS 14.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp310-cp310-macosx_13_0_x86_64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.10 macOS 13.0+ x86-64

tenseal-0.3.15-cp310-cp310-macosx_12_0_x86_64.whl (4.3 MB 查看哈希值)

上传时间 CPython 3.10 macOS 12.0+ x86-64

tenseal-0.3.15-cp39-cp39-win_amd64.whl (2.2 MB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

tenseal-0.3.15-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.8 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.27+ x86-64 manylinux: glibc 2.28+ x86-64

tenseal-0.3.15-cp39-cp39-macosx_14_0_universal2.whl (3.4 MB 查看哈希值)

上传时间 CPython 3.9 macOS 14.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp39-cp39-macosx_13_0_x86_64.whl (4.0 MB 查看哈希值)

上传时间 CPython 3.9 macOS 13.0+ x86-64

tenseal-0.3.15-cp39-cp39-macosx_12_0_x86_64.whl (4.3 MB 查看哈希值)

上传时间 CPython 3.9 macOS 12.0+ x86-64

tenseal-0.3.15-cp38-cp38-win_amd64.whl (2.2 MB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

tenseal-0.3.15-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.8 MB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.27+ x86-64 manylinux: glibc 2.28+ x86-64

tenseal-0.3.15-cp38-cp38-macosx_14_0_universal2.whl (3.4 MB 查看哈希值)

上传时间 CPython 3.8 macOS 14.0+ universal2 (ARM64, x86-64)

tenseal-0.3.15-cp38-cp38-macosx_13_0_x86_64.whl (4.0 MB 查看哈希值)

上传时间 CPython 3.8 macOS 13.0+ x86-64

tenseal-0.3.15-cp38-cp38-macosx_12_0_x86_64.whl (4.3 MB 查看哈希值)

上传时间 CPython 3.8 macOS 12.0+ x86-64

支持者

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面