本篇文章介绍:SEAL同态库的安装和简单使用

注:使用Clang++编译的Microsoft Seal比使用GNUG++编译的Microsoft Seal具有更好的运行时性能。

1、 cmake:适应于Windows、MACOS、linux

2、 vcpkg:适应于Windows、MACOS、linux

3、 homebrew:适用于MACOS

4、 pkg:适用于FreeBSD

5、 NuGet Package:用于.NET开发(安卓),适用于Windows, Linux, macOS, Android, iOS

liunx/MacOS上安装

1、 下载

git clone https://github.com/microsoft/SEAL

2、 构建

cd SEAL
cmake -S . -B build
cmake --build build
sudo cmake --install build

构建完成后,可以在build/lib/和build/bin/目录中找到输出二进制文件。

可以指定各种配置选项并将其传递给CMake构建系统。下面的“基本CMake选项”和“高级CMake选项”部分对这些选项进行了说明。

当需要对example、tests进行测试时,由于,默认是关闭的,所以需要打开:



在根目录下运行:

cmake -S . -B build -DSEAL_BUILD_EXAMPLES=ON
cmake -S . -B build -DSEAL_BUILD_TESTS=ON
cmake -S . -B build -DSEAL_ROOT=~/mylibs
cmake --build build

生成的二进制文件在 build/bin下

Windows上安装

在Windows上,上述相同的脚本使用Ninja或“Visual Studio 16 2019”生成器在Visual Studio的开发人员命令提示符下工作。

注:Ninja 是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度,总结就是和cmake的作用是一样的。

Visual Studio 16 2019”生成器

1、 根据打开的vs2019命令行工具依次输入命令:



2、如果打开的是x64,那么:

cd SEAL
cmake -S . -B build -G "Visual Studio 16 2019" -A x64
cmake --build build --config Release
cmake --install build

如果打开的是x86,那么:

cd SEAL
cmake -S . -B build -G "Visual Studio 16 2019" -A Win32
cmake --build build --config Release
cmake --install build

这一步完成后的结果如图所示:



3、安装完成后我们进入/SEAL/native/example目录下,编译样例example:

以x64为例:

cmake -S . -B build -G "Visual Studio 16 2019" -A x64
cmake --build build --config Release
cmake --install build

这样example代码就编译构建编译完成,生成可执行文件(.exe)sealexamples

4、运行sealexamples

在这里我们可以看到seal有不同的工作模式,对应不同的模式有对应的样例和过程演示

依赖库

Intel HEXL

Intel HEXL是一个库,提供同态加密中常见的加密原语的高效实现。在采用“英特尔AVX512-IFMA52”指令集的英特尔处理器上,这种加速尤其明显。

Microsoft GSL

Microsoft GSL(Guidelines Support Library)是一个仅标头的库,它实现了GSL::span:一种视图类型,提供对内存的安全(边界检查)数组访问。

例如,如果Microsoft GSL可用,Microsoft SEAL可以允许BatchEncoder和CKKSEncoder从GSL::span而不是std::vector进行编码和解码,这在某些情况下具有显著的性能优势。

ZLIB and Zstandard

ZLIB和Zstandard是广泛使用的压缩库。Microsoft SEAL可以选择使用这些库来对数据进行压缩序列化。

人们可能会问,当密文和密钥数据与随机数据无法区分时,压缩有何帮助?在Microsoft SEAL中,Ciphertext对象由指定的大素数作为模数(coeff_modulus)的整数组成。特别是在使用CKKS方案时,这些素数可能非常小(例如,30位),但数据仍然序列化为64位整数。因此,几乎一半的密文字节是零,这并不常见,而应用通用压缩算法能消除这种浪费空间。BFV方案从该技术中获得的好处通常较少,因为用于coeff_modulus加密参数的素数往往更大,而对这些素数进行模化的整数填充每个64位字的更多。压缩序列化可以应用于任何可序列化的Microsoft SEAL对象,而不仅仅是密文和密钥。

如果Microsoft SEAL使用ZLIB或Zstandard支持编译,则压缩将自动用于序列化;参考Serialization::compr_mode_default在native/src/seal/serialization.h。但是,始终可以显式地将compr_mode_type::none传递给序列化方法以禁用压缩。如果同时启用了ZLIB和Zstandard支持,那么Zstandard将默认使用,因为它的性能要好得多。

注释:一个SecretKey的压缩率能透露出密钥的信息,在大多数情况下,密钥的大小不会透露给不可信的第三方,如果这是个问题,可以以未压缩的形式保存SecretKey。

examples

native/examples/该文件夹下给出了7个例子(C++),C#编写的在 dotnet/examples/下

1_bfv_basics.cpp

BFV方案的加密模块

2_encoders.cpp

将更复杂的数据编码到Microsoft SEAL纯文本对象中

3_levels.cpp

介绍了levels的概念;使用CKKS方案的先决条件

4_ckks_basics.cpp

使用CKKS方案的加密实数算法

5_rotation.cpp

在BFV和CKKS方案中对加密向量执行循环旋转(cyclic rotations)

6_serialization.cpp

该例子介绍在Microsoft SEAL中序列化对象!

具体来说,给出了用在外包计算,传递密文和密钥时能优化数据大小,以用户端和服务端传递消息为例,服务端选择加密参数,客户端生成密钥,服务端进行进行加密计算,客户端解密。

7_performance.cpp

性能测试

基于CKKS的EVA

EVA:是一个基于python编写的编译工具,为python开发者提供了很好的平台。它优化了Microsoft SEAL的计算,选择适当的加密参数,并为加密输入、执行计算和解密结果提供了方便的Python API,EVA可在GitHub获得。

注:EVA仅支持CKKS方案,目前还没有支持BFV计划的计划。

SEAL库 - 安装和介绍的更多相关文章

  1. [转]Snappy压缩库安装和使用之一

    Snappy压缩库安装和使用之一 原文地址:http://blog.csdn.net/luo6620378xu/article/details/8521223 近日需要在毕业设计中引入一个压缩库,要求 ...

  2. python Scrapy安装和介绍

    python Scrapy安装和介绍 Windows7下安装1.执行easy_install Scrapy Centos6.5下安装 1.库文件安装yum install libxslt-devel ...

  3. ansible安装 使用 介绍

    1.介绍安装 a.介绍 Ansible:—基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作. b.安装 ...

  4. mysql 源代码目录及安装目录介绍

    1.源代码目录介绍: 1.BUILD    BUILD目录是编译.安装脚本目录,绝大部分以compile-开头,其中的SETUP.sh脚本为C和C++编译器设置了优化选项.2.client    cl ...

  5. Scrapy库安装和项目创建

    Scrapy是一个流行的网络爬虫框架,从现在起将陆续记录Python3.6下Scrapy整个学习过程,方便后续补充和学习.本文主要介绍scrapy安装.项目创建和测试基本命令操作 scrapy库安装 ...

  6. Sikuli图形脚本测试工具安装及介绍(适合小白的测试神器)

    sikuli简单安装以及介绍附图: 一.简单介绍 SikuliX官方网站:https://launchpad.net/sikuli/(官方的最新版本是SikuliX1.1.0更新于2015-10-06 ...

  7. protocol buffer c++ python库安装

    c++库安装较简单,不要用源码,还得下载依赖,就被墙了 https://github.com/google/protobuf/releases  下载一个最新的release安装 #protoc -- ...

  8. phpize 扩展GD库 安装 ! 环境--centos 7 +nginx 1.7.11+php 5.6.7

    使用phpize编译GD库安装,先安装前置库libjpeg libpng zlib  freetype等 都是下面php编译的几个选项 先看php编译的选项: --with-gd=DIR       ...

  9. DCMTK3.6.1(MD支持库)安装说明

    转载:http://qimo601.iteye.com/blog/1685135 [前言] 最近,因为需要开发DICOM网管模块,必须使用DCMTK的DcmNet模块.但是DCMTK3.6.0在Dcm ...

随机推荐

  1. Golang 简洁架构实战

    文中项目代码位置:https://github.com/devYun/go-clean-architecture 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.l ...

  2. PowerShell 管道符之Where-Object的使用方法

    1 Get-Process|Select-Object -Property Name|Where-Object{$_ -match 'QQ'} 可以匹配到QQ为名的结果

  3. 万级K8s集群背后 etcd 稳定性及性能优化实践

    1背景与挑战随着腾讯自研上云及公有云用户的迅速增长,一方面,腾讯云容器服务TKE服务数量和核数大幅增长, 另一方面我们提供的容器服务类型(TKE托管及独立集群.EKS弹性集群.edge边缘计算集群.m ...

  4. git 重置密码后,本地电脑需要修改git密码

    查看用户名git config user.name 查看密码git config user.password 查看邮箱git config user.email 修改密码git config --gl ...

  5. 白嫖党的福音!!!全新的Java300集视频(2022版)来了!

    它来了它来了,经过一年时间的沉淀, [尚学堂]高淇Java300集完整版正式发布啦! 应广大网友和尚学堂忠实的孜孜学子以及听众朋友的要求,尚学堂在去年十月份就把预计在2022年发布的Java300集提 ...

  6. 【机器学习】svm

    机器学习算法--SVM 目录 机器学习算法--SVM 1. 背景 2. SVM推导 2.1 几何间隔和函数间隔 2.2 SVM原问题 2.3 SVM对偶问题 2.4 SMO算法 2.4.1 更新公式 ...

  7. 【get√】golang中实现从腾讯云CVM查询网卡流量的两种方法

    公众号文章链接 主要参考了以下位置的资料: 云服务器监控接口 腾讯云go-sdk example 方法一:使用腾讯云go-sdk go.mod文件中增加这样一行: github.com/tencent ...

  8. JUC之Fork/Join框架

    Fork/Join框架和异步 定义: Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.类似于递归或 ...

  9. nacos集群开箱搭建

    记录/朱季谦 nacos是一款易于构建云原生应用的动态服务发现.配置管理和服务管理平台,简单而言,它可以实现类似zookeeper做注册中心的功能,也就是可以在springcloud领域替代Eurek ...

  10. java-包与包之间的访问

    1 package face_package; 2 3 import face_packagedemoA.DemoA; 4 5 /* 包(package) 6 * 1,对类文件进行分类管理. 7 * ...