BFV加密方案

BFV加密是主流的基于容错学习问题的全同态加密方案之一,其主要思想是将明文放在密文的高位,通过整除的方式,去除低位的噪声。比如有一个BFV的密文\mathbf{c},私钥\mathbf{s},则BFV的解密为wm+e=\mathbf{c} \cdot \mathbf{s},其中w是一个公开常数,e是解密噪声,显然,当噪声足够小的时候,我们可以通过除以t取整获得明文m

公共参数选择

首先,需要一个分圆多项式f(x)=x^d+1,其中d2的整数次幂。由f(x)和一个大整数q定义一个多项式环R=\mathbb{Z}[x]/f(x)和一个大整数模q。明文模为pw=\lfloor \frac{q}{p} \rfloor,明文空间为环R/pR。 三个在换上的分布,噪声分布,私钥分布和一个均匀随机分布 。

为了生成辅助密钥,还需要一个整数tl=log_tq。这里的t是用于比特分解的模,所谓的比特分解,就是把一个数表示成a=\sum a_it^i,也就是t进制表示。

私钥生成

在私钥分布中采样,得到s,则私钥\mathbf{s}=(1,s)。一般来说私钥分布和噪声分布是同一个分布,实际中往往选择离散高斯分布。

公钥生成

在均匀随机分布中采样得到得到a,然后在噪声分布中采样得到e,计算b=-(as+e),其中私钥是(1,s)。则,公钥pk=(b,a)

辅助密钥生成

首先在均匀随机分布中采样l+1次,得到\{a_0, a_1, a_2, ..., a_l\},在噪声分布D_1中采样l+1次,得到\{e_0, e_1, e_2, ..., e_l\},计算evk_i=(-(a_is+e_i)+t^is^2,a_i),其中i \in [0,l]。则\mathbf{evk}=\sum evk_i

加密

对于一个明文,首先将其编码到环R/pR上,然后再加密。设编码后的明文为m。从私钥分布中采样得到u,再从噪声分布中采样两次得到e_1e_2。计算c_0=bu+e_1+wmc_1=au+e_2。则密文\mathbf{c}=(c_0,c_1)

解密

对于私钥\mathbf{s}=(1,s),密文\mathbf{c}=(c_0,c_1),其解密为m=\lfloor (\mathbf{c} \cdot \mathbf{s})/w \rfloor

证明如下:

\mathbf{c} \cdot \mathbf{s}=c_0+c_1s=bu+e_1+wm+aus+e_2s=(-as+e)u+e_1+wm+aus+e_2s=wm+(-eu+e_1+e_2s)=wm+e_3

只要e_3小于w,则可以正确解密。

加法

加法是向量的加法,比如有密文\mathbf{c_1}=(a_0,a_1)\mathbf{c_2}=(b_0,b_1),则\mathbf{c_1+c_2}=(a_0+b_0, a_1+b_1)

考虑其解密结构,(\mathbf{c_1+c_2})\cdot\mathbf{s}=a_0+b_0+a_1s+b_1s=\mathbf{c_1\cdot s}+\mathbf{c_2 \cdot s}=w(m_1+m_2)+e^\prime,显然,解密噪声增加了。

乘法

有密文\mathbf{c_1}=(a_0,a_1)\mathbf{c_2}=(b_0,b_1),则\mathbf{c_1c_2}=(a_0b_0,a_0b_1+a_1b_0,a_1b_1)。然后,通过重线性化和辅助密钥evk转化为二维的密文。若没有线性化,则其密文的私钥应该是\mathbf{s}=(1,2s,s^2),因为\mathbf{cs\cdot cs}=\mathbf{cc\cdot s^2}\mathbf{s}^2=(1,s)^2=(1,2s,s^2)

重线性化

设乘法得到的密文为\mathbf{c}=(c_0,c_1,c_2),则其解密为\mathbf{cs}=c_0+c_1s+c_2s^2,经过重现性化后,得到\mathbf{c^\prime}=(c_0,c_1)+c_2 \cdot \mathbf{evk}

c_2 \cdot \mathbf{evk}=\sum(-(a_i+e_i+t^is^2c_2)c_2,a_ic_2)

由于s^2=\sum t^is^2,所以,\mathbf{c^\prime s}=c_0+c_1s+c_2s^2+\sum -e_ic_2

\sum -e_ic_2为重线性化的噪声。

你可能感兴趣的:(安全,同态加密,密码学)