BGV/BFV 的统一自举算法

news2024/11/18 8:34:36

参考文献:

  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

[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,算法为:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识汇编指令

1. ARM汇编指令 目的 认识汇编, 从而更好的进行C语言编程 RAM指令格式: 了解 4字节宽度 地址4字节对齐 方便寻址 1.1 指令码组成部分 : condition: 高4bit[31:28] 条件码 0-15 &#xff08;16个值 &#xff09; 条件码: 用于指令的 条件执行 , ARM指定绝大部分 都可…

Kubernetes/k8s之HPA,命名空间资源限制

Horizontal Pod Autoscaling:po的水平自动伸缩 这是k8s自带的模块 pod占用cpu比例达到一定的阀值&#xff0c;会触发伸缩机制。 根据cpu的阀值触发伸缩机制 replication controller 副本控制器 控制pod的副本数 deployment controller 节点控制器 部署pod hpa控制副本的数…

Android开发--状态栏布局隐藏的方法

1.问题如下&#xff0c;安卓布局很不协调 2.先将ActionBar设置为NoActionBar 先打开styles.xml 3.使用工具类 package com.afison.newfault.utils;import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graph…

【Elasticsearch篇】详解使用RestClient操作索引库的相关操作

文章目录 &#x1f354;什么是Elasticsearch&#x1f33a;什么是RestClient&#x1f386;代码操作⭐初始化RestClient⭐使用RestClient操作索引库⭐使用RestClient删除索引库⭐使用RestClient判断索引库是否存在 &#x1f354;什么是Elasticsearch Elasticsearch是一个开源的分…

【设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构】

文章目录 一、什么是LRU&#xff1f;二、LinkedHashMap 实现LRU缓存三、手写LRU 一、什么是LRU&#xff1f; LRU是Least Recently Used的缩写&#xff0c;意为最近最少使用。它是一种缓存淘汰策略&#xff0c;用于在缓存满时确定要被替换的数据块。LRU算法认为&#xff0c;最近…

MySQL两个表的亲密接触-连接查询的原理

MySQL对于被驱动表的关联字段没索引的关联查询&#xff0c;一般都会使用 BNL 算法。如果有索引一般选择 NLJ 算法&#xff0c;有 索引的情况下 NLJ 算法比 BNL算法性能更高。 关系型数据库还有一个重要的概念&#xff1a;Join&#xff08;连接&#xff09;。使用Join有好处&…

Ubuntu22.04报错:ValueError: the symlink /usr/bin/python3 does not point to ...

目录 一、背景 二、如何解决呢&#xff1f; 三、解决步骤 1. 确定可用的 Python 版本 2. 重新设置符号链接 3. 选择默认版本 4. 验证&#xff1a; 四、update-alternatives 详解 1. 命令语法 2. 常用选项 --install添加备选项。 --config&#xff1a;选择默认版本。 …

Linux系统常用命令行指令

Linux系统是一种常用于开源项目开发的生产环境&#xff0c;因其免费、开源、安全、稳定的特点被广泛应用于手机、平板电脑、路由器、电视和电子游戏机等嵌入式系统中&#xff0c;能够更加简便地让用户知道系统是怎样工作的。前几日我安装好了Red Hat Enterprise Linux 9.0&…

新书速览|小学生C++创意编程(视频教学版)

本书让入门C变得轻松易懂&#xff0c;逐步入学。学习一步一个台阶&#xff0c;让孩子不会被其中的难度而吓退。 本书内容 C是信息学奥赛指定的编程语言。本书以通俗易懂的方式深入浅出地介绍了C编程语言&#xff0c;适合作为小学生学习的教材类读物。 《小学生C创意编程&#…

uniapp css样式穿透

目录 前言css样式穿透方法不加css样式穿透的代码加css样式穿透的代码不加css样式穿透的代码 与 加css样式穿透的代码 的差别参考 前言 略 css样式穿透方法 使用 /deep/ 进行css样式穿透 不加css样式穿透的代码 <style>div {background-color: #ddd;} </style>…

opencv#33 边缘检测

边缘检测原理 图像的每一行每一列都可以看成是一个连续的信号经过离散后得到的数值&#xff0c;例如上图左侧给出的图像由黑色到白色的一个信号&#xff0c;也就是图像中某一行像素变化是由黑色逐渐到白色&#xff0c;我们将其对应在一个坐标轴中&#xff0c;将像素值的大小对应…

Linux下安装 Redis7

Linux下安装 Redis7 三、Linux下安装 Redis7【redis-7.2.4.tar.gz】3.1.下载redis的安装包3.1.1.手动下载Redis压缩包并上传【redis-7.2.4.tar.gz】3.1.2.wget工具下载redis-7.2.4.tar.gz 3.2.将安装包进行解压缩3.3.进入redis的安装包3.4.检查是否有gcc 环境3.5.编译和安装并指…

Java基础数据结构之排序

一.排序 1.什么是稳定性 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持 不变&#xff0c;即在原序列中&#xff0c; r[i]r[j] &#xff0c;且 r[i] 在 r[j] 之前&#xff0c;而在排序后的序…

Oladance、韶音、南卡开放式耳机,究竟谁在性能与音质上达到巅峰?

​开放式耳机作为新型耳机&#xff0c;以其开放性设计、舒适性和音质表现受到用户青睐。然而&#xff0c;随着市场的繁荣&#xff0c;一些品牌为谋取暴利可能采用劣质材料、不合规的工艺标准制作产品&#xff0c;导致耳机做工质量差&#xff0c;音质差。作为资深音频测评师&…

C++入门语法———命名空间,缺省参数,重载函数

文章目录 一.命名空间1.存在意义2.语法使用1.定义命名空间2.使用命名空间的三种方式 二.缺省参数1.全缺省参数2.半缺省参数 三.重载函数1.定义2.重载原理———名字修饰 一.命名空间 1.存在意义 C命名空间的主要意义是为了避免命名冲突&#xff0c;尤其是在大型项目中可能存在…

图卷积网络(GCN)

本文主要分为两部分&#xff0c;第一部分介绍什么是GCN&#xff0c;第二部分将进行详细的数学推导。 一、什么是GCN 1、GCN 概述 本文讲的GCN 来源于论文&#xff1a;SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS&#xff0c;这是在GCN领域最经典的论文…

【Java并发】聊聊活锁

在并发编程中&#xff0c;为了保证数据安全性&#xff0c;所以使用锁机制&#xff0c;syn lock cas 等方式保证&#xff0c;但是也从一定程度降低了性能。而除了这个方面&#xff0c;还引入了锁竞争&#xff0c;比如死锁、活锁。 【Java并发】聊聊死锁 避免死锁&#xff1a;避…

动静态库的理解、制作、使用。

一.动静态库的理解。 1.什么是库&#xff1f; 代码是无穷无尽的&#xff0c;当程序猿在写一些项目时&#xff0c;未必所有代码亲历亲为&#xff0c;他们可以在网上寻找大佬写过的一些有关需求的代码&#xff0c;这些代码可以让他们拿过来直接使用&#xff0c;而省去了许多精力…

Linux中文件属性的获取(stat、chmod、Istat、fstat函数的使用)

修改文件权限 函数如下&#xff1a; chmod/fchmod函数用来修改文件的访问权限: #include <sys/stat.h> int chmod(const char *path, mode_t mode); int fchmod(int fd, mode_t mode); 成功时返回0&#xff1b;出错时返回EOF 注意&#xff1a;在vmware和windows共享的文…

K8S的HPA

horiztal Pod Autoscaling&#xff1a;pod的水平自动伸缩&#xff0c;这是k8s自带的模块&#xff0c;它是根据Pod占用cpu比率到达一定的阀值&#xff0c;会触发伸缩机制 Replication controller 副本控制器&#xff1a;控制pod的副本数 Deployment controller 节点控制器&…