SEAL全同态加密开源库(十) BFV-源码浅析

2021SC@SDUSC

2021-12-5

前言

时光飞逝,前段时间我们一直在致力于分析SEAL库比较底层的核心代码,遵循的思路也是从底层往上层的应用层去挖掘,这样有利也有弊吧,好处自然就是深入了解底层实现机制,弊端就是缺少一个整体的把握。
so,从本篇开始,我们开始试图暂时跳脱出native/src文件夹,主要是底层代码基于我们的分工也完成的差不多了,接下来的一个月也到了收获的时节,我将开始试图分析examples文件夹下的代码。
与之前的工作相比,这些代码显得更具整体性,也能更好体现出SEAL的工作原理以及流程,算是对前面的集大成者了,因此很有分析的必要。

BFV

本篇我们将分析examples/1_bfv_basics.cpp。看一看SEAL对于bfv是如何实现的。
先照例补充一些理论基础。
对于全同态加密,之前介绍过了。经过研究,我们发现,现在主流的研究方案包括 FHEW、TFHE、GSW、BGV、BFV、CKKS。
其中 FHEW、TFHE、GSW为布尔电路上的实现,其特性:

  • 快速比较
  • 支持任意布尔电路
  • 快速 bootstrapping(噪声刷新过程,减少因密文计算而产生的噪音,降低失败可能性)

BGV、BFV是算数电路上的实现,其特性:

  • 在整数向量上进行高效的SIMD计算(使用批处理)
  • 快速高精度整数算术
  • 快速向量的标量乘法
  • Leveled design(通常不使用bootstrapping)

CKKS则是17年才提出来的,其特性:

  • 快速多项式近似计算
  • 相对快速的倒数和离散傅里叶变换
  • 深度近似计算,如逻辑回归学习
  • 在实数向量上进行高效的SIMD计算(使用批处理)
  • Leveled design(通常不使用bootstrapping)

OK,本篇我们重点介绍的是BFV。
BFV方案来源于文章 “Somewhat Practical Fully Homomorphic Encryption”,它是基于 RLWE (Ring-Learning With Errors)难题的全同态加密方案。
先来讲一下环上多项式环,这部分挺重要的,如果不了解的话,可能会对文章阅读造成困难。这里需要比较深厚的离散数学基础。
在这里插入图片描述
更多理论基础可以详见这篇博客:
https://www.zhihu.com/column/c_1320055686139813888

代码分析

继续写!
整个文件只有一个函数example_bfv_basics,然后在example.cpp文件中,当用户选择case1时,系统会调用这个函数,表明将要展示的是bfv算法的例子。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于你的问题,我会尽力回答。不过需要说明的是,我是一个语言模型,并不能直接进行代码实现和运行。以下是基于同态加密SEAL实现同态算法BFV并验证其满足同态性的流程: 1. 安装SEAL并配置环境。SEAL是一个用于实现同态加密的C++,可以在官网(https://www.microsoft.com/en-us/research/project/simple-encrypted-arithmetic-library-seal/)下载。安装完成后需要进行环境配置,主要是设置编译器和SEAL的路径等。 2. 生成加密参数。BFV算法需要一些参数来进行加密和计算,如多项式次数、扰动项数量、模数等。可以使用SEAL提供的工具程序生成这些参数,也可以手动设置。 3. 加密数据。使用SEAL提供的API对需要计算的数据进行加密,得到密文。注意,加密后的数据格式与原始数据不同,需要进行转换。 4. 进行同态计算。使用SEAL提供的API对密文进行同态计算,得到结果密文。BFV算法支持加法和乘法运算,可以进行多次计算。 5. 解密结果。使用SEAL提供的API将结果密文解密得到明文结果。 6. 检验同态性。对于加法和乘法运算,需要验证其是否满足同态性质。即对于两个明文x和y,其加密结果密文为c1和c2,加法的结果为c3,有decrypt(c3) = decrypt(c1) + decrypt(c2);乘法的结果为c3,有decrypt(c3) = decrypt(c1) * decrypt(c2)。 以上就是基于同态加密SEAL实现同态算法BFV并验证其满足同态性的流程。需要注意的是,BFV算法虽然可以实现同态,但是其计算效率较低,且只能处理有限的数据范围。因此在实际应用中需要根据具体情况选择适当的同态加密算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值