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 

相关论文:Halevi S , Shoup V . Algorithms in HElib[J]. Lecture Notes in Computer Science, 2014, 8616:554-571.

如何安装?#

//CentOS 8安装HElib

##一般先决条件

GNU make#

//-GNU make> = 3.82

1
yum install make

pthreads#

什么是Pthreads?

参考:链接 

git#

//-git> = 1.8.3(需要构建和运行HElib测试套件)

1
yum install git

** Linux环境:**

g ++#

// -g ++> = 7.3.1

1
yum install gcc-c++

cmake#

// -cmake> = 3.10.2

1
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

1
yum install m4

patchelf#

什么是patchelf ?

patchelf 是一个用来修改elf格式的动态库和可执行程序的小工具,可以修改动态链接库的库名字,以及链接库的RPATH。

更多:链接

//  -patchelf> = 0.9(如果在Linux上构建)

1
yum install patchelf

PS:一般用云服务器的话,镜像里没有 patchelf 的话,会自动去github上下载

如果用的是服务器测试的话,一般是yum 不了patchelf的,所以请采用其他方式安装

参考:链接

安装#

1、下载#

1
wget https://github.com/homenc/HElib/archive/v2.1.0.tar.gz

链接 

2、解压#

1
tar -zxvf v2.1.0.tar.gz

3、构建目录#

1
2
3
4
mv HElib-2.1.0/ HElib
cd HElib
mkdir build
cd build

4、运行cmake#

1
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”中

1
make -j16

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

1核 4GB 20Mbps的服务器make时:

6、可选#

(1)如果步骤2是通过-DENABLE_TEST = ON执行的,则HElib测试可以运行如下: 

1
ctest

可以在以下位置找到详细的HElib特定测试日志 :`Testing / Temporary / LastTest.log`

(2)运行安装步骤,将文件夹“ helib_pack”复制到 :$ {CMAKE_INSTALL_PREFIX}(在此示例中为/home/alice/helib_install

1
make install

当然,如果将“ CMAKE_INSTALL_PREFIX”保留为默认的“ /usr /local”,或者其他系统范围的路径,步骤6(2)可能需要`sudo`特权

默认按上面安装的流程,此时已安装完毕:

1、解压后的目录:

examples:里面有三个工程项目,稍后在下面可以演示

tests:里面有很多小例子,均引用了该库,后期会运行演示

2、安装目录

1
/home/alice/helib_install/helib_pack

所有的头文件都在 include

Mac安装#

安装环境#

依赖库#

GMP> = 6.0.0NTL> = 11.4.3

编译#

假设上main的环境和依赖库已经配置完毕!

(1)下载

1
git clone git://github.com/homenc/HElib

(2)编译

1
2
3
4
5
6
7
8
9
10
11
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

1
2
3
4
5
6
7
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,

1
2
3
mkdir build
cd build
cmake -Dhelib_DIR=/share/cmake/helib  ..

PS:我这里的目录不是 /share/cmake/helib,而是 /home/alice/helib_install/helib_pack/share/cmake/helib 故应该:

1
cmake -Dhelib_DIR=/home/alice/helib_install/helib_pack/share/cmake/helib  ..

4、编译

例如 BGV_country_db_lookup,进入 BGV_country_db_lookup 目录

1
2
cd BGV_country_db_lookup
make -j6

100%,显示编译完成,下面可以运行试试看

5、运行

进入/bin

1
2
cd ../bin
./BGV_country_db_lookup

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

1
cp countries_dataset.csv ../bin

再次运行即可

其他两个例子也如此!

examples/tests#

1、示例的所有测试均以bats(bash的测试框架)编写,并且需要bats-core。
2、请注意,测试要求示例已在build目录中成功编译并且可在build / bin中使用。 要运行测试,只需在examples / tests目录中执行脚本即可。
3、要运行所有测试,请键入以下命令。 (可选)-j标志可以使用线程来并行化测试。 注意,这需要与GNU并行,请参阅bats文档以获取更多信息。

前提安装:bats

举例运行:

1
2
cd  test
bats BGV_binary_arithmetic.bats

有报错,暂时不知道咋回事!

examples/tutorial#

1、在examples目录下

1
make 

2、在bin下执行即可

参考#

1、官方安装文档

2、官方例子

3、不懂球的2大业

作者:Hang Shao

出处:https://www.cnblogs.com/pam-sh/p/14524581.html

版权:本作品采用「知识共享」许可协议进行许可。

声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.

posted @   PamShao  阅读(3701)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu