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

本文將從技術角度講解什麼是安全多方計算,在 zkChannels 的應用以及如何在軟件工程上實現它。

原文標題:《【他山之石】安全多方計算技術(MPC)簡介
撰文:J. Ayo Akinyele,Bolt Labs 首席執行官、約翰霍普金斯大學計算機科學博士
本文已取得作者授權鏈聞和幣安中國區塊鏈研究院翻譯轉載

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

概述

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

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

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

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

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

他山之石丨技術解讀安全多方計算 MPC 支付應用與軟件框架

茫然傳輸協議基礎知識

茫然傳輸

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

混淆電路

混淆電路是 MPC 的一種實現方法。基本的雙方協議代表着理想的函數(作爲一種布爾電路),使混淆電路能進行大量的逐位運算(例如 SHA256)來高效地計算函數。混淆電路有一個恆定的通信循環數,這對於慢速網絡很有用。

他山之石丨技術解讀安全多方計算 MPC 支付應用與軟件框架

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

他山之石丨技術解讀安全多方計算 MPC 支付應用與軟件框架

雙方均知道此電路: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 的初級讀本。

MPC 在 zkChannels 中的應用

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

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

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

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

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

軟件框架選擇和效能權衡

爲執行 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:簡易的安全多方計算技術

來源鏈接:www.binance.cn