全同态加密(FHE):BV方案、密钥切换、模约化、自举
目前,全同態(tài)加密FHE,僅僅在格上被構(gòu)造出來。
編碼
-
most significant bit encoding
-
Encode:
輸入1比特的消息 u u u,計(jì)算
b = < s , a > + e + u ? ? q 2 ? m o d q b = <s,a>+e + u\cdot \lfloor \dfrac{q}{2} \rceil \mod q b=<s,a>+e+u??2q??modq
其中 e e e是一個(gè)很小的error輸出
E n c ( u ) = ( a , b ) Enc(u) = (a,b) Enc(u)=(a,b) -
Decode:
輸入 c = ( a , b ) c = (a,b) c=(a,b),計(jì)算
t = b ? < s , a > ≈ u ? ? q 2 ? m o d q t = b - <s,a> \approx u \cdot \lfloor \dfrac{q}{2} \rceil \mod q t=b?<s,a>≈u??2q??modq
輸出
D e c ( c ) = { 0 , t ≈ 0 1 , t ≈ q 2 Dec(c) = \left\{ \begin{aligned} 0,&& t \approx 0\\ 1,&& t \approx \dfrac{q}{2}\\ \end{aligned} \right. Dec(c)=????0,1,??t≈0t≈2q??
-
-
least significant bit encoding
-
Encode:
輸入1比特的消息 u u u,計(jì)算
b = < s , a > + u ˉ m o d q b = <s,a> + \bar u \mod q b=<s,a>+uˉmodq
其中 u ˉ ≡ u m o d 2 \bar u \equiv u \mod 2 uˉ≡umod2是一個(gè)很小的error輸出
E n c ( u ) = ( a , b ) Enc(u) = (a,b) Enc(u)=(a,b) -
Decode:
輸入 c = ( a , b ) c = (a,b) c=(a,b),計(jì)算
t = b ? < s , a > = u ˉ m o d q t = b - <s,a> = \bar u \mod q t=b?<s,a>=uˉmodq
輸出
D e c ( c ) = { 0 , t ≡ 0 m o d 2 1 , t ≡ 1 m o d 2 Dec(c) = \left\{ \begin{aligned} 0,&& t \equiv 0 \mod 2\\ 1,&& t \equiv 1 \mod 2\\ \end{aligned} \right. Dec(c)={0,1,??t≡0mod2t≡1mod2?
-
-
如果記 s ˉ = ( ? s , 1 ) \bar s = (-s,1) sˉ=(?s,1),那么 D e c ( c ) = < s ˉ , c > = b ? < s , a > Dec(c) = <\bar s,c> = b-<s,a> Dec(c)=<sˉ,c>=b?<s,a>
-
當(dāng)明文、密文的模數(shù)互素時(shí),兩種編碼方式等價(jià)。可以在不知道 s s s的情況下從一種編碼轉(zhuǎn)換為另一種編碼。
BV scheme
-
BV方案是一種FHE,它支持同態(tài)布爾運(yùn)算 (模2加法、模2乘法)。由于這兩個(gè)布爾邏輯是完備的,我們可以搭建起任意電路。
-
BV方案使用關(guān)于奇數(shù) q q q的LWE秘密 s s s作為私鑰,將LWE采樣作為密文 c = ( a , b ) c=(a,b) c=(a,b)
-
使用least significant bit encoding編碼方式: D e c ( c ) = < s ˉ , c > = u ˉ m o d q Dec(c) = <\bar s, c> = \bar u \mod q Dec(c)=<sˉ,c>=uˉmodq
-
加法同態(tài):
< s ˉ , c 1 + c 2 > = < s ˉ , c 1 > + < s ˉ , c 2 > = u ˉ 1 + u ˉ 2 m o d q <\bar s, c_1 + c_2> = <\bar s,c_1> + <\bar s,c_2> = \bar u_1 + \bar u_2 \mod q <sˉ,c1?+c2?>=<sˉ,c1?>+<sˉ,c2?>=uˉ1?+uˉ2?modq -
乘法同態(tài):
< s ˉ ? s ˉ , c 1 ? c 2 > = < s ˉ , c 1 > ? < s ˉ , c 2 > = u ˉ 1 ? u ˉ 2 m o d q <\bar s \otimes \bar s, c_1 \otimes c_2> = <\bar s,c_1> \cdot <\bar s,c_2> = \bar u_1 \cdot \bar u_2 \mod q <sˉ?sˉ,c1??c2?>=<sˉ,c1?>?<sˉ,c2?>=uˉ1??uˉ2?modq
其中的 ? \otimes ?是克羅內(nèi)克積 (Kronecker product)對(duì)于 c 1 , c 2 ∈ Z q n c_1,c_2 \in Z_q^n c1?,c2?∈Zqn?,有
c 1 ? c 2 = ( c 1 , i ? c 2 , j ) i , j ∈ Z q n 2 c_1 \otimes c_2 = (c_{1,i} \cdot c_{2,j})_{i,j} \in Z_q^{n^2} c1??c2?=(c1,i??c2,j?)i,j?∈Zqn2? -
隨著密文同態(tài)乘法的計(jì)算,密文的規(guī)模迅速增大。每次相乘,因?yàn)楹?span id="ozvdkddzhkzd" class="katex--inline"> c i ∈ Z q n c_i \in Z_q^n ci?∈Zqn?做克羅內(nèi)克積,其密文的規(guī)模擴(kuò)大 n n n倍。
-
同時(shí),噪聲規(guī)模也在迅速增長(zhǎng)。若干次同態(tài)乘法后,噪聲將會(huì)大到淹沒原始信息的程度,從而導(dǎo)致解密失敗。
Key switching technique
-
通過替換密鑰,約簡(jiǎn)密文的維度。
-
假設(shè) s i n s_{in} sin?把信息 u u u加密為 c i n c_{in} cin?,令 s i n , c i n ∈ Z q n i n s_{in},c_{in} \in Z_q^{n_{in}} sin?,cin?∈Zqnin??
< s i n , c i n > = ( s i n t G ) ? G ? 1 ( c i n ) ≈ u ? ? q 2 ? <s_{in},c_{in}> = (s_{in}^tG) \cdot G^{-1}(c_{in}) \approx u \cdot \lfloor \dfrac{q}{2} \rceil <sin?,cin?>=(sint?G)?G?1(cin?)≈u??2q??
其中 G ∈ Z q n i n × ( n i n l ) G \in Z_q^{n_{in} \times (n_{in}l)} G∈Zqnin?×(nin?l)?是工具矩陣 (Gadget Matrix),編碼方式為most significant bit encoding -
選取 s o u t ∈ Z q n o u t s_{out} \in Z_q^{n_{out}} sout?∈Zqnout??,對(duì)于方程
s o u t t K ≈ s i n t G m o d q s_{out}^tK \approx s_{in}^t G \mod q soutt?K≈sint?Gmodq
可以求解 K ∈ Z q n o u t × ( n i n l ) K \in Z_q^{n_{out} \times (n_{in}l)} K∈Zqnout?×(nin?l)?,它的第 j j j列是關(guān)于 s o u t s_{out} sout?的LWE采樣 ( a , s o u t t a + e + s i n t G j ) (a,s_{out}^ta+e+s_{in}^t G_j) (a,soutt?a+e+sint?Gj?)如果 s i n s_{in} sin?與 s o u t s_{out} sout?獨(dú)立,那么 K K K是偽隨機(jī)的。
-
令
c o u t = K ? G ? 1 ( c i n ) ∈ Z q n o u t c_{out} = K \cdot G^{-1}(c_{in}) \in Z_q^{n_{out}} cout?=K?G?1(cin?)∈Zqnout??
其中 G ? 1 ( c i n ) G^{-1}(c_{in}) G?1(cin?)是短整數(shù)向量。 -
容易驗(yàn)證
< s o u t , c o u t > = ( s o u t t K ) ? G ? 1 ( c i n ) ≈ ( s i n t G ) ? G ? 1 ( c i n ) = < s i n , c i n > <s_{out},c_{out}> = (s_{out}^t K) \cdot G^{-1}(c_{in}) \approx (s_{in}^tG) \cdot G^{-1}(c_{in}) = <s_{in},c_{in}> <sout?,cout?>=(soutt?K)?G?1(cin?)≈(sint?G)?G?1(cin?)=<sin?,cin?>
即 s o u t s_{out} sout?把信息 u u u加密為 c o u t c_{out} cout?
Modulus reduction technique
-
將模數(shù) q q q除掉 p o l y ( n ) poly(n) poly(n),控制錯(cuò)誤比率幾乎不變。
-
設(shè)置 q = n Θ ( d ) q = n^{\Theta(d)} q=nΘ(d),那么可以支持深度 d d d的乘法電路。
-
當(dāng)從 Z q Z_q Zq?轉(zhuǎn)換到 Z q ′ Z_{q'} Zq′?時(shí),使用舍入操作 ? c ? q ′ = ? q ′ q ? c ? \lfloor c \rceil_{q'} = \lfloor \dfrac{q'}{q} \cdot c \rceil ?c?q′?=?qq′??c?
-
那么
< s , c > ∈ e + q Z ? < s , ? c ? q ′ > ∈ < s , q ′ q ? c + [ ? 0.5 , 0.5 ] n > ? ( q ′ q ? e + ∥ s ∥ n ? [ ? 0.5 , 0.5 ] ) + q ′ Z \begin{aligned} <s, c> &\in\, e+qZ\\ &\Downarrow\\ <s, \lfloor c \rceil_{q'}> &\in\,\,\, <s, \dfrac{q'}{q} \cdot c + [-0.5,0.5]^n>\\ &\sube (\dfrac{q'}{q} \cdot e + \|s\|\sqrt n \cdot [-0.5,0.5]) + q'Z \end{aligned} <s,c><s,?c?q′?>?∈e+qZ?∈<s,qq′??c+[?0.5,0.5]n>?(qq′??e+∥s∥n??[?0.5,0.5])+q′Z? -
由于 s s s是短向量,因此在 Z q ′ Z_{q'} Zq′?上的錯(cuò)誤比率維持在 ∣ e ∣ / q |e|/q ∣e∣/q附近。
Bootstrapping
- 目前的FHE都是“leveled”的。即:雖然可以支持同態(tài)加法和同態(tài)乘法兩種運(yùn)算,且同態(tài)加法 (幾乎) 可以無限次運(yùn)算;但是,同態(tài)乘法會(huì)使得密文中的噪聲迅速增長(zhǎng),淹沒掉原始的信息,從而無法正確解密。
- 為了獲得“unbounded”的FHE,Gentry提出了一種自舉算法:將私鑰 s k 1 sk_1 sk1?用公鑰 p k 2 pk_2 pk2?加密,將 p k 1 pk_1 pk1?下的密文也用公鑰 p k 2 pk_2 pk2?加密,然后運(yùn)行解密函數(shù) (同態(tài)運(yùn)算),得到 p k 2 pk_2 pk2?下的密文。
- 只要解密操作沒有消耗掉所有的乘法次數(shù),那么就可以繼續(xù)在密文下對(duì)消息進(jìn)行同態(tài)計(jì)算了。
- 設(shè)置 s k 1 = s k 2 = s k , p k 1 = p k 2 = p k sk_1=sk_2=sk,\,pk_1=pk_2=pk sk1?=sk2?=sk,pk1?=pk2?=pk,這需要額外的安全要求:循環(huán) (circular) 加密安全,即使用 p k pk pk加密 s k sk sk后得到的 c s k c_{sk} csk?對(duì)于消息 m m m的密文 c c c的解密沒有幫助。
- 這條性質(zhì)很難證明,但同時(shí)目前也沒有攻擊方案。
總結(jié)
以上是生活随笔為你收集整理的全同态加密(FHE):BV方案、密钥切换、模约化、自举的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信公众号开发 入手
- 下一篇: Linux网络编程(四)