W. F .
本文是笔者在探索全同态加密过程中,历经半个月踩过无数坑之后总结的经验,建议初学者按照文档流程完成配置,有明确需求的开发人员及研究同行请依照工程标准或课题需求进行针对性学习。
受网速和机器性能影响,完成本文的全部下载、安装与配置大约需要1个工作日
全同态加密是指能够在不知道密钥的情况下,对密文进行任意的计算。即满足:
这种特殊的性质使得全同态加密有广泛的理论与实际应用。如云计算安全、密文检索、安全多方计算等,因此研究全同态加密有重要的科学意义与应用价值。
要快速了解全同态加密的发展历程和基本概念,推荐阅读:
“全同态加密研究_陈智罡_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库而不深究全同态加密的原理,建议先跳过本小节涉及到的文献与知识,因为这将花费大量时间。
本文使用Ubuntu18.04进行HElib环境配置
非虚拟机用户请跳转至步骤2
下载Ubuntu镜像文件,推荐版本 > 18.04,本文准备的镜像文件为:
ubuntu-18.04.3-desktop-amd64.iso
如有需要,请到Ubuntu首页下载最新版本:https://ubuntu.com
需要在宿主机上安装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
或自行检索最新方法解决
HElib的github主页:https://github.com/homenc/HElib 下载zip包
如果出现某些安装包不能在线安装或版本不符,请选择离线安装
常用镜像网站请查看:https://mirrors.ustc.edu.cn/
如HElib主页及本文无特殊说明,建议下载最新版本
安装某包失败时,优先结合报错信息,检查系统中是否安装了全部依赖
离线安装需要手动安装所有依赖,尽量确保各项依赖安装于系统目录之下,以便其他包安装和使用时寻找。
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)
本文默认安装方式为在线安装
安装路径:/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
有两种方式:
①官网下载zip包
②git clone https://github.com/homenc/HElib.git
一般官网下载之后再拖动到文件目录下比git clone要快一些,但clone代码到本地仓库会有一个.git文件夹,即里面会包含历史版本信息,而下载zip压缩包只下载最新版本的代码。仅就使用工程文件来说并无大碍,但如果你想为该库添砖加瓦,请用clone方式获取代码。
明确安装时的各类可选参数,如无特殊需求,可以跳过,按照本文贴出代码的操作
说明:该方式无需手动安装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
cd /usr/local/include && ls
cd /usr/local/share && ls
说明:方式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=
最后安装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在不断更新中,就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
⬇
⬇
⬇
⬇
⬇
⬇
⬇
⬇
程序开始运行!
目前版本,单次加法的运算代价大概为1-3s,乘法为7-9秒,效率不高
HElib库的学习: