安全多方計算新突破!阿里首次實現“公開可驗證” 的安全方案

阿里技術_發表於2019-03-12

640?wx_fmt=jpeg

阿里妹導讀:近日,阿里安全雙子座實驗室與馬里蘭大學等高校合作的論文《Covert  Security  with  Public  Verifiability:  Faster,  Leaner,  and  Simpler 》【1】被歐洲密碼年會(Eurocrypt)2019接收。這是國內公司在安全多方計算領域的第一篇頂會論文(Eurocrypt2018只有3篇大陸作者論文,難度可見一斑)。


今天,我們邀請阿里高階安全專家鴻程,深入解讀業界首個“公開可驗證(PVC)” 的安全兩方計算方案。


安全多方計算介紹


安全多方計算(  Secure  Multi-Party  Computation,MPC)於1986  年由姚期智院士提出【2】。安全多方計算協議允許多個資料所有者在互不信任的情況下進行協同計算,輸出計算結果,並保證任何一方均無法得到除應得的計算結果之外的其他任何資訊。換句話說,MPC技術可以獲取資料使用價值,卻不洩露原始資料內容。

640?wx_fmt=png


網際網路已經完成了從IT時代向DT時代的轉變,資料已經成為DT時代企業的核心競爭力。資料作為一種新能源,只有流動起來才能產生價值。不過,大多數企業考慮到資料安全和個人隱私等問題,對資料共享都非常謹慎。而MPC對打破資料孤島,實現資料的可控共享,具有重要的理論和現實意義。


MPC方案主要可分為基於混淆電路(Garbled  Circuit,GC)和基於祕密共享兩種。本文主要關注GC類方案。

不經意傳輸(Oblivious  Transfer)

我們首先介紹一種基礎的安全多方計算協議:不經意傳輸(Oblivious  Transfer,  OT)。    

來看一個例子:假設某旅行社擁有N個景點的旅遊資料,小淘想去其中的A景點遊玩,希望向旅行社購買相關資料做好出遊功課。但是小淘非常在意自己的隱私,不希望向旅行社洩露自己的目的地是哪裡。因此雙方希望這筆交易能夠滿足以下隱私條件:


1.  小淘不希望向旅行社洩露“我準備去A景點”這一資訊;
2.  旅行社只希望出售小淘出錢購買的那份資料,而不洩露小淘未購買的N-1份資料;

粗看起來這種隱私條件似乎是無法滿足的:旅行社只要把景點A的資料給到小淘,就必然瞭解了“小淘正在關注A景點”這一資訊;除非旅行社把所有N份資料都給出,但是這又違背了旅行社的利益;

但是神奇的OT可以讓交易在這種“不可能的條件”下達成。簡而言之,在OT協議中,旅行社把他擁有的N份資料使用某種雙方協商同意的加密演算法和引數進行加密,然後傳送給小淘;小淘可以從密文中解密出A的資料,而無法解密出其他N-1份資料。

以下以N=2為例,基於Diffie-Hellman金鑰交換協議,給出一種1  of  2  OT實現方法的非正式描述;其中S(Sender)=旅行社,R(Receiver)=小淘,S擁有兩份資料
640?wx_fmt=png,R希望取得其中的640?wx_fmt=png


1.  S祕密生成隨機數a;  R祕密生成隨機數b;
2.  S將
640?wx_fmt=png傳送給R;  R將640?wx_fmt=png傳送給S;

3.  S計算640?wx_fmt=png

4.  S以640?wx_fmt=png為金鑰加密640?wx_fmt=png,  以k1為金鑰加密640?wx_fmt=png,將640?wx_fmt=png640?wx_fmt=png傳送給R;

5.  由於640?wx_fmt=png,  因此R可以計算出640?wx_fmt=png,並解密出640?wx_fmt=png,但R無法計算640?wx_fmt=png,因此無法解密出640?wx_fmt=png


如果R希望取得640?wx_fmt=png,只需把第2步中的640?wx_fmt=png改為640?wx_fmt=png即可。


640?wx_fmt=png


OT除了可以直接用於構造MPC方案之外,也是GC等許多MPC方案的基石。

混淆電路

我們知道,任意函式最後在計算機語言內部都是由加法器、乘法器、移位器、選擇器等電路表示,而這些電路最後都可以僅由AND和XOR兩種邏輯閘組成。一個閘電路其實就是一個真值表,例如AND門的真值表就是:

640?wx_fmt=png


例如其中右下格表示兩根輸入線(wire)都取1時,輸出wire=1:即  1  AND  1  =  1。

假設我們把每個wire都使用不同的金鑰加密,把真值表變成這樣:

640?wx_fmt=png


例如其中右下格表示如果門的輸入是b和d,那麼輸出加密的f(金鑰是b和d)。這個門從控制流的角度來看還是一樣的,只不過輸入和輸出被加密了,且輸出必須使用對應的輸入才能解密,解密出的f又可以作為後續門的輸入。這種加密方式就稱為“混淆電路(Garbled  Circuit,GC)”。

將電路中所有的門都按順序進行這樣的加密,我們就得到了一個GC表示的函式。這個函式接收加密的輸入,輸出加密的結果。

假設有兩個參與方A和B各自提供資料a、b,希望安全的計算約定的函式F(a,b),那麼一種基於GC的安全兩方計算協議過程可以非正式的描述如下:

1.  A把F進行加密,得到GC表示的函式
640?wx_fmt=png;  (注意這裡A是電路的生成者,所以他了解每根wire的金鑰);

2.  A把自己的輸入a使用第1步中對應的wire金鑰加密,得到Encrypt(a);
3.  A將Encrypt(a)、
640?wx_fmt=png傳送給B;

4.  A將B的輸入b使用第1步中對應的wire金鑰加密,得到Encrypt(b),並將Encrypt(b)傳送給B;
5.  B擁有完整的GC和輸入,因此可以執行電路得到加密的輸出;
6.  A把輸出wire的金鑰發給B,B解密得到最終結果F(a,b);  
7.  如果A需要的話,B再把(a,b)發給A;

細心的同學一定會指出:第4步中A怎麼可以接觸B的輸入b呢?這不是違背了安全多方計算的假設嗎?這裡就需要使用OT,A扮演Sender,B扮演Receiver,讓B從A處得到Encrypt( b),卻不向A透露b的內容。如圖所示:

640?wx_fmt=png


需要注意的是,上述流程只是最原始的GC方法的不嚴謹描述,GC後續還有Point & Permute、Free XOR、Half Gates等多種細節優化,隨著最近幾年的研究進展,GC的效能已經差不多可以實用了。以求兩個百萬維向量的漢明距離(Hamming Distance)為例(應用場景是兩份資料求相似度,卻互相不洩露資料內容),這樣的安全兩方計算已經可以在1.5秒左右完成。

安全多方計算的安全模型

半誠實行為模型與惡意行為模型

更細心的同學還會進一步提出問題:“怎麼確保A給B的640?wx_fmt=png就是一個正確的GC呢?例如A和B商定要比a和b的大小,商定了F(a,b)=a>b?1:0,但是A可以製作一個別的函式的GC,例如F(a,b)=b的第1個位元,這樣顯然是會侵害B的隱私的,但是由於函式是以GC形式發給B的,B是沒有辦法發現這個問題?”


這確實是一個安全問題,事實上,GC還存在如selective failure等其他更多的安全問題。在介紹解決方案之前,我們需要先定義安全多方計算的安全模型。

安全多方計算的安全模型包含多個角度的內容,在上述上下文中,我們關注的是其中的“行為模型”,即參與方可能進行何種行為以獲取其他方的隱私。常見的行為模型包括“半誠實(Semi Honest)”和“惡意(Malicious)”兩種。前者假設所有參與方都是忠實的按照協議步驟進行執行,只是想通過協議內容推測其他方的隱私,而後者假設惡意參與方為了獲取其他方的隱私可以不遵循協議內容。

用撲克牌打個不嚴謹的比方,半誠實的牌友會試圖從自己的手牌和已經打出的牌來推測他人的手牌,但是還是遵循撲克牌規則的;而一個惡意的牌友則換牌、偷牌等手段無所不用。

可見,本節開始提出的問題屬於惡意行為的範疇,而原始的GC只能說在半誠實行為模型下是安全的,無法抵禦惡意行為攻擊。有許多對GC方案的改進方案可以達到惡意行為模型下的安全性,但是它們都需要付出很大的效能代價:仍然以求兩個百萬維向量的漢明距離為例,其中最快的方法也需要10秒+,比同等的半誠實方案慢7倍以上。事實上,經過我們的調研,若想真正的實現支援大規模資料的MPC產品,基本上只能考慮半誠實方案。這嚴重影響了安全多方計算的實用性。

公開可驗證(Public Verifiable Covert, PVC)行為模型


PVC是在半誠實、惡意之間的一種折中。其主要思想是:每個參與方的所有行為都自動帶有類似簽名的機制以供其他參與方存證。假設某個參與方實施惡意行為,那麼其他參與方可以有
640?wx_fmt=png的概率發現(640?wx_fmt=png稱為威懾因子,一般>=50%,不能100%發現,因為100%那就直接滿足惡意行為模型了)這一惡意行為,並將該行為及其簽名公開,令作惡者承受名譽損失。考慮到名譽對一個資料所有者的重要性(例如此後可能再也找不到合作),50%左右的威懾力已經足以讓理性者不考慮作惡。


PVC模型最開始是由學者在Asiacrypt2012【3】提出,Asiacrypt2015【4】上也有學者提出相關的改進方案,但是這些方案不僅效率較低,而且只有複雜的理論描述,實現可能性低。我們提出的新型PVC方案不僅協議簡潔,效能有大幅提升,而且首次進行了完整的程式碼實現。仍然以求兩個百萬維向量的漢明距離為例,使用我們威懾因子為50%的PVC方法大概只需要2.5秒。

以下仍假設有兩個參與方A和B各自提供資料a、b,希望安全的計算約定的函式F(a,b),以威懾因子
640?wx_fmt=png=50%為例,給出我們的PVC方案的非正式描述:


1. A選擇兩個隨機種子s1和s2, B和A執行OT隨機選擇其中一個(不妨設B獲取了s1);
2. A使用s1和s2分別生成GC1和GC2;
3. B和A執行OT獲取GC1中B輸入wire的加密值(我們後面可以看到GC1不會真正被使用,因此這裡可以不與b對應,比如是任意常數值的密文);
4. B和A執行OT獲取GC2中B輸入wire對應的b的加密值;
5. A對GC1進行Hash,並把Hash發給B;
6. A對GC2進行Hash,並把Hash發給B;
7. A對上述所有流程進行簽名,並把簽名傳送給B;
8. B由於有s1,因此可以自行生成GC1,可以自己模擬第3步和第5步;如果結果與A發的不一致,則公佈相關簽名作為A作惡證據。如果一致,就用GC2進行真實計算。

可見,A如果作惡,總有50%的概率被B抽查到(因為A不知道B到底掌握了哪個GC的隨機種子)。因此理性的A會選擇不作惡,忠實的執行安全多方計算協議。

需要再次強調的是,為便於理解,所有的協議都僅僅是非正式描述,有興趣進一步研究細節的同學歡迎參閱我們的論文【1】。

總結

我們與馬里蘭大學等高校合作,首次實現了一種“公開可驗證(PVC)” 的安全兩方計算方案,這種方案的效能接近半誠實方案,同時其PVC特效能夠對作弊行為形成威懾力,令其具有遠強於半誠實模型的安全性,具有很高的實用價值。


參考資料:

[1] https://eprint.iacr.org/2018/1108

[2] Yao.A.C. How to Generate and Exchange Secrets. FOCS 1986: 162-167

[3] Asharov G , Orlandi C . Calling Out Cheaters:Covert Security with Public Verifiability, Advances in Cryptology – ASIACRYPT 2012. Springer Berlin Heidelberg, 2012. 

[4] Kolesnikov V , Malozemoff A J . PublicVerifiability in the Covert Model (Almost) for Free, Advances in Cryptology – ASIACRYPT 2015. Springer Berlin Heidelberg, 2015.



640?wx_fmt=gif

你可能還喜歡

點選下方圖片即可閱讀


640?wx_fmt=jpeg

為拯救爸媽朋友圈,達摩院造了“謠言粉碎機”


640?wx_fmt=jpeg

阿里開源 iOS 協程開發框架 coobjc


640?wx_fmt=jpeg

這是工程師最長情的表白


640?wx_fmt=gif

相關文章