Fiat-to-NFT底層技術:MPC多方計算協議詳解

什麼是MPC

MPC 全稱 Multi-Party Computation,即多方計算,是解決某些問題的協議(或者說方案)的總稱。這些問題通常涉及多個參與方(party,例如多家公司),每個參與方持有一定的隱私數據(例如公司的財產),希望不公開這些數據,但又可以利用這些數據計算某一函數(例如求最大值:哪個公司財產最多),每個參與方獲得相應的計算結果(可能相同,可能不同)。

我們經常聽到“安全多方計算”或者“多方安全計算”,就是要求一個 MPC 的協議是安全的,安全性的基本要求:一是隱私性,即不能洩露任何一方的隱私數據;二是正確性,即保證計算的結果是正確的。此外,還有其他要求例如公平性、輸入的獨立性、保證輸出送達等。通常我們提到 MPC 就是指安全 MPC,顯然一個不安全的協議不會受到青睞。

MPC 能幹什麼

MPC 具有廣泛的實際應用潛力,從安全的統計分析,到更特定的領域,例如,電子政務,金融監管,生物醫學計算,在保護數據安全的同時,實現聯合數據分析、數據安全查詢、數據可信交換等。

接下來,我們通過一個“比武招親”故事介紹一下 MPC 的幾個例子及相關概念(再次聲明不傳播任何價值觀念!)。故事是這樣的,地主家有個漂亮女兒,到了適婚年齡,地主想要找一良婿,便貼出了招親告示。

百萬富翁問題:MPC 的經典問題


告示一經張貼,便引來了很多男士。地主設置第一關:考察各位男士的收入情況。當然這些男士並不會樂意去公開自己的收入,怎麼辦?借助MPC整數比較協議。在不洩漏隱私的情況下可以比較收入的高低。

這一問題最早是由計算機科學家、圖靈獎獲得者姚期智教授通過百萬富翁問題提出的:兩個百萬富翁和想知道他們誰更富有,但他們都不想讓對方知道自己財富的任何信息。在雙方都不公開財富信息的情況下,如何比較兩個人的財富多少,並給出可信證明。姚教授通過混淆電路(garbling circle)給出了一種解決辦法,近年來也有一些基於同態加密的方案提出,有興趣的讀者可以查閱相關資料。

最初百萬富翁問題可以看作是兩方計算,當擴展到多個富翁,就是我們經常聽到的拍賣問題。多個參與方分別出價,出價最高(或最低)者即為拍賣的獲勝者。 MPC 可以很好的解決這一問題,計算出最高(低)值,但不洩露其他出價。

隱私集合求交(Private Set Intersection,PSI)


回到比武招親的故事,地主給女兒招親,當然要找一個興趣愛好與女兒相投的男士。例如:禮、樂、射、禦、書、數,等等。如何在不洩露彼此興趣愛好的情況下,找出二人的共同愛好?這一問題可以通過 PSI 來解決。

PSI 是 MPC 的一個分支。 PSI是指,參與雙方在不洩露任何額外信息的情況下,得到雙方持有的隱私數據的交集。在這裡,額外的信息指的是除了雙方的數據交集以外的任何信息。 PSI 在現實場景中非常有用,比如在縱向聯邦學習(機器學習)中做數據對齊,或是在社交軟件中,通過通訊錄做好友發現,計算廣告的實際效果等。目前已有一些解決方案,例如利用不經意偽隨機函數(Oblivious Pseudorandom Function),參與方利用自己的數據計算函數值,然後公開函數值進行比對即可。

不經意傳輸(Oblivious Transfer,OT):MPC的重要組件

通過前兩關,有一位候選人 Bob 挺到了最後,成為地主女婿的候選人。地主為 Bob 準備了兩份生辰八字,一份是地主自己的,一份是地主夫人的。地主只能給 Bob 看其中一份,但是 Bob 並不想洩露自己看了地主還是地主夫人的生辰八字

怎麼辦?可以藉助 OT 協議。 OT 可以保護 Bob 的隱私,Bob 選定其中一份查看,得不到關於另一份的任何信息,同時地主也不知道 Bob 到底看了哪一份。 OT 是很多 MPC 方案的重要組成部分,例如前文提到的混淆電路,不經意偽隨機函數。

我們給出一個解決辦法。 Bob 去郵局買兩個帶鎖的郵筒,這兩個郵筒除(鎖)鑰匙不同外,其他完全相同。請注意每個人都可以往郵筒裡放信件,但是只有擁有鑰匙的人才能開鎖打開郵筒取出並查看信件(類似於密碼裡的public key加密)。

Bob 將郵筒貼上標籤:一個貼“岳父”,一個貼“岳母”。如果 Bob 想要看岳父的生辰八字就把貼有岳父標籤的郵筒的鑰匙留下,把貼有岳母標籤的郵筒的鑰匙破壞扔掉。否則,如果想看岳母的生辰八字就只留下貼有岳母標籤的郵筒的鑰匙。然後將兩個郵筒交給地主。地主收到郵筒後將自己的生辰八字放入貼有岳父標籤的郵筒,將自己夫人的生辰八字放入貼有岳母標籤的郵筒,然後把郵筒還給 Bob。 Bob 找個沒人的小樹林,用自己留下的鑰匙打開相應的郵筒就可以得到自己想要看的生辰八字。因為 Bob 只有一把鑰匙,所以只能看到他想要看的生辰八字。對於地主來說,其不知道 Bob 留了哪一吧鑰匙,當然也就不知道 Bob 到底查看了誰的生辰八字。

聰明的你一定會問如果 Bob 作弊,把兩個鑰匙都留下怎麼辦,這將是另外一個問題,密碼學裡會有更強的工具要求 Bob 遵守規則,此處不再講述。

門限密碼學:MPC的重要分支,實現權力分割、去中心化的有效工具

故事結局很美好,地主納得良婿,Bob 抱得美人歸。

那麼小兩口的財產歸誰管呢?交給地主?交給地主女兒還是Bob自己管?如果一個人管,那麼 Ta 就成了財富聚集中心,就會成為壞人的靶點。如何去中心化,實現權力分割呢?可以採用門限密碼學。

門限密碼學也是 MPC 的一個重要分支。在門限密碼中,一項任務(如解密、簽名)的完成不能一個人說了算,而是一部分共同決定的,相當於委員會共同決議。參與決議這一部分成員可能是是全體成員,也可能只是其中一部分,這個界限被稱為門限(threshold),如果成員數量少於這個門限,則任務無法執行。門限密碼一個重要組件叫做秘密分享 secret sharing,顧名思義,把秘密分割成多個片段分別進行保管,每次需要門限個片段才能恢復出秘密。

回到我們的故事,Bob 可以把財產存入銀行卡,然後採用(2,2)的門限秘密分享,將銀行卡密碼進行分割成兩份,兩個人每人持有一份。每次花錢需要兩口子共同確認,一個人取不出錢。或者可以購買一個具有兩把鎖的保險櫃,每個人持有一把鑰匙,只有兩個人合作才能打開保險櫃。

考慮到實際應用,(2,2)秘密分享會存在一個問題,如果有一方忘記自己的密碼片段或者丟一把鑰匙怎麼辦,那豈不是銀行卡、保險櫃打不開了麼(當然可以去銀行找回)。考慮這種情況,Bob 可以採用(2,3)的秘密分享,將密碼分割成三份,兩口子每人一份,放在銀行一份。三份中有兩份存在且正確就可以恢復出原來的密碼。

我們考慮一般的(t,n)門限密碼:秘密被分割成 n 個片段,只有大於或者等於 t 個片段才能恢復出原始秘密,此處要求 t 不能大於 n。在門限加密方案中,用於解密的密鑰被分割成 n 個片段,每次解密時需要至少 t 個片段。在門限簽名中,用於簽名的密鑰被分割成 n 個片段,至少需要 t 個片段才能生成一個正確的簽名。這種門限方案提高了系統的安全性和可靠性。一個壞蛋要想破壞這個系統需要竊取 t 個片段。而且即使系統中有 t-1 個片段丟失也不會破壞整個系統的安全性。 (當然如果t大於n的一半,t-1 個片段丟失會導致系統無法正常輸出結果而停止運行,但是不會洩漏原始的秘密)。

隨著區塊鏈、數字貨幣的流行,MPC 也越來越受到開發者的青睞。在區塊鏈世界裡, private key (一長串無序數字,可視為一把私有的鑰匙)控制著一切。 private key 完全控制你的資產,例如,比特幣,NFT 等等,一旦丟失或者被盜,後果不堪設想,尤其是行業大佬(每年都會有由於 private key 丟失遺忘導致的比特幣丟失),當然對於窮鬼來說後果不太嚴重。區塊鏈不像中心化的可信銀行機構,密碼丟失可以掛失、凍結或找回。區塊鍊網絡裡沒有可以相信的(中心)節點,因此保護好 private key 是一件十分重要的事情。

為了解決密鑰管理的問題,區塊鏈 wallet 應運而生。最初的wallet為了幫助用戶恢復,備份 private key ,會在創建wallet時提供 12~24 個單詞作為助記詞,例如 apple、cat;助記詞沒有什麼特殊意義,只是幫助用戶記憶。它不像 private key 那樣是一串無規律的數字。利用助記詞可以導出用戶的所有 private key (一個用戶可以有不止一個 private key ,可以視為有多個賬號)。但是實際上,記住這些助記詞也不是一件容易的事情。六位數字的銀行卡密碼都記不住何況是十幾個單詞!

一個替代方法就是委託給第三方管理,例如交易平台。雖然區塊鏈幾乎不可能被破解,但是大量資金注入第三方會使其成為黑客攻擊的靶點。事實上中心化交易平台是脆弱的,很容易成為目標,請看以下案例:


2016 年 8 月 2 日,Bitfinex 交易平台損失了 7200 萬美元。
2018 年 1 月 26 日,日本最大的交易平台 Coincheck 損失了 5.32 億美元。
2018 年 6 月 30 日,韓國最大的交易平台 Bithumb 損失了 3100 萬美元。

MPC 技術可以一定程度上緩解密鑰管理的困難問題,同時保證較好的安全性。採用 MPC 特別是門限簽名技術,用戶 private key 以分佈式形式生成,全程不會出現完整的 private key ,從根本上降低了 private key 洩漏的風險。每個服務器只存儲 private key 的一個片段,避免某一個或某幾個服務器被攻擊而造成的損失,同時各個服務器可以定期更新存儲的片段,提高安全性。

越來越多的公司開始為用戶著想,基於 MPC 構建安全的數字wallet,既可以為用戶提供更加友好的體驗:用戶無需自己管理 private key ,無需助記詞,通過已有的社交軟件如微信、支付寶、郵箱等即可登錄,體驗區塊鏈的樂趣;又可以提供更強的安全性, private key 分片多地存儲,除用戶外任何人無法獲得完整的 private key (用戶可以提出申請,核驗身份後可以導出 private key )。

考慮這樣一個情況,採用(2,3)形式的秘密分享,將 3 個片段分別存儲在百度,阿里,騰訊三家的服務器上,任何兩家同時參與可以生成一個合理簽名。一個攻擊者需要同時破壞兩家的服務器才能竊取你的 private key ,這種概率還是比較低的。當然,這三家也不會為了你那幾百、幾千、甚至幾萬的資產,去合謀破壞你的 private key 。

此外,多重簽名也是與門限簽名很類似的一種 MPC 技術。不同於門限簽名只有一個 private key ,多重簽名有多個 private key ,每次簽名需要一定數量的(門限個) private key 分別簽署同一筆交易,驗證簽名需要逐一驗證每個簽名。可以這樣理解:(2,2)-門限簽名需要兩個領導合作才能得到一個正確簽名,(2,2)-多重簽名需要兩個領導分別簽名,擁有 2 個簽名才算有效。

類似地,還有僅採用秘密共享的方案。與門限簽名十分類似。利用秘密共享,將 private key 進行分割,然後分別存儲。簽名時先恢復出完整 private key ,利用 private key 進行簽名。而在門限簽名中, private key 是分佈式生成的,全程不可見,每個服務器存儲一個片段,簽名時每個服務器利用自己的片段進行簽名,最終得到一個正確簽名。門限簽名不會洩漏 private key ,而秘密共享需要每次恢復 private key ,會增大洩漏 private key 的風險。

以下,我們給出一個中心化 wallet 方案(依賴可信中心進行 private key 保管/委託)和基於上述三種技術(門限簽名,多重簽名,秘密共享)的 MPC 去中心化wallet方案的對比。

成本。相比於多重簽名,門限簽名成本較低。現有的鏈上多重簽名需要

  • 成本。相比於多重簽名,門限簽名成本較低。現有的鏈上多重簽名需要每個節點均支付gas費,才能將鏈下數據傳輸至鏈上(每個節點將外部數據上傳到區塊鏈都要支付一定的gas費用)。雖然能保障去中心化共識的安全性和可靠性,但成本高昂。如果有10個節點採集鏈下數據,就得支付10筆gas費;且不論在最終結算之前,gas費還有可能要多次調整。採用門限簽名,節點全部反饋數據在鏈下聚合成單一數據點,然後會有一個節點將數據發回至鏈上,全程僅收取一筆gas費,成本低。
  • 安全性。首先中心化的wallet相當於“把所有雞蛋都放到一個籃子裡”,例如中心化交易平台,其安全性較低,如前文所提,交易平台被攻擊的事件時有發生。採用MPC技術的去中心化方案安全性有所提高, private key 分割成片段,分別進行存儲,部分片段丟失不會洩露 private key 。特別是基於門限簽名的方案,在整個算法週期中從來未出現過完整 private key ,安全性很高。相對而言,由於基於秘密共享的方案需要恢復出完整 private key ,這增大了洩漏完整 private key 的風險。
  • 效率,尤其是驗簽效率。通過秘密共享、門限簽名所產生的簽名信息與一次單簽名(中心化簽名)無差異,這意味著驗簽過程與單簽名相同,不會產生額外的手續費。鏈上無需新的智能合約來提供額外的簽名算法支持。而多重簽名需要驗證每一個簽名,需要更多的計算,且需要智能合約支持以及因鏈而異的算法設計。
  • 匿名性,或稱為交易的不可連接性。在門限簽名方案中,參與簽名者的信息將不可見,因為對於鏈上節點,每次信息都是用同一個public key進行驗簽;但是多重簽名需要驗證多個public key,會導致交易之間可以相關聯(例如2個交易的簽名可能出現了同一個public key)。

當然,門限簽名也會有一些劣勢,例如鍊下計算簽名的效率並不是太高,需要的通信複雜度,交互複雜度都還很高。這使得門限簽名距離大規模應用還有一段距離,目前已有的基於(t,n)門限簽名的方案中,t和n都比較小。常見的有(2,2);(2,3);(3,5)等。

MPC 未來

MPC 在保護隱私、破除數據孤島方面將發揮重要作用,是實現“數據可用不可見”的強大工具。

目前,我們處在數據爆炸的時代,數據發揮著越來越重要的作用。英國期刊《經濟學人》(The Economist)發表封面文章稱數據已經取代“石油”成為當今世界最有價值的資源,將數據的重要性提到了無與倫比的高度。與此同時,數據隱私洩漏的事件層出不窮:
2013~2014 年,雅虎遭受黑客攻擊,導致至少 15 億用戶隱私信息洩露。
2013 年,斯諾登披露的棱鏡計劃,導致了當時美國、中國、歐盟和俄羅斯等政體間的政治危機。
2014 年 7 月,摩根大通(JPMorgan Chase)遭到黑客攻擊,造成 7600 萬賬戶信息洩露。
2018 年,劍橋分析公司涉嫌竊取 5000 萬 facebook 用戶的信息,操縱美國大選及英國脫歐公投。
2020 年,視頻軟件 zoom,已經連續發生 4 起與安全和隱私相關的數據洩露事件。

進一步地,”數據孤島”現象普遍存在。數據流動起來,才能產生巨量的價值。但由於以下種種原因,數據無法流動,導致數據孤島形成:

  • 個人數據和企業數據受限於法律法規要求,將不能直接用於明文交易;
  • 數據是企業的核心資產,不願意進行明文交易;
  • 跨企業間系統、身份等無法打通;
  • 明文數據在交易後,數據價值無法保全。

因此,如何在保證數據隱私安全的前提下,讓數據流動起來是難點之一。 MPC 會是解決這一難點的有力工具,我們相信,隨著研究的不斷深入,越來越多的 MPC 項目將會落地,並發揮越來越重要的作用。

近日,Conflux 研發團隊公開發布的針對使用法幣進行 NFT 交易的通用解決方案 Fiat-to-NFT 中,就採用了 MPC、門限簽名等密碼學技術,屏蔽了區塊鏈的技術細節,使簽名、授權、轉移等操作對應用層透明。

Fiat-to-NFT 方案中,Conflux 提供了可信的 MPC 聯盟,幫助用戶進行 private key 分片託管,只有通過驗證的用戶本人,可以實現 private key 和資產的提取,保證了用戶的資產安全性。

目前,“基礎服務層”相關的密碼學探索和攻關已經完成,接口服務已在開發中,不久的將來就會開放試運行。在服務開發的同時,有意向的社區應用已經開始接洽,即將有相關產品面世。

法幣交易 NFT 僅是支持的場景之一,Fiat-to-NFT 未來可以作為打通區塊鏈世界和現實世界的技術通道,讓傳統互聯網應用可以在區塊鏈上探索無限可能。

歡迎對 NFT 與 Fiat-to-NFT 方案感興趣的企業或項目團隊與我們聯繫,索要相關資料,共同合作,一起探索 NFT 未來世界。

本文不構成投資建議,虛擬貨幣波動大請謹慎小心

掌握虛擬貨幣、區塊鏈大小事

發表迴響