讀paper-"雲環境下集合隱私計算"的筆記
基礎
哥德爾編碼
可以將非負整數序列(向量)與自然數建立起對應關係
具體來說,就是無窮序列\((a_1,x_2,...,x_m)\)藉助素數序列\((p_1,p_2,...,p_m)\),建立對應關係:
\([a_1,x_2,...,x_m]\)稱作有窮序列\((a_1,x_2,...,x_m)\)的哥德爾數。
原理
根據算數基本定理,任何自然數可以唯一分解為多個素數的乘積,而構成哥德爾數的素數序列\((p_1,p_2,...,p_m)\)是已知的,因此,由\([a_1,x_2,...,x_m]\)可以很容易得到序列\((a_1,x_2,...,x_m)\)。
同態加密演算法
該方案只用到了加法或者乘法同態性,下面分別介紹兩種同態加密演算法:
ElGamal
具有乘法同態性,相比於RSA,能抵抗重放攻擊(加密時加入了隨機數)
1、加密結構:
2、乘法計算:
Paillier
具有加法同態性和一次"乘法"同態性,主要用到的還是加法同態
1、加密結構
2、加法計算
保密計算求集合並集方案
原理
1-r編碼
假設有\(n\)個集合\(X_1,...,X_n\),將每個集合\(X_i\)藉助1-r編碼方法編碼成向量\(U_i\),然後將各個向量對應分量相乘後得到新的向量\(U'\):
如果向量\(U'\)中的某個分量\(u_j'\neq 1\),說明這n個向量的第\(j\)個分量不全為1,即n個集合中至少有一個集合含有元素\(u_j\),根據集合\(U;\)中不為1的分量,可以得到並集\(X_1\cup X_2\cup ...\cup X_n\),所以求集合的並集問題可以規約到計算向量\(U'\)
舉例
下面給出三個集合\(X_1,X_2,X_3\in U\),保密的計算集合的並集:
最後$\sigma $為集合的並集。
具體方案1
在雲端計算下,資料是需要加密來保證安全的,這裡選用ElGamal加密演算法。假設有\(n\)臺伺服器\(P_1,...,P_n\),每臺伺服器中有一個集合\(X_i\),假設第\(n\)臺伺服器\(P_n\)作為leader,生成加密的公私鑰和引數,並將公鑰和引數公開
(1)雲伺服器\(P_n\)將自己的公鑰\(pk\)與引數\(params\)公開,並保留私鑰\(sk\)
(2)每個雲伺服器\(P_i(i=1,...,n)\)計算:
-
將自己的祕密集合\(X_i\)編碼為向量\(U_i\)
將\(X_i\)使用1-r編碼方法編碼為向量\(U_i=(u_{i,1},...,u_{i,m})\) -
將\(P_n\)的公鑰\(pk\)與引數\(params\)加密\(U_i\)為\(E(U_i)\)
將向量\(U_i\)中的每個分量分別加密,即\(E(U_i)=(E(u_{i,1}),...,E(u_{i,m}))\) -
將密文向量\(E(U_i)\)隨機分成\(k_i\)份併傳送給\(n\)個雲伺服器中的\(k_i\)個
為了將資料混淆來保證\(U_i\)的安全,每臺伺服器需要將\(E(u_{i,j}),j=1,...,m\)分為\(k_i(k_i \leqslant n)\)份\(E(u_{i,j})_1,...,E(u_{i,j})_{k_i}\),(\(k_i\)其他伺服器是不知道的),需要滿足:\(E(u_{i,j})_1...E(u_{i,j})_{k_i}=E(u_{i,j})\)
\(P_i\)每次從每個密文分量\(E(u_{i,j})_1,...,E(u_{i,j})_{k_i}\)中選取一個,共選取\(k_i\)次,構成\(U_i\)的\(k_i\)份密文\(E(U_i)_1,...,E(U_i)_{k_i}\),每份(向量)裡面\(m\)個元素。
如果直接對\(E(u_{i,j}),j=1,...,m\)進行分解因子,計算量大,所以這裡使用模運算進行分解因子,具體如下:
選取\(k_i\)個隨機數\(r_{i,1},..,r_{i,k_i}\in Z_p^*\),需要滿足\(r_{i,1}....r_{i,k_i}=1 mod p\),從\(k_i\)個隨機數中隨機選擇一個,如\(r_{i,1}\),和\(E(u_{i,j})\)相乘,即\(E(u_{i,j})_1=E(u_{i,j}).r_{i,1}\),然後將\(E(u_{i,j})_2,...,E(u_{i,j})_{k_i}\)用\(r_{i,2},...,r_{i,k_i}\)表示,進而就能將\(E(U_i)\)"拆分"為\(k_i\)份,且滿足:\(E(u_{i,j})_1...E(u_{i,j})_{k_i}=r_{i,1}.E(u_{i,j}).r_{i,2}...r_{i,k_i}=E(u_i,j)\)
最後將這個\(k_i\)個密文向量\(E(U_i)_1,...,E(U_i)_{k_i}\)傳送給k個雲伺服器(可以包括自己)。 -
把收到的所有密文向量對應的分量相乘得到新的密文向量\(E(U_i')\),併傳送給\(P_n\)
每個雲伺服器\(P_i\)將密文傳送後,也有可能收到其他雲伺服器發來的密文向量,\(P_i\)將收到的密文向量的每個相應分量分別相乘,構成新的密文向量\(E(U_i^*)=(E(u_{i,1}'),...,E(u_{i,m}^*))\),併傳送給leader雲伺服器\(P_n\),從而將傳送的密文和自身密文混淆。
(3)雲伺服器\(P_n\)計算: -
所有收到的密文向量對應的分量相乘,得到\(E(U')\)
由於每個伺服器都是半誠實的,不會加入額外的資訊,所以\(P_n\)構造的密文向量\(E(U')\)是所有參與者密文向量各個分量的乘積,即:
-
用自己的私鑰\(sk\)解密\(E(U')\)得到\(U'\)
- 根據\(U'\)中不為1的分量得到\((\sigma _1,...,\sigma _h)\)
- 公佈\((\sigma _1,...,\sigma _h)\)
舉例
現在要求四個雲伺服器中的祕密資料的並集,假設\(P_4\)為leader伺服器,\(k\)=3
(1)每臺伺服器\(P_i\)編碼各自的集合資料\(X_i\)為\(U_i\);然後再使用公鑰\(pk\)加密,即\(E(U_1),E(U_2),E(U_3),E(U_4)\);再將其拆分為\(k\)份,分別傳送給其他兩個伺服器(自己留一份)
(2)在傳送完後,\(P_i\)就有可能收到其他伺服器發來的密文向量,然後將每份的密文向量對應的元素相乘得到\(E(U_i')\),傳送給\(P_4\)
(3)\(P_4\)得到:
(4)\(P_4\)將\(E(U')\)解密,根據\(U'\)中不為1的元素得到並集\((\sigma _1 ,...,\sigma _h )\)
保密計算求集合並集優化方案
上面的方案計算複雜性和集合\(U\)中元素的個數\(m\)線性相關,若\(m\)較大,加密、解密的次數和通訊量將會較大,不便於計算。若想要\(m\)不太大,可以在上面的基礎上,利用哥德爾編碼將向量對應成一個自然數的方法設計了一種高效的編碼方法,使得協議的計算複雜性不再於集合的大小\(m\)相關,降低了計算複雜性。
基本思想
0-r編碼+哥德爾編碼
(1)總集合\(U=(u_1,...,u_m),(u_1<....<u_m)\)對應集合\(P=(p_1,...,p_m),(p_1,...,p_m)\)是不等的互素數
(2)對於集合\(X_i\in U\),將其按照0-r編碼方式編碼為向量\(U_i=(u_{i,1},...,u_{i,m})\),具體是,若\(u_j\in X_i\),則\(u_{i,j}=r_{i,j}\),其中\(r_{i,j}\in [1,m]\)是一個隨機數且\(r_{i,j}\neq 0\),否則\(u_{i,j}=0\),然後藉助集合\(P\)利用哥德爾編碼將\(U_i\)編碼為一個自然數\(x_i\),即:
假設有\(n\)個集合\(X_1,...,X_n \in U\),將每個集合\(X_i\)按照上面的編碼方式編碼為一個自然數\(x_i\),將這\(n\)個自然數相乘得到\(x\),即:
然後根據算數基本定理將\(x\)展開,得到集合\(U'={u_1',...,u_m'}\)。若\(u_j'=u_{1,j}+...+u_{n,j}\neq 0\),則說明\(n\)個集合中至少有一個集合中有\(u_j\)。所以就可以根據向量\(U'\)中不為0的分量,得到並集。
故計算並集的問題可以規約到計算\(x\)。
舉例
具體方案2
\(U\)集合是公開的,或者是\(P_n\)已知的;\(P_n\)作為leader。
輸入:\(P_1,...,P_n\)各自的祕密集合\(X_1,..,X_n \in U\)
輸出:交集\((\sigma _1,...,\sigma _h)\)
(1)雲伺服器\(P_n\)保留私鑰\(sk\),公佈公鑰\(pk\)和系統引數\(params\)
(2)每個雲伺服器\(P_i\)計算如下:
-
根據上面改造的編碼方法將自己的祕密集合\(X_i\)編碼為自然數\(x_i\)
-
用公鑰\(pk\)加密\(x_i\)為\(E(x_i)\)
直接傳送\(E(x_i)\)是不安全的,因為\(P_n\)可以直接解密,所以需要混淆密文與雲伺服器的對應關係! -
將\(E(x_i)\)隨機分為\(k_i\)份併傳送給\(k_i\)個伺服器
-
將收到的所有密文相乘得到新的密文\(E(x_i')\),併傳送給\(P_n\)
(3)雲伺服器\(P_n\)計算如下:
- 把所有收到的密文相乘,得到\(E(x)\)
- 用私鑰\(sk\)解密\(E(x)\)得到\(x\)
- 將\(x\)用算術基本定理展開得到向量\(U'\)
- 根據\(U'\)中不為0的分量得到集合\((\sigma _1,...,\sigma _h)\)
雲端計算下的改造方案
(1)使用者自己編碼,然後拆分混淆,發給伺服器
(2)伺服器計算(混淆後的明文),再加密,傳送給leader伺服器
(3)leader伺服器計算(密文),解密,得到並集,並分發
雲伺服器沒有任何一個雲使用者祕密向量的全部資訊,因此得到不到雲使用者的資訊
方案分析
安全性證明
保密計算求集合交集方案
上面介紹的是求集合的並集,現在求交集,變動不大!
協議
舉例
(1)集合\(U=(101,102,103,104,105,106,107,108,109,110)\)對應集合\(P=(2,3,5,7,11,13,17,19,23,31)\),假設要計算3個集合\(X_1=(101,105,107),X_2=(103,105,108),X_3=(105,106,109)\)的交集,根據0-r編碼將其編碼為向量\(U_1,U_2,U_3\),即:
(2)將向量\(U_1,U_2,U_3\)藉助集合\(P\)利用哥德爾編碼編碼為自然數\(x_1,x_2,x_3\),即:
(3)將這三個自然數相乘得到:
(4)即得到向量\(U'=(2,5,5,11,0,9,13,13,13,24)\),根據向量\(U'\)中為0的分量得到交集:
以上為了方便演示,省去了拆分的步驟。