SEAL:RLWE-BFV 开源算法库

news2024/11/16 1:20:06

参考文献:

  1. GitHub - microsoft/SEAL: Microsoft SEAL is an easy-to-use and powerful homomorphic encryption library.
  2. [HS13] Halevi S, Shoup V. Design and implementation of a homomorphic-encryption library[J]. IBM Research (Manuscript), 2013, 6(12-15): 8-36.
  3. [DGL+15] Dowlin N, Gilad-Bachrach R, Laine K, et al. Manual for using homomorphic encryption for bioinformatics[J]. 2015.
  4. [CLP17] Chen H, Laine K, Player R. Simple encrypted arithmetic library-SEAL v2. 1[C]//Financial Cryptography and Data Security: FC 2017 International Workshops, WAHC, BITCOIN, VOTING, WTSC, and TA, Sliema, Malta, April 7, 2017, Revised Selected Papers 21. Springer International Publishing, 2017: 3-18.
  5. [Alb15] Martin R. Albrecht, Rachel Player, and Sam Scott. On the concrete hardness of learning with errors. J. Mathematical Cryptology,9(3):169–203, 2015.
  6. [APS15] Martin R. Albrecht, Rachel Player, and Sam Scott. On the concrete hardness of learning with errors. J. Mathematical Cryptology,9(3):169–203, 2015.

文章目录

  • BFV 变体
  • 参数选取
  • 编码算法
    • Scalar Encoder
    • Integer Encoder
    • Fractional Encoder

BFV 变体

微软 [DGL+15] 给出了 BFV 的简单实现 SEAL(Simple Encrypted Arithmetic Library),之后的 [CLP17] 描述了 SEAL v2.1 版本。

SEAL 认为 BFV 的重线性化太慢了,因此它的同态乘法忽略了重线性化操作,仅在必要时才手动降低密文规模。

分园多项式环 R = Z [ x ] / ( x n + 1 ) R=\mathbb Z[x]/(x^n+1) R=Z[x]/(xn+1),明文空间 R t R_t Rt,密文空间 ⋃ k ≥ 2 R t k \bigcup_{k \ge 2} R_t^k k2Rtk

  • 加密算法:将 a ( x ) ∈ R t a(x) \in R_t a(x)Rt 加密为向量 c t = ( c 0 , c 1 ) ct=(c_0,c_1) ct=(c0,c1),满足
    q t ⋅ a ≈ c t ( s ) = c 0 + c 1 s \dfrac{q}{t} \cdot a \approx ct(s) = c_0+c_1s tqact(s)=c0+c1s

  • 同态加法:输入 c t 1 = ( c 0 , ⋯   , c j ) ct_1=(c_0,\cdots,c_j) ct1=(c0,,cj) c t 2 = ( d 0 , ⋯   , d k ) ct_2=(d_0,\cdots,d_k) ct2=(d0,,dk),假设 j ≤ k j \le k jk
    c t a d d = ( [ c 0 + d 0 ] q , ⋯   , [ c j + d j ] q , d j + 1 , ⋯   , d k ) ct_{add} = ([c_0+d_0]_q,\cdots,[c_j+d_j]_q,d_{j+1},\cdots,d_k) ctadd=([c0+d0]q,,[cj+dj]q,dj+1,,dk)

  • 同态乘法:输入 c t 1 = ( c 0 , ⋯   , c j ) ct_1=(c_0,\cdots,c_j) ct1=(c0,,cj) c t 2 = ( d 0 , ⋯   , d k ) ct_2=(d_0,\cdots,d_k) ct2=(d0,,dk) c t m u l t = ( C 0 , ⋯   , C j + k ) ct_{mult} = (C_0,\cdots,C_{j+k}) ctmult=(C0,,Cj+k)
    C i = [ ⌊ t q ∑ r + s = i c r d s ⌉ ] q C_i = \left[\left\lfloor \dfrac{t}{q}\sum_{r+s=i} c_rd_s \right\rceil\right]_q Ci=[qtr+s=icrds]q

  • 解密算法:输入 c t = ( c 0 , ⋯   , c k ) ct=(c_0,\cdots,c_k) ct=(c0,,ck),先计算
    c t ( s ) = ∑ i c i s i ∈ R q ct(s) = \sum_i c_is^i \in R_q ct(s)=icisiRq
    再解码出 a = [ ⌊ t / q ⋅ c t ( s ) ⌉ ] t ∈ R t a = [\lfloor t/q \cdot ct(s) \rceil]_t \in R_t a=[⌊t/qct(s)⌉]tRt

另外,SEAL 扩展了 evaluation key 和 relinearization。假设把 q q q w w w 进制展开为 l + 1 l+1 l+1 比特,以控制噪声增长。采样 a j i ← R q , e j i ← χ a_{ji} \gets R_q,e_{ji} \gets \chi ajiRq,ejiχ,分别加密 s j , ∀ j ≥ 2 s^j,\forall j \ge 2 sj,j2
e v k j = [ ( w 0 s j − ( a j , 0 s + e j , 0 ) , a j , 0 ) , ⋯   , ( w l s j − ( a j , l s + e j , l ) , a j , l ) ] evk_j = [(w^0s^j-(a_{j,0}s+e_{j,0}),a_{j,0}),\cdots,(w^ls^j-(a_{j,l}s+e_{j,l}),a_{j,l})] evkj=[(w0sj(aj,0s+ej,0),aj,0),,(wlsj(aj,ls+ej,l),aj,l)]

给定 e v k 2 , ⋯   , e v k k evk_2,\cdots,evk_k evk2,,evkk,输入 c t = ( c 0 , ⋯   , c k ) ct=(c_0,\cdots,c_k) ct=(c0,,ck),令 c k ( i ) c_k^{(i)} ck(i) 是它的 w w w 进制分解,可以计算同态数乘
c 0 ′ = c 0 + ∑ i = 0 l e v k k [ i ] [ 0 ] ⋅ c k ( i ) c 1 ′ = c 1 + ∑ i = 0 l e v k k [ i ] [ 1 ] ⋅ c k ( i ) c j ′ = c j , ∀ 2 ≤ j ≤ k − 1 c_0' = c_0 + \sum_{i=0}^l evk_k[i][0] \cdot c_k^{(i)}\\ c_1' = c_1 + \sum_{i=0}^l evk_k[i][1] \cdot c_k^{(i)}\\ c_j' = c_j, \forall 2 \le j \le k-1 c0=c0+i=0levkk[i][0]ck(i)c1=c1+i=0levkk[i][1]ck(i)cj=cj,∀2jk1

得到 c t ′ = ( c 0 ′ , ⋯   , c k − 1 ′ ) ct' = (c_0',\cdots,c'_{k-1}) ct=(c0,,ck1),迭代多次回到 c t ′ ′ = ( c 0 ′ ′ , c 1 ′ ′ ) ct''=(c_0'',c_1'') ct′′=(c0′′,c1′′)

参数选取

[HS13] 给出了 BGV 的代码实现 HElib,但是并没有给出最佳参数选取,需要经过实机测试。[CLP17] 给出了一些参数选取的思路:

  1. 密文模数 q q q 形如 2 A − B 2^A-B 2AB伪梅森素数),其中 B B B 是绝对值很小的整数。此时,存在快速的模约简算法。
  2. 满足 2 n ∣ q − 1 2n|q-1 2nq1,从而可以使用 NTT 计算密文多项式的乘法。
  3. 满足 t ∣ q − 1 t|q-1 tq1,此时 q = Δ t + r t ( q ) q = \Delta t+r_t(q) q=Δt+rt(q) 中的余数 r t ( q ) = 1 r_t(q)=1 rt(q)=1 很小,从而使得同态运算的噪声项 p o l y ( e 1 , e 2 , r t ( q ) ) poly(e_1,e_2,r_t(q)) poly(e1,e2,rt(q)) 更小一些。

高斯噪声的标准差 σ = 3.19 \sigma = 3.19 σ=3.19,此时的高斯宽度 α q = σ 2 π ≈ 8 \alpha q=\sigma \sqrt{2\pi} \approx 8 αq=σ2π 8

[Alb15] 提出了针对 “short secret” LWE 的一种新型 BKW-style dual-lattice attack,将 HElib 和 SEAL 的安全强度降低了大约 20 20 20 比特。在 [APS15] 中实现的 LWE estimator 集成了这种攻击。

SEAL v2.1 的参数选取 ( n , q , α ) (n,q,\alpha) (n,q,α) 以及安全强度:

在这里插入图片描述

编码算法

由于 BFV 计算的是多项式的加法/乘法,我们希望把数值(int, float, bool)编码为多项式,并且保持同态性质。于是,我们需要同态的编码方案:只要不越界 t t t x n + 1 x^n+1 xn+1,那么就可以正确解码。

Scalar Encoder

给定整数 a ∈ Z a \in \mathbb Z aZ,编码为常数多项式 a ( x ) = a ∈ R t a(x) = a \in R_t a(x)=aRt,只要同态运算过程中不越界 t t t 那么解码正确

对于布尔值 b ∈ { 0 , 1 } b \in \{0,1\} b{0,1},我们设置 t = 2 t=2 t=2,于是 b ( x ) = b ∈ R 2 b(x)=b \in R_2 b(x)=bR2,运算过程中自动模掉 2 2 2

为了高效计算 XOR、AND,也可以选取 2 n ∣ t − 1 2n|t-1 2nt1,从而 R t ≅ G F ( t ) n R_t \cong GF(t)^n RtGF(t)n,以 CRT/SIMD 形式并行。

Integer Encoder

但是 Scalar Encoder 实在太浪费了,SEAL 提出可以把整数分解后编码到多项式上。并且分解后的系数较小,也不太容易越过 t t t 导致溢出。

对于 w = 2 w=2 w=2 分解, n + 1 n+1 n+1 比特的带符号整数 a = ( − 1 ) a n ⋅ ∑ i = 0 n − 1 a i 2 i a=(-1)^{a_n} \cdot\sum_{i=0}^{n-1} a_i2^i a=(1)ani=0n1ai2i,编码函数为:
a ( x ) = ( − 1 ) a n ⋅ ∑ i = 0 n − 1 a i x i ( m o d x n + 1 , t ) a(x) = (-1)^{a_n} \cdot \sum_{i=0}^{n-1} a_i x^i \pmod{x^n+1,t} a(x)=(1)ani=0n1aixi(modxn+1,t)

易知,解码函数就是 a = a ( 2 ) a = a(2) a=a(2) 是多项式求值。于是有:

  • 整数加法 a + b    ⟺    a ( x ) + b ( x ) ( m o d x n + 1 , t ) a+b \iff a(x)+b(x) \pmod{x^n+1,t} a+ba(x)+b(x)(modxn+1,t),它的系数是在 Z \mathbb Z Z 上的,但是用 Z t \mathbb Z_t Zt 来模拟。
  • 整数乘法 a ⋅ b    ⟺    a ( x ) ⋅ b ( x ) ( m o d x n + 1 , t ) a \cdot b \iff a(x) \cdot b(x) \pmod{x^n+1,t} aba(x)b(x)(modxn+1,t),它的多项式是在 Z [ x ] \mathbb Z[x] Z[x] 上的,但是用 Z t [ x ] / ( x n + 1 ) \mathbb Z_t[x]/(x^n+1) Zt[x]/(xn+1) 模拟。
  • 整数 XOR 也是容易的,但是整数 AND 无法计算。

对于 w ≥ 3 w \ge 3 w3,采取 balanced base- w w w representation,多项式每个系数的范围是 { − ⌊ w / 2 ⌋ , ⋯   , 0 , ⋯ ⌊ w / 2 ⌋ } \{-\lfloor w/2\rfloor,\cdots,0,\cdots\lfloor w/2\rfloor\} {w/2,,0,w/2⌋},这使得同态运算时的系数增长的没那么快。

Fractional Encoder

对于有限精度的实数 a ∈ R a \in \mathbb R aR,我们可以采用 Scale + Integer Encoder 的方式,形如 ( a ( x ) , δ ) (a(x),\delta) (a(x),δ),但是同态计算时需要追踪 scale 的变化,并且不同 scale 之间做运算还需要转换。

SEAL 提出了另一种编码器。有限精度实数 a = a + . a − a=a^+.a^- a=a+.a

  • 整数部分: a + = a n i a n i − 1 ⋯ a 0 a^+=a_{n_i}a_{n_i-1}\cdots a_0 a+=aniani1a0
  • 小数部分: a − = a − 1 ⋯ a − n f a^-=a_{-1}\cdots a_{-n_f} a=a1anf
  • 符号位 a n i + a_{n_i}^+ ani+,整数部分的精度为 n i n_i ni,小数部分的精度为 n f n_f nf

编码函数为:
a ( x ) = ( − 1 ) a n i + ⋅ ( ∑ i = 0 n i − 1 a i + x i − ∑ i = 0 n f − 1 a i − x n − i ) ( m o d x n + 1 , t ) a(x) = (-1)^{a_{n_i}^+} \cdot \left(\sum_{i=0}^{n_i-1} a_i^+ x^i - \sum_{i=0}^{n_f-1} a_i^- x^{n-i}\right) \pmod{x^n+1,t} a(x)=(1)ani+ i=0ni1ai+xii=0nf1aixni (modxn+1,t)

由于 ( m o d x n + 1 ) \pmod{x^n+1} (modxn+1)因此小数部分的 Integer Encoder 带有负号。容易验证, a + b    ⟺    a ( x ) + b ( x ) a+b \iff a(x)+b(x) a+ba(x)+b(x) a b    ⟺    a ( x ) b ( x ) ab \iff a(x)b(x) aba(x)b(x),只要不越过边界 x n + 1 x^n+1 xn+1 t t t。我们需要设置 n i + n f ≤ n − 1 n_i+n_f \le n-1 ni+nfn1,保证整数部分和小数部分不重叠。

如果在同态运算过程中,小数部分的 LSB 被消除(系数是 0 0 0)、整数部分的 MSB 被消除(系数是 0 0 0),那么对应的精度 n i , n f n_i,n_f ni,nf 也会相应缩小。比较 Scale + Integer Encoder,它的 Scale 不断增长,很容易越过 x n + 1 x^n+1 xn+1 导致溢出。

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

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

相关文章

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition)&#x…

【python零基础入门学习】python进阶篇之OOP - 面向对象的程序设计

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

MS5248数模转换器可pin对pin兼容AD5648

MS5228/5248/5268 是一款 12/14/16bit 八通道输出的电压型 DAC,内部集成上电复位电路、可选内部基准、接口采用四线串口模式,最高工作频率可以到 40MHz,可以兼容 SPI、QSPI、DSP 接口和 Microwire 串口。可pin对pin兼容AD5648。输出接到一个 …

潮玩IP助力环境保护,泡泡玛特发布行业首款碳中和产品

在今年的2023上海PTS国际潮流玩具展上,泡泡玛特正式发布了首款“碳中和”潮玩产品DIMOO X蒙新河狸手办(下简称DIMOO河狸),通过环保主题与流行文化的联合,让年轻人知道野生动物保护有多种方式,同时以创新的设…

Crypto(3)NewStarCTF 2023 公开赛道 WEEK2|Crypto-不止一个pi

题目代码 from flag import flag from Crypto.Util.number import * import gmpy2 p getPrime(1024) #这行生成一个大约1024位长度的随机素数,并将其赋给变量p。 q getPrime(1024) #类似地,这行生成另一个大约1024位长度的随机素数,并将其…

Fortinet详解如何量化网安价值,把握网安态势

网络安全价值量化是企业准确把握自身网络安全态势的前提,也是网络安全管理人员持续推动工作的有力支撑。网络安全行业发展迅速,其价值量化也在不断地演进,如何进行量化则一直都是企业和网络安全管理人员的挑战。近期,Fortinet 委托…

【视觉算法系列2】在自定义数据集上训练 YOLO NAS(上篇)

提示:免费获取本文涉及的完整代码与数据集,请添加微信peaeci122 YOLO-NAS是目前最新的YOLO目标检测模型,它在准确性方面击败了所有其他 YOLO 模型。与之前的 YOLO 模型相比,预训练的 YOLO-NAS 模型能够以更高的准确度检测更多目标…

【三】kubernetes kuboard部署分布式系统

#服务器 #部署 #云原生 #k8s 目录 一、前言二、搭建docker私有仓库三、系统搭建1、NFS部署1)部署nfs server (192.168.16.200)2)部署nfs client (全部节点)3)在Kuboard中创建 NFS 存储类 2、创建命名空间3、添加docker密文4、创建…

Nginx 配置文件解读

一.配置文件解读 nginx配置文件主要分为四个部分: main{ #(全局设置)http{ #服务器配置upstream{} #(负载均衡服务器设置)server{ #(主机设置:主要用于指定主机和端口)location{} …

Flink学习之旅:(三)Flink源算子(数据源)

1.Flink数据源 Flink可以从各种数据源获取数据,然后构建DataStream 进行处理转换。source就是整个数据处理程序的输入端。 数据集合数据文件Socket数据kafka数据自定义Source 2.案例 2.1.从集合中获取数据 创建 FlinkSource_List 类,再创建个 Student 类…

5256C 5G终端综合测试仪

01 5256C 5G终端综合测试仪 产品综述: 5256C 5G终端综合测试仪主要用于5G终端、基带芯片的研发、生产、校准、检测、认证和教学等领域。该仪表具备5G信号发送功能、5G信号功率特性、解调特性和频谱特性分析功能,支持5G终端的产线高速校准及终端发射机…

Dev-C++ 软件安装教程

Dev-C 软件安装包https://download.csdn.net/download/W_Fe5/88446511(软件包下载后,右键解压) 一、打开文件夹,双击“Dev-C” 二、软件安装,点击“OK” 三、点击“I Agree” 四、点击“Next” 五、更改安装目录&…

虚拟机ubantu系统突然重启失去网络

1.进入 root用户 cd /var/lib/NetworkManager然后查看网络服务状态 如果网络状态和我一样不可用 ,就先停止网络服务 service ModemManager stop#删除状态rm networker.stateservice ModemManager start

基于Pytorch的CNN手写数字识别

作为深度学习小白,我想把自己学习的过程记录下来,作为实践部分,我会写一个通用框架,并会不断完善这个框架,作为自己的入门学习。因此略过环境搭建和基础知识的步骤,直接从代码实战开始。 一.下载数据集并加…

【遮天】最新预告,叶凡一怒报仇,导演再删减人物,还暴露一个严重问题

Hello,小伙伴们,我是小郑继续为大家深度解析遮天国漫资讯。 《遮天》动漫第30集预告已出,叶凡被挟持进入荒古禁地!这一集看下来,导演又删减人物了,还暴露一个问题。 在预告中,叶凡已经被姬家和姜家的人带往…

【C++ 学习 ㉙】- 详解 C++11 的 constexpr 和 decltype 关键字

目录 一、constexpr 关键字 1.1 - constexpr 修饰普通变量 1.2 - constexpr 修饰函数 1.3 - constexpr 修饰类的构造函数 1.4 - constexpr 和 const 的区别 二、decltype 关键字 2.1 - 推导规则 2.2 - 实际应用 一、constexpr 关键字 constexpr 是 C11 新引入的关键字…

Spring Boot学习笔记(1)

Spring Boot学习笔记(1) 1.环境1.win2.mac3. IDEA 2.知识点1.Record类2.Switch开关表达式3. var和sealed4.springboot5.启用lombok 学习资料: 官网, 手册, 视频。 1.环境 1.win 1.下载vscode 2.安装jdk&#xff0…

求助C语言大佬:C语言的main函数参数问题

最近在敲代码的过程中,突发奇想,产生了一个疑问: 为什么main函数可以任由我们定义:可以接收一个参数、两个参数、三个参数都接接收,或者可以不接收?这是如何实现的 int main(){retrun 0; } int main (int…

移动app安全检测报告有什么作用?

移动app安全测试是一项至关重要的任务,它能够帮助确保移动应用程序在使用过程中不会受到各种安全威胁的侵害。在如今移动应用程序日益普及的时代,移动app安全测试尤为重要。移动app安全检测报告是基于专业的安全测试团队进行的全面分析后生成的&#xff…

博客积分上一万了

博客积分上一万了 继续努力,勇往直前。