浙大暑期密碼學課程-筆記|兩方安全計算
摘要
多方安全計算(MPC)有着廣泛的應用,本次課程將由來自浙江大學的張秉晟老師帶來,主要講解兩方安全協議。
安全多方計算的定義千奇百怪,主要可分爲通俗定義,狹義定義和廣義定義:
- 狹義上來說安全多方計算使用混淆電路或祕密分享的方式來實現
- 廣義上來說可以使用全同態加密等手段來進行
安全多方計算可以分爲通用安全多方計算和專用安全多方計算:
- 通用安全多方計算一般是將計算任務轉換爲布爾電路或代數電路,使用交互式協議來完成運算
- 專用安全多方計算的效率更高,一般可以不依賴於電路的方式來解決,目前常用的協議主要有隱私求交集PSI協議
以下是衡量安全多方計算的三個維度,主要包括安全假設,安全保障和性能,其中安全假設一般注重同步網絡中的半誠實敵手,下圖介紹了三個維度中主要考量的要點。
- 敵手模型:隱匿作惡()
- 敵手門限大於1/2無意義!
- 設置假設:RO()、CRS()
兩方安全計算的設計策略
接下來我們以計算一個與門電路爲例子,引入兩方安全計算,下圖是本協議的示意圖,主要問題是如何來定義該框架的安全性。
- 問題:安全計算\(F(a,b)=ab\)
- 方法:將\(a\)編碼(加密)後執行計算,此處應利用「同態」
一般的設計思路可以分爲自頂向下和自底向上,如下圖所示,三個層次主要包括協議層,原語層和假設層。
- 協議是密碼學中最高層次的,如MPC協議,PSI協議等
- 原語是第二層次的,主要包括加密,數字簽名等算法
- 假設是最低層次的,任何的協議和原語的安全性都依賴於一些假設,比如求解離散對數問題是困難的,求解大整數分解問題是困難的
一般設計協議是自頂向下(框架-》細節),教學採用自底向上,教學採用該方法可以易於讓學生接受。
Elgamal加密
我們在上次課中提到了基於判定性DH的密鑰交換協議和一次一密,我們知道一次一密是目前最安全的加密方案,判定性DH假設在密碼學中廣泛使用,下面三張圖是前一次課程的概要。
- DH協議
- 一次一密:敵手無法在多項式時間內區分隨機值和密文
下圖是Elgamal加密的示意圖,Elgamal是一種公鑰加密方案,主要由初始化,密鑰生成,加密和解密四個算法構成。
- 下圖\(t\)應該爲\(r\)!
根據上次課程所講,我們需要確定一個算法在什麼假設下能夠達到什麼樣的安全性,那麼同理,我們需要考慮Elgamal在何種假設下可以達到什麼樣的安全性。
接下來下圖定義了公鑰加密中IND-CPA的安全性博弈定義。
Elgamal是IND-CPA安全的:
- 安全規約
Lifted Elgamal
在安全計算中,我們希望能夠在不知道私鑰的情況下,對密文進行運算,運算的結果解密後和明文的運算結果保持一致,我們記爲數據的延展性【同態?】。
同態加密解決了上述的問題,接下來我們簡要講解一下「Lifted Elgamal加密算法」。
Lifted Elgamal加密是滿足加法同態性,並且只要消息空間範圍不大,我們可以直接通過計算離散對數,得到最後的明文消息。
- 計算離散對數\(DLog\),一般通過查表獲得
- \(Dec(C_1*C_2)=Dec(g^{r_1+r_2},g^{m_1+m_2}.h^{r_1+r_2})=m_1+m_2\)
同態加密及在兩方安全計算的應用示例
假設下面是一個兩方計算模型,P1和P2分別輸入a和b,P1得到最後的結果\(f(a,b)\),如下圖所示。
我們可以採用單邊模擬(one-side simulation)的方式來證明該協議的安全性。
- P1的安全證明:假設敵手控制P2,P1的計算結果在敵手看來是隨機的,不可區分的
- P2的安全證明:假設敵手控制P1,P2的計算結果在敵手看來是隨機的,不可區分的
計算a AND b
我們仍然採用之前的例子來講解安全多方計算,即兩個參與方,分別計算a和b的乘積,即a AND b,具體如下圖所示。
下圖是本協議的交互方式,主要是基於Lift Elgamal進行構造。
本方案的正確性顯然能夠滿足,該方案的正確性主要基於Lift Elgamal的正確性,如下圖所示。
- \(d=c^b=Enc(a,r)^b\)
- \(M=Dec(d)=a+...+a=ab\)
下圖主要描述了P1的隱私,即P2只能看到隨機的密文,而得不到其他任何信息。
下圖描述了P2的隱私,當然P2可能有部分信息泄漏(中間信息),P1可以從P2交互的信息中得到額外隱私信息,所以我們需要對其進行修復。
- P1獲得的是\(c^b\),可能反推出\(b\)
下圖是修復後的協議,在該協議中,通過選取一個隨機值\(r'\),可以實現P2的隱私保護,即P1得不到P2的輸入相關信息。
- P1獲得的是\(c^b.Enc(0,r')\),這樣每次獲取的結果都是不一樣的,可抗重放攻擊,且根據「加法同態性」,解密後相當於(ab+0)
- 問題:加密時用的隨機數不同,是否可以進行同態計算?
- 答案:是
- 以ElGamal爲例:
- \(c1=Enc(m1,r1)=(g^{r1},m1.h^{r1}),c2=Enc(m2,r2)=(g^{r2},m2.h^{r2})\)
- \(c1.c2=(g^{r1+r2},m1.m2.h^{r1+r2}),Dec(c1.c2)=m1.m2\)
下圖所示是僅有兩條消息【逐比特發送】構成的兩方計算協議。
計算<a,b>
接下來的例子,將一個比特擴展到多個比特,實現了標量的乘法操作,如以下兩張圖所示。
- \(d=(\prod c_i^{b_i}.Enc(0,r')),Dec(d)=a_1.b_1+...+a_n.b_n=<a,b>\)
下圖是上述兩方計算協議中,P1和P2的隱私性解釋如下:
- P1只能看到最終輸出的隨機加密密文
- P2只能看到P1輸入的隨機加密密文
計算漢明重量
下面同時給出了第一個兩方協議的擴展和在漢明重量計算中的應用:
- 漢明重量:非零符號的個數
- 漢明距離:表示兩個(相同長度)字符串對應位置的不同字符的數量,我們以\(d(x,y)\)表示兩個字\(x,y\)之間的漢明距離,具體說,對兩個字符串進行異或(XOR)運算,並統計結果爲1的個數,那麼這個數就是漢明距離。
下圖是計算漢明重量的方法,協議和安全性,協議的安全性和之前所提的標量乘法的安全性相類似。
- 字符a和b的漢明重量:\(\delta(a,b)=\Sigma(b_{i}+(1-2b_{i})a_{i})=\Sigma(1-2b_{i})a_{i}+\Sigma b_{i}\)