BFV加密是主流的基于容错学习问题的全同态加密方案之一,其主要思想是将明文放在密文的高位,通过整除的方式,去除低位的噪声。比如有一个BFV的密文,私钥
,则BFV的解密为
,其中
是一个公开常数,
是解密噪声,显然,当噪声足够小的时候,我们可以通过除以t取整获得明文
。
公共参数选择
首先,需要一个分圆多项式,其中
是
的整数次幂。由
和一个大整数
定义一个多项式环
和一个大整数模
。明文模为
,
,明文空间为环
。 三个在换上的分布,噪声分布,私钥分布和一个均匀随机分布 。
为了生成辅助密钥,还需要一个整数,
。这里的
是用于比特分解的模,所谓的比特分解,就是把一个数表示成
,也就是
进制表示。
私钥生成
在私钥分布中采样,得到,则私钥
。一般来说私钥分布和噪声分布是同一个分布,实际中往往选择离散高斯分布。
公钥生成
在均匀随机分布中采样得到得到,然后在噪声分布中采样得到
,计算
,其中私钥是
。则,公钥
。
辅助密钥生成
首先在均匀随机分布中采样次,得到
,在噪声分布
中采样
次,得到
,计算
,其中
。则
加密
对于一个明文,首先将其编码到环上,然后再加密。设编码后的明文为
。从私钥分布中采样得到
,再从噪声分布中采样两次得到
和
。计算
,
。则密文
。
解密
对于私钥,密文
,其解密为
。
证明如下:
只要小于
,则可以正确解密。
加法
加法是向量的加法,比如有密文和
,则
。
考虑其解密结构,,显然,解密噪声增加了。
乘法
有密文和
,则
。然后,通过重线性化和辅助密钥
转化为二维的密文。若没有线性化,则其密文的私钥应该是
,因为
,
。
重线性化
设乘法得到的密文为,则其解密为
,经过重现性化后,得到
。
由于,所以,
为重线性化的噪声。