SEAL全同态加密开源库(一) 安装与配置

SEAL全同态加密开源库(一) 安装与配置

2021SC@SDUSC

2021-09-30

SEAL库介绍

何为全同态加密

全同态加密属于密码学领域,被称为“密码学的圣杯”。

如果我们有一个加密函数 f , 把明文A变成密文A’, 把明文B变成密文B’,也就是说f(A) = A’ ,f(B) = B’ 。另外我们还有一个解密函数,能够将 f 加密后的密文解密成加密前的明文。

对于一般的加密函数,如果我们将A’和B’相加,得到C’。我们用对C’进行解密得到的结果一般是毫无意义的乱码。

但是,如果 f 是个可以进行同态加密的加密函数, 我们对C’使用进行解密得到结果C, 这时候的C = A + B。这样,数据处理权与数据所有权可以分离,这样企业可以防止自身数据泄露的同时,利用云服务的算力。

由于全同态加密支持无需解密,就能够对密文进行任意计算,因此可以立竿见影的解决数据隐私安全问题,有很大的应用需求。例如,在云环境下,用户加密数据后存储在云端,由于数据加密使得云端无法获得数据的内容,从而保证了数据的隐私。此外,由于是全同态加密,云端可以对密文数据进行任意计算。总而言之,全同态加密不但通过加密保护了数据,而且没有丧失计算性。

何为SEAL

Microsoft SEAL 是一个易于使用的开源同态加密库,由 Microsoft 的密码学和隐私研究小组开发。Microsoft SEAL 是用现代标准 C++ 编写的,易于编译并在许多不同的环境中运行。

Microsoft SEAL 带有两种不同的同态加密方案,它们具有非常不同的属性。BFV 方案允许对加密整数执行模算术。CKKS 方案允许对加密的实数或复数进行加法和乘法,但只能产生近似结果。在诸如对加密实数求和、在加密数据上评估机器学习模型或计算加密位置的距离等应用中,CKKS 将是迄今为止最佳选择。对于需要精确值的应用,BFV 方案是唯一的选择。

安装与配置

对GitHub上的官方源码进行分析,发现SEAL库的安装方式依据版本大不相同。目前最新的release版本为SEAL 3.7,网络上的配置教程(包括Microsoft官网的配置视频教程)都是基于<3.6的版本(参考: Microsoft SEAL库的安装与配置_y2y2999的博客-CSDN博客),老版本的代码包中含有sln文件,安装较为简单。这里我们采用了最新的3.7版本,需要自行CMake,所以按照官方英文文档的方式,自行摸索,历经许久终于安装成功。

Requirements

带有适用于 Windows 的 C++(C++ 17) CMake 工具的 Visual Studio 2019,CMake。

Step 1

Visual Studio 2019自带CMake工具,打开文件后VS自动检测到是makelists文件会自动执行CMake,也可以直接在VS的终端里面打开命令行,执行cmake的命令行,但是我在实际操作中遇到了一系列的问题,按照网上的说法,尝试删除构建好的build文件也无果。于是我转而下载了CMake,尝试采用cmake的原始方式。

cmake -S . -B build

效果如下:

在这里插入图片描述

其中这里大概率会报错,原因是连接不到github下载,解决方案是多试几次,或者魔法。
在这里插入图片描述

经过几次尝试,cmake -S . -B build终于成功了。

Step 2

cmake --build build

执行结果如下:

在这里插入图片描述

Step 3

sudo cmake --install build

需要在cmd以管理员身份打开。

在Windows中无法使用sudo,只能出此下策。注意切换目录的方式,如下图:

在这里插入图片描述

其中报了一个这样的错误:
在这里插入图片描述

发现确实没有该文件夹,于是参考了stack flow网站类似问题的解决方案,将D:\workplace_for_SEAL\SEAL\build\lib\Debug文件夹复制一份,重命名为release即可:

在这里插入图片描述

最后构建完成。

与应用程序链接

摘自官方文档:

“构建完成后,seal-<version>.lib可以在build\lib\或 中找到输出静态库build\lib\Release\。与应用程序链接时,强烈建议使用 CMake,如通过 CMake 与 Microsoft SEAL 链接中所述。或者,您需要添加native\src\(完整路径)和build\native\src\包含目录来定位 Microsoft SEAL 头文件。”

代码框架简析

native下面的src文件夹,是源代码source code,examples文件夹下有一些具体的例程和测试结果。

具体内容见下一篇博客。

相关资源整理

微软官方SEAL网站:[通过 SEAL 实现同态加密 - Azure Example Scenarios | Microsoft Docs]

GitHub中SEAL:[SEAL: Microsoft SEAL 是一个易于使用的同态加密库,由微软的 Cryptography Research 小组开发 (gitee.com)]

知乎专栏:[微软同态加密库SEAL使用 - 知乎 (zhihu.com)]

CSDN专栏:[全同态加密-SEAL安装、环境配置与测试_一只老阿木的博客-CSDN博客]

国内陈智罡教授的博客:[科学网—全同态加密研究资源汇总 (不断更新中!) - 陈智罡的博文 (sciencenet.cn)]

组内成员分工

着手的项目是SEAL全同态加密开源库的代码分析,小组共有三人。

从github上下载下来源码进行初步分析,项目主要编程语言为C++,另外所使用的编程语言有C#、CMake等语言。

通过与孔老师的沟通以及查阅源码文档之后,大致拟划出了三个方向,ckks、bfv以及ntt。

猜你喜欢

转载自blog.csdn.net/ldxcsdn/article/details/120571841