安全多方計算技術(MPC)簡介

買賣虛擬貨幣

技術的突破是推動區塊鏈行業前進的引擎,幣安中國區塊鏈研究院與鏈聞 ChainNews 同為密切關注區塊鏈與密碼學等領域技術發展前沿的組織,故而聯合推出「他山之石」專欄,向中文世界讀者介紹全球範圍最值得關注的區塊鏈技術進展,以及在金融等產業最新的應用分析與動態,以期為中國的區塊鏈行業「攻玉」提供借鑑和思考。 

*本文已取得作者授權鏈聞和幣安中國區塊鏈研究院翻譯轉載

在本文中,我們將簡要介紹一下多方計算和混淆電路的背景知識,解釋我們怎樣使用MPC(多方計算)技術來建立私人支付渠道,並討論我們怎樣選擇合適的軟體框架來實現我們的MPC協議。

概述

安全多方計算(MPC)技術能使彼此不信任的多方正確計算任何函式,同時還能保證各方輸入和輸出資訊的私密性。MPC可被視為一種提供可信任第三方的方式,即使實際上並不需要這一可信任方。理想情況下,可信任的第三方從各方處獲得秘密的輸入資訊,計算函式,然後將結果安全返回各方。而現實中,我們可以使用MPC來代替這一可信的第三方。

今天,MPC技術已廣泛用於解決許多方面的問題,例如網路廣告、私人聯絡資訊查詢(用於發資訊)、分散式金鑰管理等等。在設定中,我們計算的函式用於檢查鏈下狀態方面支付型代幣的正確性、計算比特幣交易中的ECDSA(橢圓曲線數字簽名演算法)簽名、釋出新支付型代幣等。一方的輸入資訊是該方私密的簽名金鑰,另一方提出比特幣交易,提供支付型代幣。

在開始探討細節前,我們先定義兩個對MPC下任何聯合計算都非常重要的高階屬性:私密性和正確性。在私密性方面,任何一方都只知道他們自己的輸出結果。而且所有各方從MPC獲得的輸出結果都可以保證是正確的。

在MPC協議中,通常會考慮兩個基本的對抗模型:半誠實模型和惡意模型。如果半誠實模型中的MPC協議是安全的,則只要各參與方遵守協議規範,即可保證私密性和正確性。另一方面,惡意安全模型可確保誠實方的安全(即使參與方中的某些子集試圖背離協議規範,以獲得更多資訊)。

為理解MPC,我們提供了一些關於建立區塊的背景知識:茫然傳輸(Oblivious Transfer)和姚期智的混淆電路(Garbled Circuits)協議。

01 茫然傳輸

透過茫然傳輸(OT)協議,傳送者Alice可傳送一個請求的資料項給接收者Bob,而Alice並不確切知道她傳送的是什麼資料項。在基本情況下,只有兩個可能的資料項,即X0和X1。Bob選擇一個位元a ∈ {0,1}。OT協議能確保傳送者不知道接收者的選擇了位元a,確保接收者只知道Xa。OT是一種互動協議,能確保輸出結果的正確性,還能保護髮送者和接收者的私密資訊。這是混淆電路協議中保證計算私密性的關鍵部分。

02 混淆電路

透過茫然傳輸(OT)協議,傳送者Alice可傳送一個混淆電路是MPC的一種實現方法。基本的雙方協議代表著理想的函式(作為一種布林電路),使混淆電路能進行大量的逐位運算(例如SHA256)來高效地計算函式。混淆電路有一個恆定的通訊迴圈數,這對於慢速網路很有用。

更確切地說,混淆電路協議在雙方間執行:一個混淆者和一個評估者,他們聯合評估基於他們各自私密輸入資訊的任意函式f。本文中我們將處理f為單一輸出函式時的特殊情況。使用“異或門”和“與門”將函式 f 編碼為一個布林電路。對於電路的每個輸入值i,生成器都將選擇一對隨機金鑰k0i和k1i(有時稱為線標籤),它們分別代表可能的輸入位元0和1。透過這些金鑰,混淆者可生成一個電路中所有門可能的輸出結果的加密表。如果有對應於實際輸入值的金鑰,則評估者可獲得正確的輸出結果。

雙方均知道此電路:Alice(作為混淆者)和Bob(作為評估者)。Alice有一個私密輸入值x,Bob有一個私密輸入值y。他們都想安全地計算f(x,y)。Alice給電路加密,傳送混淆電路f′給Bob,同時還有她加密過的輸入值(或稱混淆過的x′)。使用茫然傳輸協議,Bob(作為接收者)可與Alice(作為傳送者)互動,他知道自己的加密輸入值y′(或混淆後的y′),Alice不知道他的私密輸入值y。

Bob在收到加密的電路和加密的輸入值後,他將開始逐門地計算電路,得到輸出f(x,y)。混淆電路的結構能保證Bob僅知道f(x,y),即具體輸入值的函式f,別的什麼也不知道。對於更深度的混淆電路處理,我們推薦讀者閱讀Vitalik的初級讀本。

03 MPC在zkChannels中的應用

在Bolt Labs公司,我們正在開發一種能在顧客和商家之間保持私密性的支付渠道(見我們關於zkChannels協議的部落格文章)。這一渠道可使雙方鎖定款項由第三方託管,然後進行無限制的鏈下比特幣轉賬/支付。隨著每一次轉賬,雙方合作更新渠道的餘額,確保雙方都能在得知新餘額後關閉渠道,不會有丟失款項的風險。

我們使用MPC技術,以一種能保持私密性的方式實現了這一合作。即,每次支付都是匿名的:商家知道對方已經付款,但他們不知道具體由哪位顧客付的款。MPC為顧客計算兩個輸出結果:關於比特幣交易的ECDSA簽名,和支付型代幣。如果顧客已準備關閉渠道,他們可使用比特幣交易;否則他們可使用支付型代幣來用於未來的狀態更新(即另一種支付)。MPC的優點在於這兩個輸出結果均傳送給顧客,而商家無法獲得任何資訊能瞭解是哪位顧客參與了協議。

我們採用以下方法做到了這一點:顧客與商家透過指定他們的私密輸入值開始交易。顧客的私密輸入值包括關於渠道的資訊,其中有目前的狀態和下一個狀態。商家的私密輸入值由一個ECDSA簽名金鑰和一個HMAC(雜湊運算訊息認證碼)金鑰組成。

根據MPC,它們構成一個格式正確的比特幣交易摘要(反映出支付額),然後進行雜湊運算,使用商家的ECDSA簽名金鑰給摘要簽名。它們還計算基於更新狀態的HMAC,以便形成新的支付型代幣。此支付型代幣能使顧客根據MPC證明他們在過去曾與商家有過互動,在渠道中有足夠的餘額。

總之,MPC的執行能保證各方都完全不知道其它方的私密輸入值:商家不知道顧客的身份或渠道餘額資訊,顧客也不知道商家的私有金鑰。在上述例子中,我們說明了MPC功能的幾個高階方面;在不久後的學術文章,我們將公佈技術詳情。

04 軟體框架選擇和效能權衡

為執行MPC協議,我們使用了一種現有的軟體框架來將MPC用於一個任意函式。我們選擇Efficient Multi-Party(EMP)計算工具包。此框架有幾個優點,使之很適合我們使用:其中特別是它支援半誠實模型和惡意安全模型中的多種協議,以及混淆電路模型中的所有協議。

在我們的例項中,商家扮演混淆者一角,顧客則扮演評估者一角。這是一個自然的選擇,因為無疑只有顧客將收到計算結果。此外,混淆方有稍高一些的資源要求,因為混淆電路需要大量的加密操作,以便建立所有(邏輯)門的真值表。在EMP工具包中,這算不上是大開銷,商家可自定義他們的硬體設定來應對這一負荷。

EMP工具包執行一個C語言庫,該庫用於描述安全功能。該庫或者執行半誠實協議,或者將函式彙編成一個布林電路。此電路可被傳遞給幾個其它MPC協議中的一個,用於實現協議(包括幾個能安全應對惡意攻擊者的協議)。

我們的應用程式可分為幾個主要的函式,包括大量的SHA256雜湊運算、大量的輸入驗證,以及ECDSA簽名。除簽名外,所有這些函式基本上都是布林運算:位移位、相等性檢查和異或門掩膜運算。

EMP工具包將資料表示為加密(混淆)位元,將函式表示為布林電路。MPC文獻中的其它常見模型將資料表示為有限域內的秘密共享,將功能表示為算術運算電路。這些協議在基於位的運算中效率不高,而基於位的運算佔我們應用程式的大部分。

部分現代框架[2]允許將布林電路和算術運算電路混合起來一起計算,以便基於兩種單獨方法的優點來進行最佳化。在未來,我們將研究這些框架,以便最佳化我們應用程式中的ECDSA簽名。如果需要更進一步瞭解其它MPC軟體框架,可參閱Hastings等人更為全面的評估方法[1]。

*在此我們要特別感謝Colleen Swanson和Marcella Hastings,感謝他們的校對工作,以及他們關於本文的寶貴反饋。

參考文獻

1. SoK:“多用途安全多方計算框架”:Marcella Hastings等人。
2. EzPC:簡易的安全多方計算技術

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;