课程笔记:全同态加密的理论与构造-下篇:学习
本文紧接上文课程笔记:全同态加密的理论与构造-上篇:学习,继续学习“课程笔记:全同态加密的理论与构造-下篇”,并做相应笔记和补充。
第一代FHE
- 第一代,主要就是Gentry09和DGHV10方案。
- 安全性基于的是近似GCD数学问题,这里的\(2r_i\)很像LWE中的噪音。
方案
- 基于AGCD问题,\(p\)作为私钥。
- 密文后两项都可以看做是“噪音项”,消去(模p、模2)即解密。
- 加密时,\(s\)是一个\(\tau\)向量
- 解密正确性保证:\(m+ {\textstyle \sum_{i=1}^{\tau }} r_is_i \le p-1\)。
- 计算时,\(\overline{r_1}=s_1r_1,\overline{q_1}=s_1q_1\),加法的噪音是累加的,乘法的噪音增长过大,如果超过\(p\),则解密出错。
- 假设新鲜密文的噪音上限为\(B\),经过\(d\)乘法,密文的噪音上限变为\(B^{2^d}\),需要解密正确,需要满足噪音小于\(p\),得到了乘法深度的范围\(d\le O(log^{\lambda })\)
第二代FHE
- 第一代比较复杂的是Gntry09,基于理想格上计算,后面又给出一个简单的版本,基于整数上计算。
- 第二代基于LWE问题设计,首次在Regev中给出LWE问题并设计出对应的加密方案,后又在BV11中给出具体的全同态加密方案(使用重线性化),后面在BGV12和BGV12中又将方案完善,提升效率,避免使用昂贵的自举技术,使用密钥交换和模交换技术实现Leveled-FHE方案。
- 噪音分布\(\chi\),噪音选取\(e\in \chi\)。
- LWE分布\(A_{s,\chi}\):\(s\in Z^n_q\)是一个\(n\)向量,\(e\in \chi\)是一个随机数,\(A\in Z^{m*n}_q\)是一个\(n\)的向量。解LWE问题就是去解带噪音项的线性方程组\(b=a.s+e\)。
- \(n\)应该是公开的参数。
- SLWE问题就是解线性方程组问题(\(m\)个方程,\(n\)未知数,记作\(m=m(n)\)),即给出\((A,b=A.s+e)\),求\(s\),其中\(s\in Z^n_q\)是一个\(n\)向量,\(e\in \chi^m\)是一个\(m\)向量,\(A\in Z^{n}_q\)是一个\(m*n\)的矩阵。
- DLWE问题就是区分计算出\((A,b)\)和随机取的\((A',b')\),即输出的是(1/0)。
- 两个版本的LWE问题是可以互相规约的,即可以能求解出一个问题,就能求解出另外一个问题。
BGV方案
- BGV是在整数域上计算的方案,之后引入编码计算,将其放在多项式上计算。
- 密钥生成:满足\(A.s=2e\),其中\(A\in Z_q^{l,n},l=n.polylog(q)\)。
- 加密:\(c_0=A^Tr\in Z_q^{n}\),其中\(A^T\in Z_q^{n,l}\);\(b^Tr+m\),其中\(b^Tr+m \in Z_q\)。
- 解密:\(c\in Z_q^{n+1}\),即\(<c,s>\)是一个数,另外\(2e^Tr\)是噪音项,需要约去或者消去。
- 加法:噪音值累加
- 乘法:相乘后,密文维数变大(对应的密钥规模变大),BGV中使用密钥交换(Key Switching)降低密文维数。
- 密钥交换是在明文不变的情况下,将密文1对应的密钥1转换为密文2对应的密钥2。最重要的是:将密钥加密作为计算密钥(交换密钥)\(ksk\),应该在密钥生成时计算,作为“公钥”的一部分。
- 密钥交换可以降维u,但会增加噪音,这里使用的是Gadget矩阵,使得增加的噪音变小。
- 因为引入的\(G\)很大,所以\(G^{-1}\)很小,也就使得最后增加的噪音很小。
- 上面解决了降维问题,乘法运算还引起噪音增加,BGV中使用模交换用于降噪,可以将密文的噪音规模从\(B\)降低为\(B*p/q\)。
- 模交换:明文不变,将密文\(c\)对应的模数\(q\)转换为密文\(c'\)对应的模数为\(p\)(\(p\)远小于\(q\))。因为密文的模数变小,所以密文大小也变小,具体为:\(c\simeq \frac{p}{q}.c\)且满足\(c'=c mod 2\)。
- 通过模交换,得到\([<c',s>]_p\simeq \frac{p}{q}.[<c,s>]_q\),其中\(<c',s>-kp=\frac{p}{q}.[<c,s>]_q+<c'- \frac{p}{q}.c,s>\),\(<c'- \frac{p}{q}.c,s>\)很小(因为LWE问题中\(s\)很小)。
- 通过模交换,密文变小\(\frac{p}{q}\)倍,对应的噪音也变小\frac{p}{q}倍,可以通过合理设置\(q\)(得足够大,且远大于\(p\)),可以实现噪音的线性增长。
- 所以做密文(噪音上限\(B\))乘法后(噪音上限\(B^2\)),需要依次降维(噪音上限\(B^2+small\))、降噪(噪音上限\(B.poly(n)\))。
BFV方案
- 密钥生成:与BGV不同的是,这里使用的是\(b=As'+e\),(原因?)
- 加密:\(c_0\)计算与BGV相同,\(c_1\)计算与BGV不同是\(c_1=b^Tr+[q/2].m\)。
- 解密:与BGV不同,且这里要求\(|e^T.t|<\frac{1}{2}.\left \lfloor q/2 \right \rfloor\)才能正确解密。
- 加法:噪音累加。
- 乘法时和BGV一样同样使用交换密钥,对密钥重加密,并使用密钥交换来降维(文中给出的重现线性化)。
- 分析:KSK就是在计算交换密钥,KS就是使用计算密钥和相乘密文做密钥交换。
第三代FHE
- 第三代(密文形式是矩阵)不同于第二代(密文形式是向量/多项式),所以就没有了密文相乘维数变大的烦恼,所以只需要处理噪音就行,总的来说就是理论上更简单,但性能没有第二代的BGV和BFV好,第三代典型的方案是GSW,使用简单的比特转换等技术实现Leveled-FHE方案,后续的TFHE,FHEW等都是基于GSW优化而来。
- BFV和BGV是基于RLWE,GSW是基于LWE的。
- 密钥生成:这里公钥为\((A,b=As'+e(mod q))\),且满足\(pk.sk=e(mod q)\)。
- 加密:\(R\)是个\((n+1)logq*l\)矩阵,得到的密文是一个矩阵
- GSW主要是利用“近似特征向量”是为框架设计的,解密时\(Cs=Re+mG^Ts\),将其\(Re,G^T\)去掉后,就近似得到了特征向量和特征值,即\(Cs\approx m.s\)。【所以关键是如何去掉这两项!】
- 加法:因为\(|R|=1\),所以可以约去,两密文相加噪音也是累加的。
- 乘法:因为\(G\)是单位矩阵,所以\(G^T=G\),即\(XG^T=XG=C_2\),其中\((Xe_1+m_1e_2)\)是噪音项。
- 上面的方案给出了一个简化版的方案,并未做相应的优化,比如如何去掉\(Re,G^T\),参考原文,使用BitDecompt等技术。
面向应用的全同态算法
- BGV和BFV都是在整数域上计算的FHE方案,对于实用性能来说,更加推荐BFV,相比于BGV更加简化。
- 对于浮点数、复数域上的计算就首推CKKS方案,但因其是基于RLWE问题,所以实质上也是在整数上计算,所以需要编码,即将浮点数、复数编码为整数,再进行后续计算。
- \(x\)是一个实数(浮点数),将其编码为整数,需要乘上扩张因子\(\Delta\),再进行取整。
- 对编码后数计算乘法,扩张因子变为\(\Delta^2\),所以需要消去一个,即在CKKS中的rescale操作。
CKKS方案
- 从分类上讲,CKKS也属于第二代FHE。
- 密钥生成:这里采用的是多个模数,表明该方案是一个Leveled-FHE;也可以看出,基于RLWE的方案,密钥生成大都是类似。
- 加密与BGV、BFV相似。
- 解密后需要解码。
- 密文乘法会导致维数扩张、扩张因子和噪音变大,所以需要使用重线性化降维,使用重缩放降低扩张因子和噪音。
TFHE方案
- TFHE基于GSW方案,属于第三代FHE,是目前最快的全同态加密方案(真正FHE)。
- 基于的是RLWE问题,也是分为搜索型和判定型。
- 加密:\(<c,s>=e+\frac{q}{2} m(mod q)\),其中\(m\in [0,1]\)是明文,\(c\)是密文,\(s\in [0,1]^n\)是密钥。
- 该方案暂时没有看过,后续补充~
开源库
- 这是我见过的最全的总结,(点赞~)
研究方向
- 无循环安全假设实现FHE。
- 除自举外实现FHE。
- 除基于LWE构造的FHE,比如LPN。
- 扩大GSW系列方案的明文空间,比如FHEW和TFHE等。
- 在FHEW和TFHE含自举的方案中实现打包。
- 更高效的自举。
- 在保证精度的情况下,对于CKKS方案实现高效的自举。
- 实现混合FHE,比如CKKS-FHEW、TFHE等。
- 硬件加速,比如使用GPU、FPGA等。
参考
- 【1】Gentry09
- 【2】DGHV10
- 【3】BV11
- 【4】BGV12
- 【5】Bra12
- 【7】CKKS17
- 【8】Regev10
- 【9】FHEW15
- 【10】TFHE16
- 【BFV12】:Somewhat Practical Fully Homomorphic Encryption