安全多方計算:在不可信環(huán)境中創(chuàng)建信任
安全的多方計算有助于確保加密貨幣交易安全,此外,它還有其他新興用例。
什么是安全多方計算?
術(shù)語“安全多方計算”(Secure Muti-party Computation,簡稱MPC,亦可簡稱SMC或SMPC)是指一組算法,這些算法允許人們通過網(wǎng)絡(luò)協(xié)同工作,并安全地獲取結(jié)果或計算值,且確保這一數(shù)值的正確性。
數(shù)學描述為:有n個參與者P1,P2,…Pn,要以一種安全的方式共同計算一個函數(shù),這里的安全是指輸出結(jié)果的正確性和輸入信息、輸出信息的保密性。
安全多方計算問題首先由華裔計算機科學家、圖領(lǐng)獎獲得者姚期智教授于1982年提出,也就是為人熟知的百萬富翁問題:兩個爭強好勝的富翁Alice和Bob在街頭相遇,如何在不暴露各自財富的前提下比較出誰更富有?
簡單來說,安全多方計算協(xié)議作為密碼學的一個子領(lǐng)域,其允許多個數(shù)據(jù)所有者在互不信任的情況下進行協(xié)同計算,輸出計算結(jié)果,并保證任何一方均無法得到除應(yīng)得的計算結(jié)果之外的其他任何信息。換句話說,SMPC技術(shù)可以獲取數(shù)據(jù)使用價值,卻不泄露原始數(shù)據(jù)內(nèi)容。
數(shù)十年來,理論數(shù)學家一直在研究多方計算?,F(xiàn)在,研究人員研發(fā)出了這種算法,并在更復雜的開發(fā)中的Web應(yīng)用程序、API和服務(wù)中發(fā)揮作用。如今,在不信任環(huán)境中也出現(xiàn)了這種算法的使用。
大多數(shù)企業(yè)堆棧或多或少地都有運行這種算法,員工協(xié)同工作并朝著同一個方向努力。一個Web服務(wù)查詢可以數(shù)據(jù)組合完成回答,通過將存儲在一臺設(shè)備上的數(shù)據(jù)與存儲在由模板控制的第三臺設(shè)備格式化的另一臺設(shè)備上的數(shù)據(jù)組合,所有這些都由在負載均衡器后面運行的Kubernetes集群管理器進行編排。即使相互連接的臺式機也可以利用CPU芯片與顯卡和網(wǎng)卡的強大功能協(xié)同工作,為同一用戶提供服務(wù)。
所有這些案例都是在可信環(huán)境中運作的。如果軟件堆棧的不同設(shè)備和彼此不信任的人員運行又當如何?SMPC算法使員工即使在彼此不信任的情況下也能協(xié)同工作。最基本的審計和加密功能的緊密結(jié)合,即使戴著偽裝面具的攻擊者試圖竊取數(shù)據(jù)或者企業(yè)出現(xiàn)內(nèi)鬼,最后輸出的數(shù)據(jù)也將是正確的和安全的。
安全多方計算的工作原理
大多數(shù)加密算法由一名人員操作運行,所有數(shù)學計算由該人或在該組織的可信環(huán)境中完成。文件可能會在受密碼保護的個人設(shè)備上進行安全加密,然后再通過電子郵件發(fā)送或存儲在公開的互聯(lián)網(wǎng)上。數(shù)字簽名是由私人設(shè)備使用防止泄露的密鑰創(chuàng)建的,因此其他人會相信只有密鑰的所有者才能創(chuàng)建簽名。
SMPC可以利用這些基本算法來找到政治上更復雜問題的解決方案。雖然他們經(jīng)常使用相同的標準加密或數(shù)字簽名,但他們在可信環(huán)境中協(xié)調(diào)應(yīng)用它們。
加密貨幣使用的區(qū)塊鏈是一個很好的案例,以協(xié)調(diào)的方式應(yīng)用基本數(shù)字簽名,以在互不相識的人之間建立更強的信任關(guān)系。在這些算法中,特定加密貨幣的所有權(quán)與密鑰所有者有關(guān),通過添加數(shù)字簽名將所有權(quán)轉(zhuǎn)移到其他人的密鑰。通常,這些交易會通過其他人的數(shù)字簽名與大區(qū)塊中的其他交易進行認證。綜上所述,這個數(shù)字簽名網(wǎng)絡(luò)可跟蹤貨幣的所有權(quán),并且有朝一日可能成為穩(wěn)定經(jīng)濟的基礎(chǔ)。
安全多方計算在理論計算機科學領(lǐng)域也有更精確的定義。一些最早的算法證明,可以將任意計算拆分并獲取安全可信的答案。最早的證據(jù)表明它可以用于任何表示為布爾門序列的任意計算。多年來,數(shù)學家開發(fā)了更復雜、更專注的算法來解決問題。
安全多方計算的類型
在SMPC保護傘下考慮了許多不同的算法組合。最早的算法是在1970年代首次發(fā)布的,當時數(shù)學家們正在尋找一種方法來進行遠距離玩游戲,比如撲克之類的,且要保證在發(fā)牌過程中雙方都無法作弊。此后,這類游戲逐漸演變出解決任意布爾函數(shù)的優(yōu)質(zhì)算法。
以下常見算法可以單獨用于解決較小的問題,也可以結(jié)合使用以解決更復雜的挑戰(zhàn)。
(1) 秘密共享
一個秘密值被分成N個部分,這樣K的任何子集都足以重建秘密。最簡單的示例,在一行的Y軸截距中對秘密進行編碼。線上的N個點是隨機選擇的。任何兩個都足以重建軸并恢復Y軸截距,在本例中K=2。更復雜的數(shù)學可以使用更大的K值。隱藏的秘密通常是更大文件的私鑰。一旦數(shù)據(jù)泄露,原始密鑰被破壞,就必須有K人共同努力才能將其解鎖。
(2) 剪切和選擇
這個基本步驟是許多算法的基礎(chǔ),因為它允許一方在不泄露秘密信息的情況下審計另一方。一方以某種方式給他們的幾個數(shù)據(jù)包加擾值。當這些出現(xiàn)時,另一方將通過詢問解密這些數(shù)據(jù)包的密鑰來隨機選擇一些數(shù)據(jù)包進行審計。如果雙方一致且數(shù)據(jù)正確,則無需審計這些未加擾值的數(shù)據(jù)包,且可以假定未經(jīng)審核的數(shù)據(jù)包是正確的。雙方可以承諾共享信息,同時保護這些未經(jīng)審計的數(shù)據(jù)。
(3) 零知識證明
存在一些更復雜的數(shù)字簽名版本,此類證明的創(chuàng)建者可以在不透露數(shù)值本身的情況下展示內(nèi)容信息。這些在更復雜的算法中通常很有用,因為一方可以在不透露的情況下做出秘密選擇。
一個簡單的版本通常被稱為“比特承諾”,它是許多游戲中的協(xié)議。雙方可以通過隨機選擇正面或反面硬幣,從而越過“不安全的線”。每一方都使用一種單向函數(shù),如安全哈希算法 (SHA),以額外的隨機性來擾亂他們的選擇以確保保密。
首先,兩者彼此共享已添加噪音數(shù)據(jù)版本。雙方都知道兩個加擾值后,可揭示他們的正面或反面的原始隨機值。如果它們匹配,則一方獲勝,如果值不匹配,則另一方獲勝。雙方可以通過重新計算單向函數(shù)來相互審計。
(4) 非交互式零知識證明
最早的零知識證明需要兩方進行交互,因為一方會向另一方證明某些陳述。后來,出現(xiàn)了非交互式版本,并被命名為SNARKs或ZK-SNARKS。目標是生成一小部分包含證明的所有信息的位。任何人都可以事后檢查捆綁包,執(zhí)行類似的計算,并得出相同的結(jié)論。
通過證明復雜的事實,同時還保持一些信息的私密性,這些捆綁包通常充當更強大的數(shù)字簽名。一個簡單的例子可能是駕照證明一個人年滿21歲并且有資格購買酒類,但是無需透露其實際年齡或生日。
安全的多方計算用例
這些算法在許多商業(yè)交易中都很有用,因為它們允許人們相互信任,正如Ronald Reagan的座右銘,“彼此信任且可以驗證他們所做的一切”。用例包括:
(1) 加密貨幣
雖然社會是否應(yīng)該將經(jīng)濟信任于數(shù)字貨幣的爭論仍然存在,但毫無疑問,市值證明了SMPC的潛力。絕大多數(shù)交易如雙方預期的那樣繼續(xù)順利進行。許多顯著問題不是由算法失敗引起的,而是由計算機系統(tǒng)的泄漏引起的。
(2) 游戲玩法
隨著人們逐漸轉(zhuǎn)向網(wǎng)絡(luò)娛樂場所,作弊變得更加容易。本地硬件的控制方讓作弊者闖入游戲軟件尋找隱藏的數(shù)據(jù),比如地圖。有些人甚至可能會擺弄數(shù)據(jù)結(jié)構(gòu)以增加額外收入。SMPC算法可以幫助防止這種作弊,而無需特殊的可信硬件。
(3) 合同談判
許多企業(yè)經(jīng)常與一些重要的合作伙伴密切合作,但不能完全信任對方。例如,汽車經(jīng)銷商與銀行合作貸款,保險公司為資產(chǎn)提供擔保。傳統(tǒng)上,購買需要大量文書工作,因為每一方都試圖保護自己。SMPC可減少繁瑣的文書工作且可完成交易。
(4) 數(shù)據(jù)收集
人們往往不愿參與研究,因為他們不想透露私人信息。許多市場依賴于有關(guān)需求和供應(yīng)的準確匯總數(shù)據(jù)。然而,收集這些信息可能很棘手,因為參與者不想分享他們的個人原始數(shù)字。安全算法可以幫助以保護隱私的方式收集這些信息。
(5) 自動化市場
傳統(tǒng)市場通常依賴于充當仲裁者的中立角色。比特幣區(qū)塊鏈只是算法如何取代交易中間人的一個例子。