Homomorphic Evaluation of the AES Circuit:解讀

PamShao發表於2022-04-24

之前看過一次,根本看不懂,現在隔這麼久,再次閱讀,希望有所收穫!
論文版本:Homomorphic Evaluation of the AES Circuit(Updated Implementation)

  • 首先明白AES電路是什麼?
    暫且理解為AES加密演算法,以電路的形式實現。

注:bootstrapping 自舉;key switching 金鑰交換; modulus switching 模交換

介紹

  • 使用Leveled-FHE方案(BGV)加密和同態計算(不用自舉),使用同態庫(HElib)
  • 使用SIMD編碼技術
  • 使用模交換和金鑰交換技術改進版

AES電路

當對使用AES加密的資料進行計算時,AES同態解密就是將用AES加密的資料轉換為用,FHE加密的資料,然後執行計算。

環表示

符號表示

  • \([z]_q\):整數\(z\)\(q\),範圍在\((-q/2,q/2]\)

  • \(m\)次分圓多項式:\(\Phi_m(X)\),階數為\(\phi(m)\),即多項式的最高次冪為\(\phi(m)\),例如\(\Phi_m(x)=(x-a_1)(x-a_2)...(x-a_{\phi(m)})\),階是\(\phi(m)\)

  • \(q\)的多項式環:\(A_q=Z[X]/(\Phi_m(X))\) ,即整係數的多項式(模\(\Phi_m(x)\)和模\(q\))集合,階數為\(\phi(m)-1\)

多項式表示

一個\(m\)次分圓多項式\(\Phi_m(X)\)包含\(m\)次本原單位根\(\zeta\)\(m\)次分圓多項式可以拆分為若干個多項式相乘,即\(\Phi_m(X)=\prod_{i}(X-\zeta ^i)(mod q)\)

m次本原單位根有\(\phi(m)\)

給定一個多項式\(a\in A_q\),有兩種表示方法::係數表示法(coefficient representations)計算表示法(evaluation representation)

係數表示法

可以將\(a\)看作一個階為\(\phi(m)-1\)的多項式,即\(a(X)=\sum_{i<\phi(m)}a_iX^i\),列出所有的係數表示這個多項式,即\(a=<a_0,x_1,...,x_{\phi(m)-1}>\in (Z/qZ)^{\phi(m)}\),這就是係數表示法

計算表示法

\(m\)次本原單位根\(\zeta\)帶入多項式\(a(X)\),即\(b_i=a(\zeta ^i)\),會得到\(\phi(m)\)長的向量,即\((b_0,b_1,...,b_{\phi(m)})\),這就是計算表示法

轉換

可以看出,這兩種表示法是通過\(b=V_m.a\)轉換的,其中\(V_m\)是一個基於\(m\)次本原單位根的範德蒙矩陣\((mod q)\),即\((a(X) mod (X-\zeta ^i))=a(\zeta ^i)=b_i\),因此用計算表示法的\(a\)是一個多項式的中國剩餘定理的表示 (CRT表示法)。

上面是基於CRT實現的轉換,還有其他的方法:牛頓插值法、拉格朗日插值法、**快速傅立葉變換(FFT)更多請參考:FFT

上面兩種表示法,都可以將一個多項式\(a\in A_q\)表示為一個長\(\phi(m)\)的整數向量。如果\(q\)是一個"複合體",這些整數每一個都可以用標準二進位制編碼( standard binary encoding)或者用CRT( Chinese-Remaindering)。我們一般在係數表示法中使用標準二進位制編碼,計算表示法中使用CRT。

所以後者也叫做雙CRT表示(double CRT representation),對應於\(\Phi_m(X)\)\(q\)所拆分的因子。

這裡的\(q\)說是一個"複合體",可以看作是一個很大的數

多項式計算

由於是基於多項式環上的計算,所以會有很多整數多項式間的計算。例如:模乘(modular multiplications),模加(modular additions), Frobenius對映(用於快速計算次冪\(x^a\))。

大部分的計算可以在計算表示法下進行,另外標準的模交換和金鑰交換需要在係數表示法下進行【密文中的噪音在係數表示法很小,在計算表示法下則不會】,所以在整個過程中,多項式需要在這兩種表示下來回轉換,這是最耗時的!所以在該方案中,將始終將密文保持在計算表示下,僅當某些操作需要時才轉換為係數表示,然後再轉換回來。該方案中描述的金鑰交換和模交換的變體是可以在計算表示法下執行的,金鑰交換還有一個優點:金鑰交換矩陣的尺寸減少,這是影響效能的重要因素。

由於轉換耗費計算量,所以本文也是一直做優化,減少轉換次數。

BGV基礎方案

這裡採用的是BGV變體方案[1],密文和金鑰都是在\(A\)上的向量,明文空間為\(A_2\),密文空間\(A_q\)

金鑰【current secret key s】和模數【current integer modulus q】會隨著同態計算而變化(金鑰交換和模交換導致的)

給定一個結構:密文\(c\),對應的金鑰\(s\)、模數為\(q\)、明文為\(a\),則解密結構為:

\[a\leftarrow [[\left<c,s\right> mod \Phi_m(X)]_q]_2 \]

其中\([\left<c,s\right> mod \Phi_m(X)]_q\)叫做密文\(c\)的噪音,衡量噪音的大小用歐幾里德範數,即噪音的大小為:

\[||[\left<c,s\right> mod \Phi_m(X)]_q||_2 \]

以下再提到範數,即歐幾里德範數(\(l_2\)範數)

噪音需要足夠小,這樣密文才有效,所以噪音滿足一定的界限。

這裡的BGV方案提供5個同態計算:加法( addition)、乘法( multiplication)、"自同構"(automorphism)、金鑰交換(key-switching)和模交換(modulus-switching):

加法

密文+密文,具體來說:兩個密文\(c_1,c_2\in A_q\),對應的明文為\(a_1,a_2\in A_2\),具有相同的金鑰和模數\(q\),相加後\(c_1+c_2\in A_q\),對應的明文為\(a_1+a_2\in A_2\)
相加後模數和金鑰不變,噪音累加。

乘法

密文*密文(張量積),具體來說,兩個密文\(c_1,c_2\in A_q\),對應的明文為\(a_1,a_2\in A_2\),具有相同的金鑰和模數\(q\),相乘後\(c_1*c_2\in A_q\),對應的明文為\(a_1*a_2\in A_2\)
模數不變,金鑰維數翻倍(\(n\)->\(n^2\)),噪音劇增。

金鑰交換

需要密文的範數遠小於\(q\)

轉換密文的金鑰,具體來說(密文,金鑰,模數):
\((c',s',q)\)->金鑰交換->\((c,,s,q)\)

主要用作在密文*密文後,金鑰的維數增長,這時需要使用金鑰交換,把金鑰的維數降下去。假設\(s'\)的維數為\(n^2\)\(s\)的維數為\(n\)

進行金鑰交換,需要一個交換矩陣\(W=W[s\to s]\in A_q\)\(W\)的第\(i\)列近似表示為\(s'\)的第\(i\)個元素的加密。"近似"轉換:\(c=W.c'\) ,例如:
\(s\)的第\(i\)個元素為\(s_i' \in A\)(範數遠小於\(q\)),\(W\)的第\(i\)列為一個\(n\)維向量\(w_i\),則

\[[<w_i,s>mod \Phi_m(X))]_q=2e_i+s_i' \]

其中,\(e_i\)的範數很低,那麼對於\(e=(e_1,e_2,..,e_{n'})\),有\(sW=s'+2e \in A_q\),對於任意的密文\(c'\),設\(c=W.c'\in A_q\),則有:

\[[<c,s>mod\Phi_m(X))]_q=[sWc'mod\Phi_m(X)]_q=[<c',s'>+2<c',e>mod \Phi_m(X)]_q \]

可以看出,由於\([<c',s'>mod \Phi_m(X)]_q\)的範數遠小於\(q\),而且\(e\)的範數遠小於\(q\),故$$[[<c,s>mod\Phi_m(X))]_q]_2=[[<c',s'>mod \Phi_m(X)]_q]_2$$

總的來說,金鑰交換改變了金鑰,模數沒有改變,噪音增加了\(2||<c',e>||_2\)

模交換

模交換用來減少噪音的範數,具體來說(密文,金鑰,模數):
\((c,s,q)\)->模交換->\((c',,s,q')\)

其中,新模數\(q'\)給定,\(c'=c.q'/q\)\(c\)乘以\(q'/q\),得到了一個"分數密文",然後通過四捨五入得到整數密文\(c'\)。模交換需要滿足兩個前提條件:

  • \(c'=c (mod 2)\)
  • 四捨五入產生的噪音範數很小,即\(\tau \overset{def}{\leftarrow} c'-(q'/q)c\)的範數很小

\(c\)\(c'\)的轉換是用係數表示法,只要金鑰\(s\)的範數足夠小和\(q'<<q\),則噪音的大小就可以降低!

因為模數改變,所以BGV方案需要提前準備"一串"模數,即模數鏈(chain of moduli),\(q_0<q_1<...<q_{L-1}\),從小到大,\(L\)為方案的級數(層數),對於"新鮮密文"對應的模數為\(q_{L-1}\),即最大。

同態計算(一般指乘法)後密文的噪音過大,需要執行模交換將模數從\(q_i\)轉換為\(q_{i-1}\),噪音降低。直到模數為\(q_0\),就不能進行同態計算了,所以才叫做有限級數的FHE(Leveled-FHE)。

自同構

定義一種對映:

\[\kappa _i:a\to a^{(i)} \]

使得\(a(X)\in A\)轉換為\(a^{(i)}(X)\overset{def}{\leftarrow}a(X^i) mod \Phi_m(X)\)

也是一種對密文的運算,具體來說(密文,金鑰,明文):
\((c,s,a)\)->自同構->\((c^{(i)},s^{(i)},a^{(i)})\)

具體沒看懂,涉及到伽羅瓦群的概念,後面補充

打包密文

明文空間:\(A_2\)可以看作是一個"plaintext slots"向量,具體說:若分圓多項式\(\Phi_m(X)\)能拆分為\(l\)個不可約多項式的乘積,即\(\Phi_m(X)=\prod_{j=}^{l-1}F_j(X)(mod 2)\),則一個明文\(a(X)\in A_2\)可以被看作是\(l\)個小多項式的編碼而成,即\(a_j(X)=a(X) mod F_j(X)\),這裡的\(a_j(X) mod F_j(X)\)是一個slot,因此我們可以用它表示擴域\(GF(2^d)\)上的一些元素。

為什麼可以表示,或許是擴域的性質吧

附錄

明文槽(plaintest slot)

多項式環:\(A=Z[X]/\Phi_m(X)\)
明文空間:\(A_2\)
密文空間:\(A_q\)
分圓多項式\(\Phi_m(X)\)可以分為\(l\)個不可約多項式的乘積,即\(\Phi_m(X)=F_1(X).F_2(X)....F_l(X) (mod 2)\),其中\(F_i(X)\)的最大階數為\(d=\phi(m)/l\),每一個\(F_i(X)\)對應一個"plaintest slot",所以\(a\in A_2\)可以表示為一個\(l\)長的向量\((a mod F_i(X))_{i=1}^l\)

伽羅瓦群\(Gal=Gal(Q(\zeta _m)/Q)\)包含一個對映:

\[\kappa _k:a(X)\to a(x^k)mod\Phi_m(X) \]

並且\(a(x^k)\)\((Z/mZ)^*\)同構。

等學完伽羅瓦群后再回看

標準嵌入範數(Canonical embedding norm)

雙CRT表示(Double CRT)

分圓多項式\(\Phi_m(X)\)包含m次本原根,可以分為本原根的乘積:\(\Phi_m(X)=\prod_{i\in(Z/mZ)^*}(X-\zeta ^j)(mod q)\);
模數\(q\)可以拆分為多個素數相乘\(q=\prod_{i=0}^{t}p_i\);
所以一個密文\(a\in A_q\)可以表示為一個\((t+1)*\phi(m)\)的矩陣(以\(\Phi_m(X)mod p_i\)包含m次本原根為元素),即:

\[dble-CRT^t(a)=(a(\zeta ^j )mod p_i)_{0\leq i\leq t,j\in \phi(m)} \]

其中,這種表示法可以用\(t+1\)次FFT演算法(模 \(p_j\)),如下:

一次FFT,可將一個多項式"解碼為"一組數(向量)編碼;而逆操作,則需\(t+1\)次IFFT演算法(模 $\Phi_m(X) $模 \(p_j\)),如下:

一次IFFT,可以將一組數(向量)"編碼為"一個多項式

這種表示法也具有同態乘法和加法:

參考

1、Fully Homomorphic Encryption with Polylog Overhead

相關文章