本文緊接上文課程筆記:全同態加密的理論與構造-上篇:學習,繼續學習“課程筆記:全同態加密的理論與構造-下篇”,並做相應筆記和補充。
第一代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