BGV方案简介(同态加密)
文章目录
- 前言
- 推荐阅读资料
- BGV方案介绍
- 密文形式
- 噪声
- Modulus Switching
- 为什么需要MS
- 如何做MS
- 关于KeySwitching/Relinearization
- 小尾巴
前言
之前看了好多资料,发现对于BGV的介绍都比较少,大家都主要关注于CKKS。其实在一些整数域上面的计算BGV还是很有优势的,与CKKS相比,BGV是一个确定性的加密方案,与BFV相比,BGV的乘法在RNS下实现要简单非常多。所以在某些场景下(比如有限域上的MPC与HE结合)会更加偏向于使用BGV方案,而且BGV方案也相对最易懂。
推荐阅读资料
- (Leveled) Fully Homomorphic Encryption without Bootstrapping
最初的BGV文章,但是主要关注于LWE上面。
- Fully homomorphic encryption with polylog overhead
- Homomorphic Evaluation of the AES Circuit
关于BGV的两篇优化,作者都是(Gentry,Halevi,Smart),所以叫做GHS优化。
- Fully homomorphic SIMD operations
这篇文章是关于SIMD的,SIMD技术可以说是RLWE对于LWE的一个碾压性的优势之一了。作者是Smart和Vercauteren。
- Algorithms in HElib
- Bootstrapping for HElib
- Design and implementation of HElib : a homomorphic encryption library
上面三篇文章都是Halevi和Shoup写的,关于Helib中如何实现BGV方案并优化,以及如何对于BGV做Bootstrapping。
BGV方案介绍
密文形式
首先BGV最基本的加密形式是:
在这里我们只看对称加密,因为公钥加密与对称加密的密文形式是一致的。
对于LWE类型的密文来说,
首先有一些公开参数:明文模数ttt,密文模数qqq,向量维度nnn
取私钥为s∈Zqn\mathbf{s} \in \Z_q^ns∈Zqn,对于明文m∈Ztm\in \Z_tm∈Zt
选取a∈Zqn\mathbf{a}\in \Z_q^na∈Zqn,b=⟨a,s⟩+m+temodqb=\langle \mathbf{a},\mathbf{s}\rangle + m +te \bmod qb=⟨a,s⟩+m+temodq。eee是从高斯分布中选取的整数。
令密文c=(b,a)c=(b,\mathbf{a})c=(b,a)。
则解密为
先计算μ=b−⟨a,s⟩=m+temodq\mu = b- \langle \mathbf{a},\mathbf{s} \rangle = m+te \bmod qμ=b−⟨a,s⟩=m+temodq。然后计算m=[μ]t=mm=[\mu]_t=mm=[μ]t=m。
这里的⟨⋅⟩\langle \cdot \rangle⟨⋅⟩为内积操作,对于a=(a0,...,an−1),s=(s0,...,sn−1)\mathbf{a}=(a_0,...,a_{n-1}),\mathbf{s}=(s_0,...,s_{n-1})a=(a0,...,an−1),s=(s0,...,sn−1)来说,⟨a,s⟩=a0s0+a1s1+⋯+an−1sn−1∈Z\langle \mathbf{a},\mathbf{s}\rangle=a_0s_0+a_1s_1+\cdots+a_{n-1}s_{n-1}\in\Z⟨a,s⟩=a0s0+a1s1+⋯+an−1sn−1∈Z。
[μ]t[\mu]_t[μ]t其实等价于μmodt\mu \bmod tμmodt。
对于RLWE类型的密文来说,
公开参数为:明文模数ttt,多项式空间R=Z[X]/Xn+1\mathcal{R}=\Z[X]/X^n+1R=Z[X]/Xn+1,以及系数模qqq的多项式空间Rq=Zq[X]/Xn+1\mathcal{R}_q=\Z_q[X]/X^n+1Rq=Zq[X]/Xn+1。
取私钥为s∈Rqs\in \mathcal{R}_qs∈Rq,对于明文m∈Rtm\in R_tm∈Rt:
选取a∈Rq,b=as+m+te∈Rqa\in \mathcal{R}_q,b=as+m+te \in \mathcal{R}_qa∈Rq,b=as+m+te∈Rq,eee是一个系数满足高斯分布的多项式。
令密文为c=(b,a)c=(b,a)c=(b,a)
则解密为
先计算μ=b−as=m+te∈Rq\mu = b-as=m+te\in \mathcal{R}_qμ=b−as=m+te∈Rq,然后计算m=[μ]t∈Rtm=[\mu]_t\in\mathcal{R}_tm=[μ]t∈Rt。
这里可以看到RLWE类型的密文相对于LWE类型的密文来说的一个优势在于,一个LWE的密文的长度是n+1n+1n+1,对应的明文是Zt\Z_tZt内的,相当于有效信息只有1个,利用率为1n+1\frac{1}{n+1}n+11;而RLWE的密文长度是2n2n2n,对应的明文是Rt\mathcal{R}_tRt内的,有效信息最多有nnn个,利用率为12\frac{1}{2}21。如果使用SIMD的技术的话,可以将这nnn位都有效的利用起来。
关于SIMD的技术,SV的文章我还没有看,但现在BGV和BFV类型的SIMD应该都用的是INTT来做encoding的吧,可以参考一下CKKS的Encoding。思想是类似的。
噪声
注意到在解密过程中,是先得到了m+temodqm+te \bmod qm+temodq,然后再模ttt得到mmm的。这里一个很重要的条件就是(m+te)<q(m+te)<q(m+te)<q,BGV将φs(c)=b−as=m+te\varphi_s(c)=b-as=m+teφs(c)=b−as=m+te这一项称作噪声,一个很重要的条件就是噪声的大小要<q<q<q。如果是一个中心取模的方案,还要额外地要求噪声的大小<q2<\frac{q}{2}<2q。
Modulus Switching
注:后面的符号表示都是针对基于RLWE的BGV方案了。
感觉BGV里面最核心的技术应该就是Modulus Switching了,因为只有这个方案这么用,像Key Switching那种,基本所有同态方案都有使用。
为什么需要MS
首先,Modulus Switching是干什么的,直观上理解,modulus switching是将一个密文模数qqq转换到另一个密文模数q′q'q′上。
但这样有什么用处呢?
那首先要看一下乘法的密文噪声:
前面我们已经定义了,所谓的噪声就是φs(c)=(m+te)\varphi_s(c)=(m+te)φs(c)=(m+te),对于两个不同的密文,c1=Enc(m1),c2=Enc(m2)c_1 = Enc(m_1),c_2=Enc(m_2)c1=Enc(m1),c2=Enc(m2),φ(c1)=m1+te1,φ(c2)=m2+te2\varphi(c_1)=m_1+te_1,\varphi(c_2)=m_2+te_2φ(c1)=m1+te1,φ(c2)=m2+te2。两个的乘法的噪声为φ(c1c2)=φ(c1)⋅φ(c2)=(m1+te1)(m2+te2)=m1m2⏟<t2+t(m1e2+m2e1)⏟<t2∣e∣+t2e1e2⏟<t2∣e∣2\varphi(c_1c_2) = \varphi(c_1)\cdot \varphi(c_2)=(m_1+t e_1)(m_2+te_2) \\ =\underbrace{m_1m_2}_{<t^2} +\underbrace{t(m_1e_2+m_2e_1)}_{<t^2|e|}+\underbrace{t^2e_1e_2}_{<t^2|e|^2}φ(c1c2)=φ(c1)⋅φ(c2)=(m1+te1)(m2+te2)=<t2m1m2+<t2∣e∣t(m1e2+m2e1)+<t2∣e∣2t2e1e2
可以看到相比原来的噪声大小φ(c)=m+te⏟<t∣e∣\varphi(c)=\underbrace{m+te}_{<t|e|}φ(c)=<t∣e∣m+te,
乘法之后的噪声是翻倍了。而如果我们需要正确解密的话,需要噪声大小φ(c)<q//(φ(c)<q/2)\varphi(c)<q//(\varphi(c)<q/2)φ(c)<q//(φ(c)<q/2)。假设我们初始的噪声大小为t∣e∣=Bt|e|=Bt∣e∣=B,则乘法之后的噪声大小为B2B^2B2,再进行一次乘法变为B4B^4B4,进行ℓ\ellℓ次乘法之后噪声大小为B2ℓB^{2^\ell}B2ℓ。若要求B2ℓ<qB^{2^\ell}<qB2ℓ<q,则最多做ℓ≈log2(logB(q))−1\ell\approx \log_2(\log_B(q))-1ℓ≈log2(logB(q))−1次乘法。
如何减少这种噪声的扩张呢?,其实BGV,BFV,CKKS给出了三种不同的解决方法,其中BGV和CKKS比较类似,都是把密文和模数同时减少(区别在于,CKKS缩小完模数之后会对明文产生影响,变为一个近似的结果;而BGV不会)。BFV则是一个scale invariant的方法,即模数不会变,通过乘法后除以一个扩张因子来保持噪声规模。
为什么模数减小噪声也会变小:考虑以下情况:
φ(c)=m+temodq,φ(pqc)=pqm+pqte⏟<pqBmodp\varphi(c)=m+te \bmod q,\varphi(\frac{p}{q} c)=\underbrace{\frac{p}{q}m+\frac{p}{q}te}_{<\frac{p}{q}B} \bmod pφ(c)=m+temodq,φ(qpc)=<qpBqpm+qptemodp
通过对密文整体进行缩放,模数从qqq变为ppp,噪声从BBB变为pqB\frac{p}{q}BqpB,那这里疑问就产生了:噪声和模数的比例关系没变啊,还是Bq=pqBp\frac{B}{q}=\frac{\frac{p}{q}B}{p}qB=pqpB,为什么说减少了噪声呢?
这里举个例子:比如B=2,q=131072,p=12q=65536B=2,q=131072,p=\frac{1}{2}q=65536B=2,q=131072,p=21q=65536。那么不使用MS的噪声扩张为
2mod131072→multiply4mod131072→multiply16mod131072→multiply256mod131072→multiply65536mod131072→multiply(×)655362mod1310722 \bmod 131072 \stackrel{multiply}{\to}4 \bmod 131072 \stackrel{multiply}{\to} 16 \bmod 131072\stackrel{multiply}{\to} 256 \bmod 131072\stackrel{multiply}{\to} 65536 \bmod 131072\stackrel{multiply(\times)}{\to} 65536^2 \bmod 1310722mod131072→multiply4mod131072→multiply16mod131072→multiply256mod131072→multiply65536mod131072→multiply(×)655362mod131072
总共能做4层乘法。
如果我们在第一次乘法之后做一个MS,即将B→pqBB\to \frac{p}{q}BB→qpB,q→pq\to pq→p。则噪声扩张为
2mod131072→multiply4mod131072→MS2mod65536→multiply4mod65536→multiply16mod65536→multiply256mod65536→multiply65536mod655362 \bmod 131072 \stackrel{multiply}{\to} 4 \bmod 131072\stackrel{MS}{\to} 2 \bmod 65536\stackrel{multiply}{\to} 4 \bmod 65536\stackrel{multiply}{\to} 16 \bmod 65536\stackrel{multiply}{\to} 256 \bmod 65536\stackrel{multiply}{\to} 65536 \bmod 655362mod131072→multiply4mod131072→MS2mod65536→multiply4mod65536→multiply16mod65536→multiply256mod65536→multiply65536mod65536
能做5层乘法。
那再考虑另一种情况,每次乘法完都做一次modulus switching,将B→12B,q→12qB\to \frac{1}{2}B,q \to \frac{1}{2}qB→21B,q→21q:
则噪声扩张变为:
2mod131072→multiply4mod131072→MS2mod65536→multiply4mod65536→MS2mod32768→multiply4mod32768→MS2mod16384→multiply4mod16384→MS2mod8192→multiply4mod8192→MS2mod4096→multiply4mod4096→MS2mod2048→multiply4mod2048→MS2mod1024→multiply4mod1024→MS2mod512→multiply4mod512→MS2mod256→multiply4mod256→MS2mod128→multiply4mod128→MS2mod64→multiply4mod64→MS2mod32→multiply4mod32→MS2mod16→multiply4mod16→MS2mod8→multiply4mod8→MS2mod4→multiply(×)4mod42 \bmod 131072 \stackrel{multiply}{\to} 4 \bmod 131072\stackrel{MS}{\to} \\2 \bmod 65536 \stackrel{multiply}{\to} 4 \bmod 65536 \stackrel{MS}{\to} \\2 \bmod 32768\stackrel{multiply}{\to} 4 \bmod 32768\stackrel{MS}{\to} \\ 2 \bmod 16384\stackrel{multiply}{\to} 4 \bmod 16384\stackrel{MS}{\to} \\ 2 \bmod 8192\stackrel{multiply}{\to} 4 \bmod 8192\stackrel{MS}{\to} \\ 2 \bmod 4096\stackrel{multiply}{\to} 4 \bmod 4096\stackrel{MS}{\to} \\ 2 \bmod 2048\stackrel{multiply}{\to} 4 \bmod 2048\stackrel{MS}{\to} \\ 2 \bmod 1024\stackrel{multiply}{\to} 4 \bmod 1024\stackrel{MS}{\to}\\ 2 \bmod 512\stackrel{multiply}{\to} 4 \bmod 512\stackrel{MS}{\to}\\ 2 \bmod 256\stackrel{multiply}{\to} 4 \bmod 256\stackrel{MS}{\to}\\ 2 \bmod 128\stackrel{multiply}{\to} 4 \bmod 128\stackrel{MS}{\to}\\ 2 \bmod 64\stackrel{multiply}{\to} 4 \bmod 64\stackrel{MS}{\to}\\ 2 \bmod 32\stackrel{multiply}{\to} 4 \bmod 32\stackrel{MS}{\to}\\ 2 \bmod 16\stackrel{multiply}{\to} 4 \bmod 16\stackrel{MS}{\to}\\ 2 \bmod 8\stackrel{multiply}{\to} 4 \bmod 8\stackrel{MS}{\to}\\ 2 \bmod 4\stackrel{multiply(\times)}{\to} 4 \bmod 42mod131072→multiply4mod131072→MS2mod65536→multiply4mod65536→MS2mod32768→multiply4mod32768→MS2mod16384→multiply4mod16384→MS2mod8192→multiply4mod8192→MS2mod4096→multiply4mod4096→MS2mod2048→multiply4mod2048→MS2mod1024→multiply4mod1024→MS2mod512→multiply4mod512→MS2mod256→multiply4mod256→MS2mod128→multiply4mod128→MS2mod64→multiply4mod64→MS2mod32→multiply4mod32→MS2mod16→multiply4mod16→MS2mod8→multiply4mod8→MS2mod4→multiply(×)4mod4
总计有15层乘法。
总结:
由此可见,MS不改变噪声和模数的比例关系,但是噪声的扩张速度是被减少了的。每次缩小噪声从而导致模数变小,在BGV里面称作密文到达了下一层,也就如为上面的写法一样,一层拥有对应模数。通过模数缩减可以使原本ℓ≈log2(logB(q))−1\ell\approx \log_2(\log_B(q)) -1ℓ≈log2(logB(q))−1次乘法。变为ℓ≈(logB(q)−1\ell\approx (\log_B(q) -1ℓ≈(logB(q)−1次乘法。
如何做MS
其实在上面的例子里面已经有设计到如何做MS的问题了,对于一个密文c=(a,b)c=(a,b)c=(a,b)。对于LLL层乘法,取多个Q:{Q0,Q1,...,QL}Q:\{Q_0,Q_1,...,Q_L\}Q:{Q0,Q1,...,QL},满足Qi+1≈B⋅QiQ_{i+1}\approx B\cdot Q_iQi+1≈B⋅Qi的关系。
modulus switching:
c=(a,b)modQLc=(a,b) \bmod Q_Lc=(a,b)modQL。
Modulus Switch的结果为c′c'c′,c′c'c′是距离QL−1QLc\frac{Q_{L-1}}{Q_{L}}cQLQL−1c很接近的一个密文,且要满足c′=cmodtc' = c \bmod tc′=cmodt。
那么在Qi=1modtQ_i =1 \bmod tQi=1modt的情况下,ϕ(c′)modt=ϕ(c)modt=m\phi(c') \bmod t = \phi(c) \bmod t = mϕ(c′)modt=ϕ(c)modt=m。
这里原本的内容有误,感谢评论区指出,本来凭着记忆写了,没去看文章。对如何找这样一个很接近的密文好奇的小伙伴可以看这篇文章。
关于KeySwitching/Relinearization
KeySwitching其实不算是BGV特有的技术,所以不准备放在BGV里面介绍。这里说一下大概的思路。
对于一个用sss加密的密文ccc来说,他由两部分组成,(a,b)(a,b)(a,b),其中b=as+m+teb=as+m+teb=as+m+te。
如果说我要将这个密文转为由密钥s′s's′加密,则我先使用s′s's′加密sss,得到ksk=(ak,bk)ksk=(a_k,b_k)ksk=(ak,bk)其中bk=aks′+s+tekb_k=a_ks'+s+te_kbk=aks′+s+tek。
key switch可以理解为得到c′=(a′,b′)=(0,b)−a⋅(ak,bk)=(−a⋅ak,b−a⋅bk)c'=(a',b')=(0,b)-a\cdot(a_k,b_k)=(-a\cdot a_k,b-a\cdot b_k)c′=(a′,b′)=(0,b)−a⋅(ak,bk)=(−a⋅ak,b−a⋅bk)。
对(a′,b′)(a',b')(a′,b′)用s′s's′解密得到
b′−a′s′=b−a⋅bk+a⋅ak⋅s′=b−a(aks′+s+tek)+(a⋅ak⋅s′)=b−a(s+tek)=b−as+atek=m+te+atek=m+te′\begin{aligned} b'-a's' &=b-a\cdot b_k+a\cdot a_k \cdot s' \\&=b-a(a_ks'+s+te_k)+(a\cdot a_k\cdot s') \\&=b-a(s+te_k) \\&=b-as+ate_k \\&=m+te+ate_{k} \\&=m+te' \end{aligned}b′−a′s′=b−a⋅bk+a⋅ak⋅s′=b−a(aks′+s+tek)+(a⋅ak⋅s′)=b−a(s+tek)=b−as+atek=m+te+atek=m+te′
所以c′c'c′是一个由s′s's′加密的密文。
重线性化可以类似的理解一下,乘法之后的密文变为由s2s^2s2加密的密文,所以将s2s^2s2keyswitch回sss,就可以继续使用sss解密了。
小尾巴
本人正在入门密码学,欢迎各位同学或老师加我微信交流:shenghua-adije
BGV方案简介(同态加密)相关推荐
- (BGV12)同态加密方案初学
BGV主要优化了BV11中的维度-模约减技术,提出了模交换技术,同时也优化了重线性化技术,提出了密钥交换技术,使得无需Bootstrapping也能做到较多层数的同态乘法. 前置 另一种形势的LWE公 ...
- 同态加密GSW方案学习笔记1-GSW最初方案概述
概述 2013 年,Gentry 等人使用近似特征向量技术,设计了一个无需计算密钥的全同态加密方案:GSW,拉开了第三代全同态加密的帷幕.2014年,Chris Peikert 等人提出了一个更简单的 ...
- 密码学学习笔记(五)——CKKS同态加密方案
文章目录 1. 提出背景 2. 方案原理 3. 算法描述 4.方案改进 4.1 自举方案 4.2 RNS变体 1. 提出背景 1978年,Rivest.Adleman和Dertouzos在文献[1]中 ...
- 5、隐私计算--同态加密
目录 同态加密 同态加密研究进展 同态加密原理及方案 同态加密分类 HE方案安全性 同态加密与区块链 同态加密应用 全同态工程实现开源工具 参考推荐: 同态加密_federated的博客-CSDN博客 ...
- 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)
文章目录 SM1 对称密码 SM2 椭圆曲线公钥密码算法 SM3 杂凑算法 SM4 对称算法 同态加密 密态计算和隐私计算 安全多方计算技术 安全多方计算的应用场景 对称加密算法 非对称加密算法(公钥 ...
- 全同态加密(FHE)体系概述(初学版)
同态加密定义 假设有这样一个场景,用户有一组私密数据,被加密存储在了第三方的云平台,现在,该用户想对这组数据进行某种处理,但是处理过程和结果都不想让第三方云平台看到.当然,用户可以选择将数据下载下来, ...
- SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算的概念
SM1.SM2.SM3和SM4 为了保障商用密码的安全性,国家密码局制定了一系列密码标准,包括:SM1(SCB2).SM2.SM3.SM4.SM7.SM9.祖冲之密码算法(ZUC) 等. SM1.SM ...
- 安全多方计算之三:同态加密
同态加密 1. 同态加密概述 2. 乘同态的ElGamal加密方案 3. 加同态的Paillier加密方案 4. 全同态加密方案 1. 同态加密概述 同态加密首次由R.Rivest等人于1978年在& ...
- 同态加密BGV与BFV方案对比与梳理
Revisiting Homomorphic Encryption Schemes for Finite Fields 文章目录 Revisiting Homomorphic Encryption S ...
最新文章
- exchange十种常见退信原因
- HuggingFace-transformers系列的介绍以及在下游任务中的使用
- 常用chrome插件
- 必须知道的八大种排序算法【java实现】
- Flask项目中应用七牛云存储
- python继承属性_Python中的属性继承问题
- 与梦城Typecho博客数据站+API站
- python深度学习库keras——安装
- WebSocket API 学习笔记
- 4.数据库数据导入查询数据库信息出现乱码问题
- 什么是次梯度(次导数)
- NumberFormat类
- C语言如何写循环队列,C语言 队列(循环队列)
- 123457123457#0#----com.MC.konglongtianse222----前拼后广--恐龙填色mc-mc1111
- net use 命令使用教程
- 华为设备配置OSPF的NSSA区域
- 蒲公英快速查询苹果手机UDID方法
- 什么叫特立独行,其实不过是活在自己的节奏里
- Redhat7安装HDS存储多路径软件
- C/C++播放音乐的函数的学习