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的github主页:https://github.com/homenc/HElib
如何安装?
//CentOS 8安装HElib
##一般先决条件
GNU make
//-GNU make> = 3.82
yum install make

pthreads
什么是Pthreads?
参考:链接
git
//-git> = 1.8.3(需要构建和运行HElib测试套件)
yum install git

** Linux环境:**
g ++
// -g ++> = 7.3.1
yum install gcc-c++

cmake
// -cmake> = 3.10.2
yum install cmake

Linux安装
自动下载并构建GMP和NTL依赖关系并打包可重定位文件夹中的库
此选项将HElib及其依赖项(NTL和GMP)捆绑在一个目录中,然后可以在系统上自由移动。 NTL和GMP将自动获取和编译。 它可以全局安装(即在/ usr / local下),如果未指定CMAKE_INSTALL_PREFIX,这是默认选项,但是由于要覆盖现有版本的NTL,GMP或HElib,因此应谨慎操作。在这种情况下,还需要另外两个前提条件:
m4
什么是m4?
m4是一个宏处理器,将输入拷贝到输出,同时将宏展开。宏可以是内嵌的,也可以是用户定义的,它还有一些内建函数,可以引用文件、执行命令和计算等。m4既可以作为编译器的前端,也可以单独作为一个宏处理器。
更多:链接
// -m4> = 1.4.16
yum install m4

patchelf
什么是patchelf ?
patchelf 是一个用来修改elf格式的动态库和可执行程序的小工具,可以修改动态链接库的库名字,以及链接库的RPATH。
更多:链接
// -patchelf> = 0.9(如果在Linux上构建)
yum install patchelf

PS:一般用云服务器的话,镜像里没有 patchelf 的话,会自动去github上下载
如果用的是服务器测试的话,一般是yum 不了patchelf的,所以请采用其他方式安装
参考:链接
安装
1、下载
wget https://github.com/homenc/HElib/archive/v2.1.0.tar.gz
2、解压
tar -zxvf v2.1.0.tar.gz

3、构建目录
mv HElib-2.1.0/ HElib
cd HElib
mkdir build
cd build
4、运行cmake
cmake -DPACKAGE_BUILD=ON -DCMAKE_INSTALL_PREFIX=/home/alice/helib_install ..
PS:运行cmake配置步骤,指定要构建软件包(通过-DPACKAGE_BUILD = ON)并说出您希望安装到的位置,例如,要在`/home/alice/helib_install`中安装
可以在此处指定其他选项,例如使用以下命令启用HElib测试 -DENABLE_TEST = ON
5、编译
编译,并指定可选数量的线程(在此示例中为16),其输出将在可重定位文件夹“ helib_pack”中
make -j16

PS:1核 2GB 20Mbps 的服务器,CPU直接100%,需要稍微高点的配置。或者输入小的进程数,例如: make -j5
1核 4GB 20Mbps的服务器make时:

6、可选
(1)如果步骤2是通过-DENABLE_TEST = ON执行的,则HElib测试可以运行如下:
ctest
可以在以下位置找到详细的HElib特定测试日志 :`Testing / Temporary / LastTest.log`
(2)运行安装步骤,将文件夹“ helib_pack”复制到 :$ {CMAKE_INSTALL_PREFIX}(在此示例中为/home/alice/helib_install)
make install
当然,如果将“ CMAKE_INSTALL_PREFIX”保留为默认的“ /usr /local”,或者其他系统范围的路径,步骤6(2)可能需要`sudo`特权
默认按上面安装的流程,此时已安装完毕:
1、解压后的目录:

examples:里面有三个工程项目,稍后在下面可以演示
tests:里面有很多小例子,均引用了该库,后期会运行演示
2、安装目录
/home/alice/helib_install/helib_pack

所有的头文件都在 include 中
Mac安装
安装环境

依赖库
GMP> = 6.0.0和NTL> = 11.4.3。
编译
假设上main的环境和依赖库已经配置完毕!
(1)下载
git clone git://github.com/homenc/HElib
(2)编译
cd HElib
mkdir build
cd build // 选择一个安装位置,例如 /home/alice/helib_install
cmake -DPACKAGE_BUILD=ON -DCMAKE_INSTALL_PREFIX=/home/alice/helib_install .. // 得好一阵,如果机器够好,多开点进程
make -j16 make install
(3)运行example
cd example ///home/alice/helib_install 就是当初制定的安装位置
cmake -Dhelib_DIR=/home/alice/helib_install/helib_pack/share/cmake/helib .. //编译example下的所有文件
make -j16

生成结果在/example/build/bin下:

执行第一个例子:

Docker安装
请参考:FHE-Toolkit 安装
如何使用?
在项目中使用HElib
前提
在方法1或方法2中运行“ make install”后,可以在lib中找到要链接的必需共享库文件,并在 include 中找到头文件【我这里是 /home/alice/helib_install/helib_pack/include】
例子的使用参考:examples/README.md
examples
1、介绍
`examples'目录包含教程和独立的示例程序表示各种API以及使用HElib的简单用例。
2、提供了什么
[tutorials]要涵盖CKKS方案,并包含8个记录在案的示例从基本操作到更复杂的序列化。
提供的示例程序使用BGV方案,包括:
-[BGV_binary_arithmetic](二进制算法)
-[BGV_country_db_lookup](BGV国家数据库查找)
-[BGV_packed_arithmetic](BGV压缩算法)

3、安装
要编译示例,您必须在系统上已经安装了HElib。这个过程是纯CMake的。首先,创建一个构建目录并移入该目录。在“ examples / build”中运行CMake,
mkdir build
cd build
cmake -Dhelib_DIR=/share/cmake/helib ..
PS:我这里的目录不是 /share/cmake/helib,而是 /home/alice/helib_install/helib_pack/share/cmake/helib 故应该:
cmake -Dhelib_DIR=/home/alice/helib_install/helib_pack/share/cmake/helib ..
4、编译
例如 BGV_country_db_lookup,进入 BGV_country_db_lookup 目录
cd BGV_country_db_lookup
make -j6

100%,显示编译完成,下面可以运行试试看
5、运行
进入/bin
cd ../bin
./BGV_country_db_lookup

此时应该会报错,大概的意思就是没有找到 countries_dataset.csv 文件,现在要将该文件复制到该位置即可,文件位置在:examples/BGV_country_db_lookup
cp countries_dataset.csv ../bin
再次运行即可

其他两个例子也如此!
examples/tests
1、示例的所有测试均以bats(bash的测试框架)编写,并且需要bats-core。
2、请注意,测试要求示例已在build目录中成功编译并且可在build / bin中使用。 要运行测试,只需在examples / tests目录中执行脚本即可。
3、要运行所有测试,请键入以下命令。 (可选)-j标志可以使用线程来并行化测试。 注意,这需要与GNU并行,请参阅bats文档以获取更多信息。
前提安装:bats
举例运行:
cd test
bats BGV_binary_arithmetic.bats
有报错,暂时不知道咋回事!

examples/tutorial
1、在examples目录下
make

2、在bin下执行即可
参考
1、官方安装文档
2、官方例子
3、不懂球的2大业
HElib的更多相关文章
- 同态加密-Homomorphic encryption
同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样.换言之,这项技术令人 ...
- FHE-Toolkit 安装
什么是FHE-Toolkit? FHE-Toolkit-linux是用于Linux的IBM全同态加密工具包, 该工具包是一个基于Linux的Docker容器,可演示对加密数据的计算而无需解密, 该工具 ...
- cmake和make
学计算机的,在写代码的时候,IDE安装好,环境按着教程配置好,就直接代码了,编辑器的具体原理只是一知半解,现在来系统学习一下,为了方便以后学习HElib! make和cmake 写程序大体步骤为: 1 ...
- CKKS加密方案
本文内容来自"Protecting Privacy throughHomomorphic Encryption",主要学习里面的CKKS部分. CKKS是一种同态加密方案,其安全性 ...
- SIMD编码/解码
在看SEAL库和HElib库中经常在编码中碰到打包(batch)技术,另外还提到了SIMD编码技术,有点困惑,编码.打包.SIMD到底有什么关系? 编码 在CKKS方案中,因为明文空间在复数域上,简单 ...
- DFT/FFT/NTT
在Seal库和HElib库中都用到了NTT技术,用于加快多项式计算,而NTT又是FFT的优化,FFT又来自于DFT,现在具体学习一下这三个技术! 基础概念 名词区分 1.DFT:离散傅立叶变换 2.F ...
- Homomorphic Evaluation of the AES Circuit:解读
之前看过一次,根本看不懂,现在隔这么久,再次阅读,希望有所收获! 论文版本:Homomorphic Evaluation of the AES Circuit(Updated Implementati ...
- TENSEAL: A LIBRARY FOR ENCRYPTED TENSOR OP- ERATIONS USING HOMOMORPHIC ENCRYPTION 解读
本文记录阅读该paper的笔记,这篇论文是TenSeal库的原理介绍. 摘要 机器学习算法已经取得了显著的效果,并被广泛应用于各个领域.这些算法通常依赖于敏感和私有数据,如医疗和财务记录.因此,进一步 ...
随机推荐
- Redis中的分布式锁(步步为营)
分布式锁 概述 分布式锁指的是,所有服务中的所有线程都去获取同一把锁,但只有一个线程可以成功的获得锁,其他没有获得锁的线程必须全部等待,直到持有锁的线程释放锁. 分布式锁是可以跨越多个实例,多个进程的 ...
- docker部署java项目
1.首先你需要提前准备好jar包或者war包,并想办法放入Linux环境(或虚拟机)中: 2.java项目的部署需要用到Tomcat或者Jetty,docker可以直接拉取他俩的镜像,这里以Tomca ...
- 如何使用,操作Redis数据库
本博客不再维护,搬家到 http://zthinker.com .个人微信小程序(分布式编程) Redis是一个开源的内存中键值数据存储.Redis是NoSQL数据库,它不使用结构化查询语言,也称为S ...
- 使用 ASM 实现 Java 语言的“多重继承”
问题的提出 在大部分情况下,需要多重继承往往意味着糟糕的设计.但在处理一些遗留项目的时候,多重继承可能是我们能做出的选择中代价最小的.由于 Java 语言本身不支持多重继承,这常常会给我们带来麻烦,最 ...
- Ollma本地部署Qwen2.5 14B(不使用docker)
部署机器硬件情况: 内存 :32GB 显卡 :3060 为什么不使用docker: 1.网上教程大多以docker为主 2.安装docker的时间太长,在等待的时候顺便尝试一下不用docker的部署 ...
- 2024-11-27:字符串的分数。用go语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值的总和。 请计算并返回字符串 s 的分数。 输入:s = “hello“
2024-11-27:字符串的分数.用go语言,给定一个字符串 s,我们可以定义其"分数"为相邻字符的 ASCII 码差值绝对值的总和. 请计算并返回字符串 s 的分数. 输入:s ...
- word 文档签章控件生成的签章批量删除
某个签章工具的word插件缺少批量插入签章的功能.同时,发现在投标工具中可以使用导出生成pdf时批量签章的功能.现在需要移除先前手动操作生成的多个签章,有如下发现-- 1.对少量签章,可以先选中签章右 ...
- 从零开始学java(前言)
很长时间以来,自己都非常的懒惰,以前学习的知识都已经记不大清了,入职半年以来,学到的东西不多,反倒以前会的都不会认识了 打算从新开始,从心出发,认真学习 注册博客园是看了狂神说的建议,希望通过养成每天 ...
- 聊一下怎么10分钟速水中危CVE
题目是真的.今天晚上刚接触关于CVE的审计和提交.只能说:牛逼的是真牛逼,水的是真水. 我接下来教你,怎么在10分钟里找到一个CVE的中危漏洞并且提交.然后你就可以去咸鱼接单了,一个一铂快 打开htt ...
- Echrtas 实时渲染
1.实时曲线图 业务场景:每个时间节点产生一个数据,且时间节点间隔不固定 坐标轴配置:X轴类型设定为time,Y轴类型设定为value 数据格式:每个节点的数据都是一个数组,第一个数组为时间,第二个元 ...