BGV/BFV 的统一自举算法

参考文献:

  1. [GV23] Geelen R, Vercauteren F. Bootstrapping for BGV and BFV Revisited[J]. Journal of Cryptology, 2023, 36(2): 12.
  2. Bit Extraction and Bootstrapping for BGV/BFV

文章目录

  • Bootstrapping for BGV and BFV
    • Decryption Function
      • BGV
      • BFV
    • Bootstrapping Procedure
  • Homomorphic Linear Transformations
    • One-Dimensional Linear Transformations
    • Slot-to-Coefficient
      • General Case
      • Power-of-Two Cyclotomics
  • Digit Extraction
    • Halevi/Shoup Procedure
    • Chen/Han Procedure
  • Bootstrapping for BGV/BFV/CKKS

[GV23] 给出了 BGV 和 BFV 的统一自举算法,指出两者复杂度是相同的。

Bootstrapping for BGV and BFV

Decryption Function

稍微滥用符号, r r r 表示 hensel lifting 或者 overflow, e e e 表示待自举密文的模数规模或者加密噪声。

密文模数 q q q,明文模数 p r p^r pr,分圆整数环 R = Z [ X ] / ( Φ m ( X ) ) R=\mathbb Z[X]/(\Phi_m(X)) R=Z[X]/(Φm(X))

BGV

BGV 的密文形如:
c 0 + c 1 ⋅ s = m + p r e ( m o d q ) c_0+c_1\cdot s = m+p^re \pmod{q} c0+c1s=m+pre(modq)
假设 q ≡ 1 ( m o d p e ) q\equiv1\pmod{p^e} q1(modpe)(这比 [HS15] 的要求松一些),解密可以简化为:

  1. 缩放 c i ′ ← [ p e − r c i ] q c_i' \gets [p^{e-r}c_i]_q ci[perci]q
  2. 内积 w ← [ c 0 ′ + c 1 ′ ⋅ s ] p e w \gets [c_0' + c_1' \cdot s]_{p^e} w[c0+c1s]pe
  3. 纠错 m ← [ ⌊ w / p e − r ⌉ ] p r m \gets [\lfloor w/p^{e-r}\rceil]_{p^r} m[⌊w/per]pr

现在我们确定参数 e e e 的合适数值,过大则自举效率很慢,过小则自举结果错误。我们计算
u = p e − r ( c 0 + c 1 ⋅ s ) = p e − r ( m + p r e ) + q r u = p^{e-r}(c_0+c_1\cdot s) = p^{e-r}(m+p^re) + qr u=per(c0+c1s)=per(m+pre)+qr
根据 q ≡ 1 ( m o d p e ) q\equiv1\pmod{p^e} q1(modpe),那么有
w = [ u ] p e = [ p e − r m + r ] p e w = [u]_{p^e} = [p^{e-r}m + r]_{p^e} w=[u]pe=[perm+r]pe
这个解密噪声是 MSD 编码的(原始 BGV 的是 LSD 编码)。为了纠错的正确性,需要满足 ∥ r ∥ ∞ ≤ p e − r / 2 \|r\|_\infty \le p^{e-r}/2 rper/2,用它的上界来约束,
∥ r ∥ ∞ ≤ ∥ ( c 0 ′ + c 1 ′ s ) / q ∥ ∞ + ∥ p e − r m / q ∥ ∞ + ∥ p e e / q ∥ ∞ \|r\|_\infty \le \|(c_0'+c_1's)/q\|_\infty + \|p^{e-r}m/q\|_\infty + \|p^ee/q\|_\infty r(c0+c1s)/q+perm/q+pee/q
简记 d i = c i ′ / q d_i=c_i'/q di=ci/q,那么近似要求
∥ d 0 + d 1 s ∥ ∞ + ∥ p e e / q ∥ ∞ < p e − r / 2 \|d_0+d_1s\|_\infty + \|p^ee/q\|_\infty < p^{e-r}/2 d0+d1s+pee/q<per/2
根据 [HS15] 的启发式估计,我们再假设 d i ∈ [ − 0.5 , 0.5 ] d_i \in [-0.5,0.5] di[0.5,0.5] 是均匀的,那么有:

在这里插入图片描述

选定参数 k k k,给定私钥汉明重量 h h h 和分圆次数 m m m 及其分解个数 t t t,确定出 d 1 ⋅ s d_1\cdot s d1s 高概率的启发式上界,求出可满足约束条件的最小的 e e e 取值

由于 C C C 正比于 h \sqrt h h ,因此导致了 p e − r / 2 p^{e-r}/2 per/2 正比于 h \sqrt h h ,这使得稠密私钥的所需 e e e 较大,自举效率很低。一种技巧是,自举前执行 Key-Switch 切换到一个稀疏秘密 s ~ \tilde s s~ 上,自举秘钥也相应地修改为 E s ( s ~ ) E_{s}(\tilde s) Es(s~)。由于 s s s 用于加密消息,而 s ~ \tilde s s~ 仅用于执行自举(在最低层),因此后者的密文模数很小,安全性可以保证。

BFV

BFV 的密文形如:
c 0 + c 1 ⋅ s = ⌊ q p r ⋅ m ⌉ + e ( m o d q ) c_0+c_1\cdot s = \left\lfloor\frac{q}{p^r} \cdot m\right\rceil + e \pmod{q} c0+c1s=prqm+e(modq)
对于 q q q 没有要求,解密可以简化为:

  1. 缩放 c i ′ ← [ ⌊ ( p e / q ) ⋅ c i ⌉ ] p e c_i' \gets [\lfloor(p^e/q)\cdot c_i\rceil]_{p^e} ci[⌊(pe/q)ci]pe
  2. 内积 w ← [ c 0 ′ + c 1 ′ ⋅ s ] p e w \gets [c_0' + c_1' \cdot s]_{p^e} w[c0+c1s]pe
  3. 纠错 m ← [ ⌊ w / p e − r ⌉ ] p r m \gets [\lfloor w/p^{e-r}\rceil]_{p^r} m[⌊w/per]pr

对比 BGV 的解密函数,两者仅在第一步的缩放有所不同。

我们确定它的 e e e 取值,简记 d i = c i ′ − ( p e / q ) ⋅ c i d_i=c_i'-(p^e/q)\cdot c_i di=ci(pe/q)ci,简记 ϵ = ⌊ ( q / p r ) ⋅ m ⌉ − ( q / p r ) ⋅ m \epsilon = \lfloor(q/p^r) \cdot m\rceil-(q/p^r) \cdot m ϵ=⌊(q/pr)m(q/pr)m
w = [ ( p e / q ) ⋅ ( c 0 + c 1 s ) + ( d 0 + d 1 s ) ] p e = [ ( p e / q ) ⋅ ( ( q / p r ) ⋅ m + e + ϵ ) + ( d 0 + d 1 s ) ] p e = [ p e − r m + ( d 0 + d 1 s ) + p e / q ⋅ ( e + ϵ ) ] p e \begin{aligned} w &= [(p^e/q)\cdot (c_0+c_1s) + (d_0+d_1s)]_{p^e}\\ &= [(p^e/q)\cdot((q/p^r) \cdot m+e+\epsilon) + (d_0+d_1s)]_{p^e}\\ &= [p^{e-r}m+(d_0+d_1s)+p^e/q\cdot(e+\epsilon)]_{p^e} \end{aligned} w=[(pe/q)(c0+c1s)+(d0+d1s)]pe=[(pe/q)((q/pr)m+e+ϵ)+(d0+d1s)]pe=[perm+(d0+d1s)+pe/q(e+ϵ)]pe
为了纠错的正确性,需要使得噪声项满足约束,可近似为
∥ d 0 + d 1 s ∥ ∞ + ∥ p e e / q ∥ ∞ < p e − r / 2 \|d_0+d_1s\|_\infty + \|p^ee/q\|_\infty < p^{e-r}/2 d0+d1s+pee/q<per/2
这和 BGV 的约束完全一样。根据 [HS15] 的启发式估计,确定出满足它的 e e e 最小值。也可以用类似的技术降低私钥的汉明重量。

Bootstrapping Procedure

上述的解密函数,经过缩放和内积后,无论是 BGV 还是 BFV,它们的相位都是 MSD 编码的,因此可以统一使用 remove LSD 的自举流程。

Thick 版本:

在这里插入图片描述

Thin 版本:

在这里插入图片描述

Homomorphic Linear Transformations

One-Dimensional Linear Transformations

[HS15] 将线性映射 Slot-to-Coeff 和 Coeff-to-Slot 分解为若干的一维线性变换。它包括两类,

  • E E E-linear transformations:使用了 [HS18] 的 BSGS 矩阵向量乘法技巧,作用在明文槽超立方的某个维度的超列上,不同超列的变换可以不同
  • Z p r \mathbb Z_{p^r} Zpr-linear transformations:使用 Frobenius map 实现明文槽 E ≅ Z p r d E \cong \mathbb Z_{p^r}^d EZprd 内的线性变换,再复合上 BSGS 的明文槽之间的线性变换

Slot-to-Coefficient

General Case

[HS15] 使用 BSGS 乘法技巧,以及 Powerful Basis,给出了通用的线性映射。将 m m m 分解为 t t t 个素数幂乘积,迭代执行 t t t 个阶段的多项式的多点求值,每个多点求值都是某个超列上的一维线性变换。

Power-of-Two Cyclotomics

[HS18] 针对二的幂分圆环以及稀疏打包明文,给出了更加高效的线性映射。首先利用自同构加倍/消除各个位置的系数,从而挑选出子环所对应的稀疏系数;然后对这个稀疏的系数执行特化的 Coeff-to-Slot 变换。

Digit Extraction

[GV23] 比较了 [HS15] 和 [CH18] 的数字提取技术的复杂度。假设 v = e − r v=e-r v=er 是需要移除的数位个数,那么:

在这里插入图片描述

我们令 m , h , v m,h,v m,h,v 都是常数(也就是 e = r + v e=r+v e=r+v 随着 r r r 线性增长),可以发现:

  1. [HS15] 的乘法深度是关于 r r r 线性的
  2. [CH18] 的乘法深度是关于 r r r 对数的
  3. 在较小参数下,[CH18] 的乘法数量更多,但是渐进意义下的复杂度更低

Halevi/Shoup Procedure

[HS15] 采用 lifting polynomial,算法为:

在这里插入图片描述

Chen/Han Procedure

[CH18] 采用 lowest digit retain polynomial,算法为:

在这里插入图片描述

Bootstrapping for BGV/BFV/CKKS

为了比较不同 BV-like 方案的自举算法,我画了如下的示意图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/346895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目管理中,项目经理如何预防需求蔓延?

在项目管理中&#xff0c;需求蔓延是一个常见的问题&#xff0c;需求蔓延可能会导致项目进度延误、成本增加和产品质量下降。为了防止这种情况发生&#xff0c;项目经理需要采取一系列措施来预防需求蔓延。 一、明确项目范围和需求 项目经理需要在项目开始阶段明确项目范围和…

【云原生】Docker 网络

目录 Docker 网络实现原理 查看容器的输出和日志信息 Docker 的网络模式&#xff1a; 使用docker run创建Docker容器时&#xff0c;可以用 --net 或 --network 选项指定容器的网络模式 网络模式详解 1&#xff0e;host模式 2&#xff0e;container模式 --name 选项可以…

【开源】基于JAVA+Vue+SpringBoot的婚恋交友网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

数据结构之二叉树的遍历

数据结构是程序设计的重要基础&#xff0c;它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发&#xff0c;分析和研究计算机加工的数据的特性&#xff0c;以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法…

STM32F407移植OpenHarmony笔记1

参考文档&#xff1a; OpenAtom OpenHarmonywidthdevice-width,initial-scale1.0https://docs.openharmony.cn/pages/v3.2/zh-cn/device-dev/get-code/gettools-acquire.md/ 搭建环境 安装linux系统: Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-91-generic x86_64) 下载源代码&a…

【服务器GPT+MJ+GPTs】创建部署GPT+MJ+GPTs程序网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建GPT+MJ+GPTs】 🌼1. 给服务器添加端口 🌼2. 安装宝塔 🌼3. 安装Docker 🌼4. 安装ChatGPT程序 🌼5. 程序更新 🌼6. 修改端口 | 密码 🌼7. 绑定域名+申请SSL证书 🌺【前言】 相信大家都对openai的产品ch…

【洛谷】P1443 马的遍历(BFS)

由于在 x&#xff0c;y 表示 x 行 y 列还是 y 行 x 列上存在歧义&#xff0c;另外提供一组测试数据&#xff1a; // input: 5 5 2 3// output: 1 2 3 2 1 2 3 0 3 2 1 2 3 2 1 4 1 2 1 4 3 2 3 2 3 可以说&…

Qt基础-窗体添加图标

本文演示Qt窗体如何添加图标 创建项目添加资源文件 打开窗体的设计窗口 选择windowIcon属性&#xff0c;点击下箭头-选择资源&#xff0c;选择资源文件&#xff0c;(格式不受限制) 点击OK即可 运行看效果

【小呆的力学笔记】弹塑性力学的初步认知二:应力应变分析(2)

文章目录 1.4 主应力空间、八面体应力1.5 应变分析1.6 特殊应力、应变定义 1.4 主应力空间、八面体应力 一点的应力状态不论如何变化&#xff0c;其主应力和主方向一致的话&#xff0c;该点的应力状态就是唯一确定的。因此&#xff0c;我们用主应力方向建立一个三维坐标系来描…

【Linux】基础命令及测试工作常用

一、Linux基础命令 【基础】 tab补全 chtrlc停止进程 绝对路径&#xff1a; 以 / 开头&#xff0c;从根目录下开始寻找路径 相对路径&#xff1a; 不以 / 开头&#xff0c;从当前目录下开始寻找 1、系统管理相关命令 ifconfig 显示或设置网络设备的命令&#xff0c;我们可…

[实战]加密传输数据解密

前言 下面将分享一些实际的渗透测试经验&#xff0c;帮助你应对在测试中遇到的数据包内容加密的情况。我们将以实战为主&#xff0c;技巧为辅&#xff0c;进入逆向的大门。 技巧 开局先讲一下技巧&#xff0c;掌握好了技巧&#xff0c;方便逆向的时候可以更加快速的找到关键函数…

mybatisplus做SQL拦截添加自定义排序

前言 工作中写的一段代码&#xff0c;备个份&#xff0c;以后兴许能直接用 功能描述&#xff1a;如果前端传入了排序规则&#xff0c;则优先按传入的字段进行排序&#xff0c;SQL原有的排序规则追加到末尾 注&#xff1a;我们项目里的分页查询&#xff0c;是基于XML的SQL执行的…

RedisInsight详细安装教程

简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具&#xff0c;它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控&#xff0c;并且可以在界面上使用 CLI 和连接的 Redis 进行交互&#xff08;RedisInsight 内置对 Redis 模块支持&#xff09;。 RedisIn…

第四篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:机器学习

传奇开心短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列短博文 短博文目录一、项目目标二、OpenCV机器学习介绍三、OpenCV支持向量机示例代码四、OpenCV支持向量机示例代码扩展五、OpenCVK均值聚类示例代码六、OpenCVK均值聚类示例代码扩展七、OpenCV决策树示例…

调优 mybatis saveBatch 25倍性能

调优 mybatis saveBatch 25倍性能 最近在压测一批接口&#xff0c;发现接口处理速度慢的有点超出预期&#xff0c;感觉很奇怪&#xff0c;后面定位发现是数据库批量保存这块很慢。 这个项目用的是 mybatis-plus&#xff0c;批量保存直接用的是 mybatis-plus 提供的 saveBatch…

Geogebra绘制正态分布曲线-学习b站何威老师视频

​ 参考资料 GeoGebra系列教程3——GGB与正态分布密度曲线_哔哩哔哩_bilibili 我要开始学习啦&#xff0c;吼吼~~~ 准备工作 https://www.geogebra.org/download 选择GeoGebra 经典 6 详细步骤 设计思路具体操作设计积分区间【a,b】创建滑动条a∈[-5,5]&#xff0c;增量是…

P4学习(七)实验四:Explicit Congestion Notification

目录 一. 实验目的二.前置知识略概三. 实验过程1. Topo2. Egress 三. 实验结果1.启动监听服务端2.发送数据包3.查看h2.log的数据4.Iperf模拟Flood超过门限 四.为什么要在Egress上进行ecn的配置 一. 实验目的 ECN allows end-to-end notification of network congestion without…

Android SeekBar 进度条圆角

先看下效果图&#xff1a; 之前&#xff1a; 优化后&#xff1a; 之前的不是圆角是clip切割导致的 全代码&#xff1a; <SeekBarandroid:layout_width"188dp"android:layout_height"wrap_content"android:background"null"android:focusa…

专门为机器学习开发的jpy语言

这本来是一个为工科教学专门开发的附属品&#xff0c;并不是说Python或Java有多不好&#xff0c;根本上它就是一个Java工程教材&#xff0c;但又要结合人工智能。因此&#xff0c;出现了这样一个包容性的怪胎&#xff0c;可以用python一样的语法与Java一起编写。 没流行起来的一…

一个使用pyqt的word文档查重工具

一个使用pyqt的word文档查重工具 使用场景代码使用截图打包好的软件下载链接结尾 使用场景 有时我们在借鉴一篇文档之后还不想有太多重复&#xff0c;这个时候可以使用这个工具对两个word文档进行对比 代码 import sys from PyQt5.QtWidgets import QApplication, QMainWind…