本節內容記錄閱讀該論文的筆記
介紹
首先,介紹了兩種明文“打包”的方法:PVW和SV
PVW:對應論文(PVW:A framework for efficient and composable oblivious transfer),打包思想就是,將多個bit明文是為一個明文向量。
SV:對應論文(SV11:Fully homomorphic SIMD operations),打包思想:將多個明文通過“編碼”插入到一個多項式上,轉換成多項式的計算相當於這麼多明文計算。多用於基於RLWE方案的。
Regev簡介
原paper:On lattices, learning with errors, random linear codes, and cryptography
加密單位元資料:系統引數\(q\in Z\),明文位元\(b\in (0,1)\),私鑰\(s\)和密文\(c\)都是向量\(Z^n\),
加解密
具體加解密參考:密碼演算法彙總
將明文\(b\)加密,密文是個向量,解密的私鑰\(s\)也是向量,解密框架為:
\(z=<c,s>(mod q)=k.q+b.q/2+e(mod q)\),其中\(e,k\)是小整數,\(z\)的範圍為\([-q/2,q/2]\),若\(|z|<q/4\),則解密為0,否則為1。
同態計算
(1)加法
Regev本身支援同態加法計算,即\(E(b_1+b_2)=c_1+c_2(mod q)\)。
(2)乘法
在該paper:(BV11a:Efficient fully homomorphic encryption from (standard) LWE)中給出同態乘法運算:
這裡的“乘法”是張量積,滿足:\(E(b_1.b_2)=(c_1\bigotimes c_2\)),並滿足\(<s_1,c_2>.<s_2,c_2>=<s_1\bigotimes s_2,c_1\bigotimes c_2>\)
張量積:參考(點積、張量積和範數)
下面就是如何構造乘法後的正確解密:
\(c^*=\left \lceil 2/q.(c_1\bigotimes c_2)\right \rfloor\)
則:\(z^*=<s\bigotimes s.c^*>=k^*.q+b_1b_2.q/2+e^*(mod q)\),其中\(k^*,e^*\)也是相對較小的,所以引數選取適當的情況下,乘法後能正常解密!
可以看出,如果\(c_1,c_2\)是一個\(n\)維的向量的話,則\(c_1\bigotimes c_2\)是一個\(n^2\)維的矩陣,若在此基礎上再進行一次乘法,則新密文的維數為\(n^4\),可見存在一個問題:密文維數隨著乘法次數而變大(指數級)。
所以需要一種方法去“降維”,即(BV11a)中給出的重線性化技術(re-linearization)將密文維數\(n^2\)將為\(n\)。
重線性化,實質上就是金鑰交換技術(Key Switching),即給出兩個金鑰\(s,s'\),使用金鑰交換技術將金鑰\(s'\)對應的密文轉換為\(s\)對應的密文。金鑰交換矩陣實際上包含用\(s'\)加密的\(s\),這是一個矩陣(金鑰交換矩陣),其實也是將\(s\bigotimes s\)轉換為\(s\)
打包“壓縮”明文
前面提到原始的Regev方案是加密單bit明文,密文和金鑰都是向量,這樣效率較低。
可以將多個金鑰\(s_i\)按行組成一個矩陣\(S\),可以加密一個明文向量\(b\),解密時:\(z=S.c=k.q+b.q/2+e\),其中\(k,e\)是小向量。(這裡的金鑰有多種?)
(1)打包明文的計算
還是和上面說的類似,加法(mod q),乘法通過張量積。
只不過在乘法後執行重線性化時有些變化:
假設\(c^*\)是一個高維的“打包”密文,對於每\(i\)個明文\(b_ib_i'\),對應的金鑰為\(s_i\bigotimes s_i\),現在如何進行重線性化呢?
選擇一個合適的金鑰交換矩陣(用\(s_i\)加密的\(s_i\bigotimes s_i\)),可以將\(c^*\)轉換為一個新的密文\(c'\),對應的金鑰為 \(s_i\)。
(2)其他計算
可以在“打包”明文基礎上實現SIMD同態計算、密文置換(permutation),並且使用PVW方法進行密文置換比使用SV方法更有優勢。
SV方法,是通過自同構(automorphisms)實現,但是需要其他計算;而PVW是通過金鑰交換實現的。
密文置換:移動密文內的slot,實現密文置換,解密後相當於明文置換。
基礎
符號
(1)範數
\(||v||_1\):歐式範數
\(||v||_{\infty }\):無窮範數
具體參考:點積、張量積和範數
(2)其他符號
\(Z_q\):表示範圍在\([-q/2,+q/2]\)內的整數
\([a]_q\):表示\(a mod q\)
\(\left \lceil a \right \rfloor\):表示四捨五入
\(\left \lceil a \right \rfloor_q\):表示\(\left [\left \lceil a \right \rfloor \right ]_q\)
LWE問題
安全引數\(n\),模數\(q>poly(n)\),\(\chi\)表示均值為0,標準差為\(q/ \beta\)的離散高斯分佈,\(\beta =poly(n)\)
問:poly()表示什麼意思?
關於LWE問題的困難性,在[Regev09]中給出了證明,表明能將LWE問題通過量子規約(quantum reductions)到\(n\)維格上的困難問題;在[Pei09]中給出了經典規約的方法(classical reductions)
SLWE
即搜尋版本的LWE(search-LWE):
對於\((a_i\in Z_q^n,b_i=[<s,a_i>+e_i]_q)\),\(e_i\in \beta\) ,給出\(a_i,b_i\),難以計算出\(s\)
DLWE
即判絕版本的LWE(decision-LWE):
給出\(<a_i'\in Z_q^n,b_i'\in Z_q^n>\)和\((a_i\in Z_q^n,b_i=[<s,a_i>+e_i]_q)\)是難以區分的
Regev方案
一個基於LWE問題的公鑰加密方案,這裡給出了一個對稱加密方案,可以通過範型變換(generic transformations)獲得一個公鑰加密方案。
範型變換?
明文空間\(Z_2=(0,1)\),模數\(q\),安全引數\(n'\),\(n=n'+1\)
這裡介紹對稱加密方案
金鑰生成
金鑰\(s'\in \chi ^{n'}\),明文\(\sigma\in Z_2\),選取\(a\in Z_q^{n'}\),\(e\in \chi\)(小向量)
加解密
計算\(b=[\sigma q/2-<s',a>+e]_q\),輸出密文\((b,a)\)
解密:
計算\(d=[b+<s',a>]_q=[\sigma q/2+e]_q\),若\(d>q/4\),則輸出1,否則輸出0。
解密成功的關鍵在於\(||e||_{\infty}<<q/4\)
上述解密可以看作:\(\sigma =\left \lceil [<s,c>]_q /(q/2)\right \rfloor_2\),其中\(s=(s|s'),c=(b|a)\)都是\(n\)維向量。
\(<s,c>=kq+\sigma q/2+e\),\(||<s,c>||_{\infty}<<q^2,|k|<<q\)。
以上基礎的加密方案只需\(|e|<<q/4\),下面在同態計算中,需要\(k,e<<q\)。
同態計算
若\(c_1,c_2\)是兩個有效密文,分別對應的明文為\(b_1,b_2\in Z_2\),使用的金鑰是\(s\),從上面可知,滿足:\(<s,c_i>=k_iq+b_iq/2+e_i\),其中\(k_i,e_i\)是很小的數。
(1)加法
對於\(c'=[c_1+c+2]\),滿足\(<s,c'>=k'q+(b_1\bigoplus b_2)q/2+e_i'\),其中\(k'=k_1+k_2\) 或 \(k_1+k_2\pm 1<<q\)和\(e'=e_1+e_2 <<q\)。(這裡的加法是異或)
所以\(c'\)是\(b_1+b_2\)的有效加密。
(2)乘法
在【BV11】和【Bra12】中給出了Regev的乘法同態。
對於\(c^*=c_1\bigotimes c_2\)(\(n^2\)維向量),\(s^*=s\bigotimes s\),有乘法:
這裡的\(e''\)是多項式大於(polynomially (n) larger )\(e_1,e_2\)的,因為\(k_1,k_2\)是有範圍的\(poly(n)\)
這裡如何理解:polynomially larger?
見參考【1】
在這裡的意思就是\(e''/e_1\)或者\(e''/e_2\)是有範圍的!
下面將\(2/q.c^*\)四捨五入為整數向量,即求\(\left \lceil 2/q.c^*\right \rfloor=2/q.c^*+e\),其中\(e\)是舍入誤差,\(||e||_{\infty} \leq 1/2\),則:
其中\(e^*\)是誤差集合,\(k^*\)是一些整數,由於\(s^*=s\bigotimes s\)和\(e\)中元素很小,所以\(<s^*,e>\)也很小,且\(|e^*|<<q\)。
最後令\(c''=\left \lceil 2/q.c^*\right \rfloor_q\),滿足:
其中\(e^*<<q\),\(k^*\)滿足:
所以\(c''\)是\(b_1b_2\)的有效加密,金鑰為\(s^*=s\bigotimes s\)。
金鑰交換
上面可以看出,密文相乘後,維數擴張嚴重(指數級)。在【BV11a】中給出了方法-金鑰交換技術,作用就是降維。
從上面金鑰交換的簡單介紹中,可知道主要功能:將一個維數為\(n^2\)維的密文\(c'\),對應的金鑰為\(s'\),轉換為一個新的密文\(c\),其維數為\(n\),對應的金鑰為\(s\)。
下面介紹一種金鑰交換的變體技術,相對更加簡單。
(1)金鑰交換需要一個金鑰交換矩陣
金鑰交換(\(s^*->s\))可以看成:在金鑰\(s\)下加密的\(s^*\),詳細點說:對於每一個\(s^*[i]\),構造一個公開的“計算金鑰”\(w_i\)(rational “ciphertext” ),滿足:\(<s,w_i>=k_iq+s^*[i]+e_i\),其中\(k_1\)是一個整數,\(|e_i|\leq poly(n)/q\),將所有的\(w_i\)按列組成一個\(n*n^2\)的矩陣\(W\),滿足\(s.W=kq+s*+e\),其中\(k\)是一個整數向量,\(||e_i||_{\infty}\leq poly(n)/q\)。
(2)然後將高維密文轉換為低維密文
給出一個\(n^2\)維密文向量\(c^*\)滿足:\(<s^*,c^*>=k'q+b(q/2)+e'\),其中\(k'\)是小整數,\(e' <<q ,b\in Z_2\)。定義\(c=\left \lceil Wc^* \right \rfloor_q=Wc^* +e^* +k^*q\),其中\(e^*\)是舍入誤差,\(k^*\)是整數,則:
其中的\(\widetilde{e}\)是有界限的:
即\(|\widetilde{e}|<<q\),那麼對於\(\widetilde{k}\),有:
總的來說,對於維數為\(n\)的新密文\(c\),滿足\(<s,c>=\widetilde{k}q+b(q/2)+\widetilde{e}\),其中\(\widetilde{k},\widetilde{e}<<q\),所以能夠將一個高維\(n^2\)密文\(c^*\),轉換為低維\(n\)的密文\(c\),且對應的明文都是\(b\),即新密文\(c\)是有效的加密,其中金鑰是\(s\)。
“打包”明文的計算
介紹
從上面可以看出,1bit的明文加密後的密文是\(n'+1\)維,在【PVW08】中給出了一種“打包”明文的方法,提升計算效率,簡單點說就是,\(m'\)bit的明文加密後的密文是\(m=n'+m'\)維
這裡選取\(m'\)個向量(\(m'\)個大小為\(n'\)的向量),即\(s_i\in \chi^{n'}\),將其組成一個\(m'.n'\)的矩陣\(S'\)(按行),之前使用的是\(n'+1\)維的金鑰向量\(s=(1|s')\),現在使用的是\(m'.m\)的金鑰矩陣\(S=(I|S')\),其中,\(I\)是i個\(m'.m'\)的單位矩陣。
上面是金鑰生成,下面開始加解密:
(1)加密
對於明文\(b\in Z_2^{m'}\),即明文是一個位元串(向量),隨機取向量\(z\in Z_q^{n'}\),誤差向量\(x\in \chi ^m\),計算\(d=[b.q/2-S'a+x]_q\),輸出密文向量\(c=(d|a)\in Z_q^m\)。
(2)解密
計算\(Sc=d+S'a=b.q/2+x(mod q)\),對於計算結果(向量),觀察其中每個元素,若元素大於\(q/4\),則為1,否則為0。其中\(x\)中的每個元素遠小於\(q\),解密也可以表示為\(b=\left \lceil [Sc]_q/(q/2) \right \rfloor_2\)。
總的來說,對於密文\(c\),對應金鑰為\(S\),有效的解密為:
其中\(\left\|k \right\|_{\infty },\left\|x \right\|_{\infty }<<q\)。
(3)同態計算
從加解密來看,對於兩個密文\(c_1,c_2\in Z_q^m\),分別對應明文是\(b_1,b_2\in Z_2^{m'}\),金鑰為\(S\in Z_q^{m'.m}\)。
密文相加\(c'=[c_1+c_2]_q\),分別對應於明文\((b_1\bigoplus b_2)\)。
密文相乘\(c''=[2/q.c_1 \bigotimes c_2]_q\),分別對應明文\(b_1\bigodot b_2\in Z_2^{m'}\)(bitwise product,按位乘)。
金鑰交換
金鑰交換是需要“計算金鑰”(public key key-switching gadgets)的,利用計算金鑰使得\(s_i^*->s_i\),但是這樣對於每一個密文轉換\((c''->c)\),都需要一個計算金鑰,我們想要的是使用一個計算金鑰,將高維密文\(c''\)(對應的金鑰為\(s^*\)),轉換為一個低維密文\(c\)(對應金鑰為\(s\))。
計算金鑰能得到金鑰交換矩陣\(W\)
金鑰交換的“計算金鑰”可以看作是用金鑰\(s\)加密\(s^*\)構成的。具體來看,就是把\(s_i\)作為金鑰,加密所有的\(s_i^*\)。
這裡的金鑰交換矩陣\(W\),滿足\(SW=S*+E(mod q)\),其中\(E\)是誤差矩陣。具體說,\(m=n'+m'\),可以利用\(W\in Q^{m.m^2}\),將\(S^*\in Z^{m'.m^2}\)對應的密文轉換為\(S=(I|S')\in Z^{m'.m}\)對應的密文,那\(W\)如何求呢?
上面比較重要的內容是:想要安全性高,那就要提升模數\(n'\)的大小。
對於\(j\in (1,2,...,m^2)\),\(\widetilde{s}_j \in Z^{m'}\)組成矩陣\(S^*\)(按列),\(a_i\in Z_Q^{n'}\)組成矩陣\(W\)(按行),\(e_j\in Z^{m'}\)是誤差向量,計算\(d_j=[2^l.\widetilde{s}_j-S'a_j+e_j]_Q\),輸出\(w_j=(d_j|a_j)^T/2^l\in Q^m\),按行組成\(W\)。
\(d_j\)也可以表示為\(d_j=2^l.\widetilde{s}_j-S'a_j+e_j+kQ\),則滿足:
也即是:
其中整數矩陣\(K\)和誤差矩陣\(E\)滿足\(\left\|E \right\|_{\infty }\leq poly(n)/q\)
總結
給出一個高維密文\(c^*\),對應金鑰為\(S*\),利用金鑰交換矩陣\(W\),可得低維新密文\(c=\left \lceil Wc^* \right \rfloor_q\),對應金鑰為\(S\),且解密後的明文是一樣的。
若對於\(S^*.c^*=k^*.q+b(q/2)+e^*\)和\(S.c=k.q+b(q/2)+e\),需要滿足\(k^*,e^*,k,e<<q\)。
在一個Leveled-FHE方案中,需要提前生成多個互相獨立的金鑰矩陣\(S_k\),使得在每次乘法後執行金鑰交換,轉換為新的金鑰,所以在該方案中,乘法的次數就受限於金鑰的個數。
安全性是基於LWE問題。上面的引理是在\(S^*\)和\(S\)是獨立關係的前提下,假如\(S^*\)和\(S\)不是獨立的,那這就依賴於“迴圈安全假設”(circular security)了。
密文置換
使用以上技術,可以實現“壓縮”版的SIMD同態計算,就是每計算一次相當於計算多次!
在密文計算量更大的需求下,“壓縮”實為是一種好的實現,對於密文置換,可以利用金鑰交換實現。
介紹
什麼是密文置換?
規定一種置換對映\(\pi()\):
對於一個密文\(c\),對應金鑰為\(S\),解密後的密文為\(b\in Z_2^{m'}\),將其作用在\(\pi()\)上,得到\(c'=\pi(c)\)。用\(S\)去解密\(c'\),會得到\(\pi(b)\)。
使用金鑰交換實現很簡單:準備一個金鑰交換矩陣\(W\),可以得到將\((\pi(S)->S)\)
對於\(\pi(c)\),對應金鑰為\(\pi(S)\),解密明文為\(\pi(b)\),使用金鑰交換,將其轉換為一個新的密文\(c'\),對應的金鑰為\(S\),解密明文為\(\pi(b)\)。
總結
本文基於LWE問題,設計了一種PVW變體的壓縮明文方案,這就類似於SV壓縮方案,在環上的便利。
基於整數環和多項式環上的對比
(1)基於多項上環比實數環的方案具有更好的漸進效率(asymptotic efficiency)
(2)兩種情況下密文的大小大致相同:多項式環上的密文是一個多項式,其中包含\(O(n)\)個整數。
(3)對於密文乘法(tensor product multiplication),基於整數的密文大小擴大為\(O(n^2)\)倍,基於多項式的密文大小仍是\(O(n)\)。
(4)對於重線性化,基於整數的金鑰交換矩陣為\(O(n^3)\),基於多項式的金鑰交換矩陣為\(O(n)\),基於整數上的計算會產生更多開銷。
(5)對於密文中的“slot”個數,基於多項式的是由底層環結構決定的,基於整數的slot個數可以任意設定。
(6)在密文置換上,基於整數的比基於多項式更優。
(7)對於金鑰交換,基於整數的比基於多項式的更方便和高效。
參考
1、【論文閱讀筆記】-針對RSA的短解密指數的密碼學分析(Cryptanalysis of Short RSA Secret Exponents)
2、範數||x||(norm)筆記