0 写下本文的目的
作为一个密码行业小白,由于工作原因需要了解同态加密相关知识,尤其是OpenFHE的使用与部署。我用了一周的时间终于搞定了OpenFHE的部署,并且整理成教程,这里附上链接:OpenFHE部署教程,或者移步主页查看。
但是,新的问题接踵而至,即使在Ubuntu上成功安装OpenFHE,对于如何使用OpenFHE同态加密库进行部署也不甚了解,本文主要目的就整理记录我在学习OpenFHE的过程中遇到的问题以及解决方法,如果有不懂的问题也会留在帖子下方一起讨论。
在学习之前,我在网上找了一些学习资料,发现大多都是有一定基础的人才能看懂的,或者是从论文中衍生出来落实到操作层面上的教学,于是我去看了一下OpenFHE官网对于这个同态加密库如何使用的相关教程,本文主要是对官网上的教学文档进行翻译,并加入一些我自己的理解,来把问题讲清楚。
1 OpenFHE库使用逻辑
虽然OpenFHE叫做同态加密“库”,但是并不能以Python的思维来理解,也就是说不能直接输入某些关键字来调用OpenFHE的功能。
OpenFHE需要通过编程来实现不同的功能,但是在该目录下,封装了一些测试用例,以验证OpenFHE已经部署成功,目录如下:
cd openfhe-development/build/bin/examples/pke
进入这个目录后可以看到很多测试用例,轮转、内积、实数、简单整数、bfv算法、bgv算法、ckks算法等等测试用例都在这个文件夹下列出了。
图上这些都是一些封装好的,如果想看源代码,可以到这个地址:
cd openfhe-development/src/pke/examples
打开一个,内容如下:
2 OpenFHE simple-integers(简单整数)用例解析
在build目录下,直接用如下命令调用简单整数的测试用例:
bin/examples/pke/simple-integers
输出结果如下:
这一步展示了调用的过程,系统返回了相应的结果,简单解释一下什么意思:
首先定义3个明文数组,分别为#1、#2、#3,他们分别由12个正整数组成,在运算结果一行可以看到,该测试用例返回了计算的结果,分别为相加和相乘,也就是同态加密中最基础的两种运算。
#1 + #2 + #3表示将上面假定的3个数组相乘,同态加密不需要单独运算某个数,在噪声允许的范围内可以一次性可以导入一个数组进行运算,规则是数组#1、#2、#3的第x个元素参与运算,计算的结果为新数组#1 + #2 + #3的第x个元素(#1 * #2 * #3同理)。
所以从结果上看,经过密态运算后输出并解密的数组#1 + #2 + #3的第一个元素为5,使1+3+1的结果,第二个元素为6,是2+2+2的结果,以此类推。
简单整数的测试用例比较简单,也能最直观的入门同态加密库,后续我还会更新其他的测试用例以及如何编写可以供用户输入数值来进行计算的代码。