全同态加密-HElib环境配置、安装与测试

全同态加密-HElib环境配置、安装与测试

W. F .

序言

本文是笔者在探索全同态加密过程中,历经半个月踩过无数坑之后总结的经验,建议初学者按照文档流程完成配置,有明确需求的开发人员及研究同行请依照工程标准或课题需求进行针对性学习。
受网速和机器性能影响,完成本文的全部下载、安装与配置大约需要1个工作日

一、同态加密简介

全同态加密是指能够在不知道密钥的情况下,对密文进行任意的计算。即满足:
f为任意运算,Enc为加密函数,m指明文
这种特殊的性质使得全同态加密有广泛的理论与实际应用。如云计算安全、密文检索、安全多方计算等,因此研究全同态加密有重要的科学意义与应用价值。

要快速了解全同态加密的发展历程和基本概念,推荐阅读:
“全同态加密研究_陈智罡_2014”
以及
“全同态加密研究_李增鹏_2017”

2009年,Gentry构建出第一个全同态加密方案,目前已经发展到第三代全同态加密方案(2020)。就目前来看,效率问题运算深度限制问题仍然是限制全同态加密应用落地的隘口。
全同态加密密切相关的核心文献与教材可参考本list:
Craig Gentry Fully Homomorphic Encryption Using Ideal Lattices 2009
BRAKERSKI Z. Efficient fully homomorphic encryption from ( standard)LWE 2011
BRAKERSKI Z. GENTRY C. VAIKUNTANATHAN V. (Leveled) fully homomorphic encryption without bootstrapping 2012
GENTRY C,SAHAI A,WATERS B. Homomorphic encryption from learning with errors : conceptually-simpler,asymptotically-faster,attribute-based 2013

格理论与密码学 [周福才,徐剑 编著] 2013年版

更多文献请参阅综述引文。
想要快速了解更多密码学及同态加密知识,可以联网后参阅石墨文档(推荐):《同态加密文档目录》
注意:如果仅为探索HElib库而不深究全同态加密的原理,建议先跳过本小节涉及到的文献与知识,因为这将花费大量时间。

二、HElib库简介

  • HElib是一个基于C++语言的同态加密开源软件库,底层依赖于NTL数论运算库和GMP多精度运算库实现,主要开发者为IBM的Halevi,目前最新版本为1.0.2,实现了支持“Bootstrapping”的BGV方案和基于近似数的CKKS方案。
  • HElib在上述原始方案中引入了许多优化以加速同态运算,包括Smart-Vercauteren密文打包技术和Gentry-Halevi-Smart优化,提升了算法的整体运行效率。
  • HElib提供了一种“同态加密汇编语言”,支持“set”、“add”、“multiply”、“shift”等基本操作指令,此外还提供了自动噪声管理、改进的“Bootstrapping”方法、多线程等功能。
  • 可以实现无限次加法和几十次乘法(受噪声控制限制)
  • 目前,HElib支持在Ubuntu、CentOS、macOS等操作系统平台上进行安装部署,国内贴吧中有大牛贴出了windows部署方案,笔者没有尝试,有意者可自行到百度“同态加密吧”探寻:同态加密部署

三、HElib环境配置

本文使用Ubuntu18.04进行HElib环境配置
非虚拟机用户请跳转至步骤2

1.创建Ubuntu虚拟机

(1)Ubuntu镜像文件下载

下载Ubuntu镜像文件,推荐版本 > 18.04,本文准备的镜像文件为:
ubuntu-18.04.3-desktop-amd64.iso

如有需要,请到Ubuntu首页下载最新版本:https://ubuntu.com

(2)创建Ubuntu虚拟机

需要在宿主机上安装VMware虚拟机软件
安装完成后,打开VMWare-新建虚拟机-自定义创建-逐步选择配置
推荐配置:双核单CPU、1G内存、20G存储空间、NAT网络
点击确定后,静待系统初始化,这将花费一点时间。

正式开始配置前,请确保Ubuntu虚拟机可以联网,可以执行

ping www.baidu.com

来测试,虚拟机不能联网的请参阅以下博客:
https://blog.csdn.net/czg13548930186/article/details/79789001
https://blog.csdn.net/qq_38786209/article/details/79997301
或自行检索最新方法解决

2.准备工作(非必要)

(1)HElib安装包

HElib的github主页:https://github.com/homenc/HElib 下载zip包

(2)常用的镜像网站

如果出现某些安装包不能在线安装或版本不符,请选择离线安装
常用镜像网站请查看:https://mirrors.ustc.edu.cn/
如HElib主页及本文无特殊说明,建议下载最新版本

(3)依赖关系

安装某包失败时,优先结合报错信息,检查系统中是否安装了全部依赖
离线安装需要手动安装所有依赖,尽量确保各项依赖安装于系统目录之下,以便其他包安装和使用时寻找。
HElib依赖:
git(版本>1.8.3)
gcc (版本>7.3.1)
make(版本>3.82)
cmake(版本>3.10.2)
patchelf
NTL(版本>11.4.3)

gcc依赖:
gmp(版本>6.0.0)
mpc(版本>1.2.0)
mpfr(版本>4.1.0)
m4(版本>1.4.16)
Isl(版本:?)

cmake依赖:
openssl
开发依赖:
clang(版本>9.0.0)

3.安装与配置

本文默认安装方式为在线安装
安装路径:/home/user_name
user_name指的是当前用户的用户名

启动Ubuntu,右键单击-打开终端(terminal)-执行以下命令:

sudo apt install make
//系统询问是否安装时请输入:y 回车,之后类似
sudo apt install cmake
sudo apt install gcc
sudo apt install git
sudo apt install clang-9
sudo apt install patchelf

在线状态下大多数包都可以通过apt方式安装,偶有版本不符要求的,优先考虑升级,最后考虑离线安装。
以上安装包安装完成后,请执行以下命令来检查版本信息:

make -v 
g++ -v 
clang-9 -v
git --version 
cmake --version
patchelf --version

要求make >= 3.82 、g++ >= 7.3.1、git>=1.8.3、Cmake >= 3.10.2

四、HElib库安装

1.获取HElib安装包

有两种方式:
①官网下载zip包
②git clone https://github.com/homenc/HElib.git
一般官网下载之后再拖动到文件目录下比git clone要快一些,但clone代码到本地仓库会有一个.git文件夹,即里面会包含历史版本信息,而下载zip压缩包只下载最新版本的代码。仅就使用工程文件来说并无大碍,但如果你想为该库添砖加瓦,请用clone方式获取代码。

2.阅读主页INSTALL文档(推荐)

明确安装时的各类可选参数,如无特殊需求,可以跳过,按照本文贴出代码的操作

3.安装HElib

(1)方式一 package build

说明:该方式无需手动安装gmp与ntl依赖,程序将尝试自动安装这两个包
gmp和nlt为两个开源数学运算库
安装步骤:

git clone https://github.com/homenc/HElib.git
cd HElib/
mkdir build
cmake -DPACKAGE_BUILD=ON ..
make 
sudo make install

在本文中,没有指定安装目录,程序默认将文件安装至/use/local下的lib、include和share目录中;
如果报错。建议删除(可能)已经生成的文件,清空目录,按照方式2进行安装
安装完成后:

cd /usr/local/lib && ls

看到libhelib.a库以及gmp、ntl相关库:
在这里插入图片描述

cd /usr/local/include && ls

看到helib文件夹、gmp.h和NTL文件夹:
在这里插入图片描述

cd /usr/local/share && ls

看到cmake 文件夹:
在这里插入图片描述
安装成功

(2)方式2 library build

说明:方式2要求自行安装gmp与ntl
gmp及ntl安装包请到上文“准备工作”小节下载。
安装步骤:

//open terminal
cd ~
mkdir install
cd install
先安装gmp
将gmp压缩包放置于/home/user_name/install 目录下
本文所用压缩包为 gmp-6.2.1.tar
tar -xzf gmp-6.2.1.tar
cd gmp-6.2.1
./configure
make
sudo make install

注意:此处没有指定安装目录,如果指定了安装目录,请记得安装目录的路径, 之后构建ntl和HElib会用到。

//安装ntl
//将ntl压缩包放置于/home/user_name/install 目录下
//本文所用压缩包为 ntl-11.4.3.tar.gz
tar -xzf ntl-11.4.3.tar.gz
cd ntl-11.4.3/src
./configure NTL_GMP_LIP=on SHARED=on NTL_THREADS=on 
NTL_THREAD_BOOST=on
make
sudo make install

NTL将会被安装到/usr/local中。
注意:有关构建NTL时的其他选项,请在configure前运行./configure --help
注意:如果系统提示找不到GMP,请转到./configure步骤,用
GMP_PREFIX= 来指定gmp的安装目录。

最后安装HElib:

git clone https://github.com/homenc/HElib.git
cd HElib
mkdir build
cd build
cmake ..
//有关gmp、ntl路径指定以及helib安装路径指定的请参照官方文档
make
sudo make install
//sudo 是因为默认安装到 /usr/local下需要root权限

和方式一相同,检查是否安装成功。

五、HElib库测试与学习

HElib的测试
HElib在不断更新中,就2020.12.16日的发行版本,可以在examples目录下进行基于cmake 的测试:
执行以下代码:

cd ~/install/HElib/examples
ls

在这里插入图片描述
可以看到有三个文件夹,分别展示了密文运算、密文查询功能
//在这里选择BGV_binary_arithmetic

cd BGV_binary_arithmetic
cmake -Dhelib_DIR=/usr/local/share/cmake
make
./BGV_binary_arithmetic









程序开始运行!
全同态加密-HElib环境配置、安装与测试_第1张图片
目前版本,单次加法的运算代价大概为1-3s,乘法为7-9秒,效率不高

HElib库的学习:

  • 建议先读HElib官方提供的示例代码,之后再去网络上寻找其他资源
    可以关注同态加密吧,关注这个目前还比较小众的领域
  • 附:密码学论文网站:https://eprint.iacr.org/index.htmls

你可能感兴趣的:(密码学,linux,加密解密)