在看SEAL庫和HElib庫中經常在編碼中碰到打包(batch)技術,另外還提到了SIMD編碼技術,有點困惑,編碼、打包、SIMD到底有什么關系?
今天看到一篇文章,徹底讀懂了SIMD編碼,推薦【更新|Cheetah: 精簡快速的安全兩方DNN推理】
編碼
在CKKS方案中,因為明文空間在復數域上,簡單的說一個明文就是一個復數向量,那么CKKS是基於RLWE問題,計算是在環上,也就是整數多項式上,所以在加密之前需要進行編碼,將一個復數向量編碼成一個整數多項式,然后在加密,進而計算。
那如何將一個復數向量編碼為了整數多項式?
具體細節請參考:CKKS Part2: CKKS的編碼和解碼
BGV和BFV方案同樣也是,都是基於RLWE問題,計算是在環上,不同的是他們的明文空間在整數域上,所以也需要編碼,將其轉化為一個整數多項式。
簡單點說,CKKS中的編碼:
1、首先通過一個映射,將復數向量轉成實數多項式
2、然后通過放大實數多項式的系數,然后取整的操作,實現了實數多項式轉整數多項式
新的編碼技術
由於已知的全同態加密方案一般不支持對有理數進行加密,因而本文需要建立連接有理數與整數的紐帶。在不影響有理數精度的情況下,最簡單的方法是將有理數乘以一個固定數 B 的冪,例如 \(B^2\),其中 \(B ≥ 2\)。接着,再對處理后的有理數進行加密和同態運算。最后,將解密結果除以 B 的冪即可得到正確運算結果。然而,每經過一次乘法同態則需要一次對解密結果除以 B 的冪操作。
這里和CKKS編碼很像,要乘以一個縮放因子,放大有理數;然后進行一次乘法同態后,縮放因子變大,所以每進行一次乘法同態就需要除於一次B的冪,和CKKS中的rescaling(重縮放)很像啊
這里【1】給出了一種新的編碼技術,可以將一個有理數編碼為環上元素
batch技術
使用了SIMD技術,從而實現了打包,即SIMD編碼的過程。從編碼上看,就是將一些明文(數
)打包為一個多項式,一次多項式計算,就是多個明文間的計算。能加快計算速度,提升效率!
下面簡單的介紹一下:
選擇合適的明文模數t,這里有一個環上的同構關系:明文空間\(R_t->Z_t^n\)
舉個例子就是,一個常數多項式\(a\in R_t\)對應一個向量\((a_1,a_2,...,a_n)\in Z_t^n\),且這個同構能將多項式之間的加法和乘法映射為向量之間的加法和乘法。
所以使用這個打包技術能減少通信和計算開銷。
1、首先將Y個明文以n為一組,划分成向量組
2、然后加密,得到Y/n的密文
待補充.....
SIMD編碼
SIMD(Simple Instruction Multiple Data)直接翻譯是“單指令多數據”,網上搜索出來的大都是關於SIMD指令集,說該指令集支持向量化的數據並行,一個指令可以同時操作多個數據。聽起來有那個打包的意思,但這是指令集,和編碼有什么關系呢?
丟一個SIMD指令集在這,可以看看:
都說使用SIMD技術,可以提升效率,那SIMD到底是什么呢?
SIMD的發展
1、Smart 與 Vercauteren [18] 首次利用 SIMD技術將單比特的全同態加密方案擴展為多比特的全同態加密方案,實現了對消息的並行處理。遺憾的是該方案要求主理想范數為素數,使得算法的密鑰生成過程過於復雜。
2、2011 年,Gentry 和 Halevi [19] 提出一種運算速度更快的密鑰生成算法,該算法拋棄了主理想范數為素數的假設。
3、Scholl 和 Smart [20] 將文獻 [19] 的快速密鑰生成算法由 2 次冪分圓域擴展到任意分圓域,其算法效率為原先方案的兩倍。
4、2014 年,Smart等人 [21] 進一步對文獻 [18] 的密鑰生成算法進行優化,並介紹了如何進行參數設置以適用 SIMD 技術。
SIMD
大多數全同態加密方案的明文空間為 2。當明文消息很大時,將導致消息的編碼時間、加密時間及密文解密時間過長。為提高同態運算效率,可以利用 SIMD 技術 [21]將多個小明文編碼-加密成一個密文。
說實話,截止到這里,我還是不太明白,下面內容大佬把SIMD編碼介紹的很清楚!(有些小問題:打包的應該是\(a_i\))
總結一下:
SIMD編碼就是把一些數變成一個多項式,以上面為例就是:
(4,13)編碼為x
(1,2)編碼為2x-7
具體怎么編碼的呢?
那怎么求f(x)呢?
1、首先分圓多項式\(x^n+1\)通過CRT可以拆分為\((x+a_0)...(x+a_n)mod p\)
這里n=2,p=17,則\(x^2+1=(x-4)(x-13)mod 17\)
2、要對(4,13)編碼,就是求f(x):
使用CRT求\(f(x)\):
3、那怎么解碼呢?就是有f(x)了,怎么求(4,13)呢?
4、至於加法同態和乘法同態就是將編碼后的多項式做相應計算,解碼后相當於這些數做相應計算
滿足同態性!
應用
BGV方案
參考:雲外包密文查詢和計算研究
packing1
該小節是論文"A low latency framework for Secure neural network inference"中的一部分,描寫SIMD的,在此記錄。
(1)描述了一個使用"pack"技術的加法同態方案。"pack"即支持將多個明文數據打包到一個密文中,同態計算有以下操作:SIMDAdd(密文+密文)、SIMDScMult(密文*明文)、Perm(密文旋轉)
(2)該方案主要包括以下算法:Enc(加密)、Dec(解密)、Eval(同態計算)。
(3)該方案需要滿足兩個安全性:IND-CPA安全,即在計算上無法區分兩個不同的密文;函數安全,即Eval中的\(f(x)\)只能輸出結果信息,不能泄露其他信息。
(4)主要介紹方案的參數:m,是分圓多項式的階,即\(\Phi_m(X)\);q,密文模數;p,明文模數;\(\chi\),離散高斯分布的標准方差\(\sigma\)
(5)一個打包密文中的slot個數為\(n=\phi(m)\)(歐拉函數),所以一個明文可以看作是長度為n的向量在\(Z_p\)上,密文可以看作是長度為n的向量在\(Z_q\)上;新鮮密文的噪音\(\eta\)來自隨機采樣的高斯分布,同態計算會導致噪音\(\eta\)增加;Dec(解密)的正確性需要滿足$\left|\eta \right| <q/(2p) $。
(6)為了保證安全性,需要使得\(\sigma\)(基於q和n),\(q%m=1\),且\(gcd(p,q)=1\);維數\(r%p=q\)應盡可能小。
(7)同態加法,兩個密文(u和v)相加的運行時間為\(n.CostAdd(q)\),其中\(CostAdd(q)\)是\(Z_q=(0,1,2,...,q-1)\)中的兩個數相加的時間;增加的噪音最多至\(\eta _u+\eta _v\)。
(8)密文*明文,如果\(p%m=1\),則可以使用SIMD技術,明文v和密文u,輸出\([u*v]\),即向量中的元素逐個相乘。運行時間為\(n.CostMult(q)\),其中\(CostMult(q)\)是\(Z_q=(0,1,2,...,q-1)\)中的兩個數相乘的時間;噪音為\(\left\|v \right\|_{\infty }'.\sqrt{n}\) ,其中\(\left\|v \right\|_{\infty }\)是向量v得無窮范數,那么如果換成{0,1}向量則噪音為\(p.\sqrt{n}\)。事實上我們會使用bit-decomposing(比特分解)技術,將v轉換成{0,1}表示的向量,即\(v=\sum 2^{w_{pt}.k}.v_k\)。
(9)(Perm)密文旋轉,給定一個映射\(\pi\) ,能將一個密文\([u]\)轉換為\([u_{\pi}]=[u_{\pi(1)},u_{\pi(2)},....,u_{\pi(n)}]\)。旋轉依賴於模m的乘法群(\(Z/mZ\),m是素數),\(n=m-1\)個slot。置換群支持slot的循環旋轉。模m的乘法群(\(Z/mZ\))同構於階為n的循環群\(C_n\)。當\(m=2^k,m\geq 8,n=2^{k-1}\)時,置換同構於半循環群\(C_{n*2}*C_2\)。
(10)(密文結構)n指slot得個數;q時密文空間大小,所以一個密文需要\(\left \lceil log_2q\right \rceil\)bit;p是明文空間的大小,所以一個明文需要\(\left \lceil log_2p\right \rceil\)bit;$\eta $是密文的噪音大小。
(11)(密文旋轉),這里的旋轉映射\(\pi\)將第一個slot和第二個slot旋轉,第三個slot和第四個slot旋轉;該操作產生的噪音為\(\eta'\approx \eta+\eta_{rot}\),這里的\(\eta_{rot}\approx n.logq.\eta_0\),\(\eta_0\)是"新鮮"噪音。
(12)密文旋轉是一個"昂貴"的操作。一個旋轉的耗費\(O(n.logn.logq)\)相當於一個\(NTT\)和\(NTT^{-1}\),噪音為\(\eta_{u_{\pi}}=\eta_u+\eta_{rot}\),其中\(\eta_{rot}\)是旋轉增加的噪音。
參考
【1 】Manual for using homomorphic encryption for bioinformatics
【18】 Fully homomorphic encryption with relatively small key and ciphertext
sizes
【19】Implementing Gentry’s fully-homomorphic encryption scheme
【20】Improved key generation for Gentry’s fully homomorphic encryption
scheme
【21】Fully homomorphic SIMD operations