作者 | 蘇冠通
出品 | 區塊鏈大本營、ARPA
安全多方計算已經被公認為區塊鏈發展中重要的密碼學技術和工具,其在交易或者合約隱私保護,錢包密鑰管理,跨鏈交易,區塊鏈擴容等問題中都發揮了獨有的作用。
然而由於其具體技術涉及諸多密碼學算法和數學背景知識,在相應領域學習和開發之初會茫然而沒有頭緒。
本文希望以有限的篇幅將安全多方計算的概念相互連接成系統,以便讀者快速學習和構建知識網絡。同時,對安全多方計算中運用最多的兩個分支:「基於混淆電路的安全多方計算」和「基於秘密分享的安全多方計算」進行介紹。
在安全多方計算(Secure Multi Party Computation)的第一篇文章中,我們已經描述了安全多方計算如何在數據價值和隱私保護的矛盾下提供一種解決方案,以及這個問題是如何被姚期智先生提出,並如何在實際生活中起到作用。
那麼在介紹安全多方計算的進一步應用,以及和區塊鏈之間如何巧妙結合之前,我們單開一個“進程”來深入到安全多方計算技術內部,將其實現技術給出一個簡單明瞭展示。
通過這些例子我們可以看到安全多方計算與明文計算之間的區別,這種密碼學方案如何實現了它聲稱的功能,不同實現方法之間的關係與區別,以及安全多計算與其他密碼學算法之間的關係。這篇文章會涉及到一定的密碼學基礎算法和數學內容,但這不會影響理解安全多方計算本身的思想。
安全多方計算的提出
在姚期智先生(Andrew C.Yao)於1982年發表的文章“安全計算協議”一文中,他提到“兩個百萬富翁希望知道誰更富有,然而,他們不希望獲得關於對方財富的額外信息。他們應當如何進行這次對話?”。
這個“百萬富翁難題”是安全多方計算的一個特例,一般化的安全多方計算是n個參與方之間的一個交互式協議,n方分別持有數據x1,x2,…xn,該協議希望在輸入之上計算函數y1,y2,…,yn=f(x1,x2,…xn),並使得第i方只能獲得yi而不能獲得其他信息。
這個定義看起來並不能帶來直觀的認知,我們不妨換一種思路來思考:在一個理想的世界(理想世界範式)中,存在一個完全中立,不和任何人合謀的可信第三方,所有人將數據交給他,之後他進行計算並將結果進行對應分配。這就完成了一次安全計算。
那麼在現實世界(現實世界範式)中,安全多方計算協議就是在不存在這個可信第三方的情況下,完成同樣的任務。這給人們更簡明扼要思考安全多方計算能力與缺陷的參考。
比如,它並不能保證輸入方提供了正確的輸入,它也不能一般化的隱藏函數f的信息(代碼混淆)。但另一方面,能否保證所有參與方都能同時拿到或者拿不到計算結果(公平性),能否保證參與方中有幾方合謀或者試圖刺探別人的輸入信息時,計算依然可以安全進行(魯棒性),這些問題則是密碼學家在構造不同安全多方計算協議時關心的重點。
現實中的協議並不只有一個,也不是完全相同的幾種,而是效率不同,安全模型不同,實現方式不同的一系列密碼學協議。這也是安全多方計算最複雜也最引人注目的地方,本文我們先介紹一下安全多方計算中運用最多的兩個分支——「基於混淆電路的安全多方計算」和「基於秘密分享的安全多方計算」。
基於混淆電路的安全多方計算
姚期智先生在提出問題的文章裡已經給出了這類問題的一個解法:混淆電路(Garbled Cirtuit)與不經意傳輸(Oblivious Transfer)相結合。
這種協議主要適用於兩方安全計算,現在有很多工作致力於將這種算法擴展到多方(n>2),然而我們將會看到它天然只適合兩方,但兩方運算已經可以幫我們解決很多具體問題了。
這種技術之所以被稱為“電路”,是其首先將需要計算的函數表示為布爾電路,就像現代集成電路中的邏輯一樣,其中的基本單元就是邏輯門,每個邏輯門規定為兩輸入一輸出但可以具有多扇出(輸出可作為下一級多個門的輸入)。
如果電路的拓撲關係確定,整體電路的計算可通過按輸入輸出連接順序執行來達成。那麼我們就將函數的安全多方計算實現具體為一個門的實現,也就是說我們在現實生活中構造了一個可以等效為理想世界的“安全門”,那麼我們可以一般化地來對整個電路進行改造。
姚期智先生提供的布爾電路混淆(Garbling)技術同時利用了不經意傳輸,不經意傳輸是一個可以獨立利用的密碼學工具,我們以2選1不經意傳輸(1-out-of-2 Oblivious Transfer)為例(如下圖所示),其核心目的是接收者(Bob)希望獲得發送者(Alice)2個信息(m1,m2)中指定的一個(比如mb),但卻無法獲得另一個的信息。另一方面,Alice無法獲知b的具體數值。
不經意傳輸
通過上圖,我們可以得到一個結論:任何一個有效的不經意傳輸協議都代表可以基於其構造一個安全兩方計算協議。
那麼我們可以觀察這一點如何達成。如果Alice是“電路製造方”,Bob是“電路計算方”,兩方想要共同計算f(x,y),其中x來自Alice,y來自Bob。那麼Alice負責提供電路生成,不失一般的,我們以一個邏輯與門為例,我們對其每一個線信號(Wire)選定一對密鑰
, 分別代表這個信號的0和1。之後,我們利用一個雙密鑰對稱加密函數來獲得表1,這個表格即稱為一個混淆門。
此時混淆電路完成了構造。
混淆與門示意
混淆與門對照表
Alice將混淆電路傳給Bob,以及x輸入對應的密鑰值,此時利用不經意傳輸,Bob可以獲得自己y輸入對應的密鑰值,那麼在經歷過解密嘗試後,Bob獲得了對應的結果,在使用滿足IND-CCA方案的加密算法時,Bob嘗試錯誤密文的解密時,解密算法會拒絕。
如第一部分所提到的,安全多方計算保證的是一方的輸入不會被另一方獲得,而不是輸入不能被從輸出中推斷出來。
安全兩方計算
這就是混淆電路的基本流程。但這種構造還非常初步和低效,在這篇文章發佈之後,許多改進慢慢被研究工作提出,從安全性,運行效率上都對這一分支的技術有了很大改進,使得實用化變得可行。
這其中比較重要的幾個技術包括Free-XOR,Half AND這類減小特殊邏輯門代價的思路,也有Point-and-permute, Row reduction這樣降低輪複雜度的算法。
應用上,第一個實現是於2004年發佈的Fairplay系統,而2009年Asiacrypt的一篇文章利用混淆電路實現了安全兩方計算版本的AES,這使得AES的私鑰在計算過程中可以無需恢復,這得益於AES中佔大多數的異或門可以利用Free XOR技術降低消耗。
基於秘密分享的安全多方計算
其餘的多方安全計算,與兩方安全計算不同,都是利用了秘密分享這一技術。這兩者之間一個主要區別是,秘密分享中所有參與方都是對等地位的,而混淆電路是區分製造方與計算方的。
此時,輸入不是比特值對應的密鑰值,函數也不是邏輯電路。輸入由參與方之間秘密分享,函數映射為有限域上的運算,這種運算具體化可以由加法和乘法表示,相對於邏輯電路,我們稱之為算術電路。
在繼續介紹這種方案之前,我們先簡單瞭解秘密分享。秘密分享是n個參與方將一個秘密s在參與方之間分配的一個密碼學工具,常用來保存諸如加密密鑰,導彈發射代碼等重要敏感信息。
協議主要有兩個函數構成:秘密分發函數(Distribution)與重建函數(Reconstruction)。
分發函數將秘密s拆分成秘密分享值[s]並分發給所有參與方,這一過程一般由s的原始持有方執行。重建函數則允許所有滿足重建條件的參與方集合恢復秘密。秘密分享方法於1979年由Shamir和Blakley分別獨立提出。我們常用的秘密分享方法之一就是Shamir秘密分享。
1989年,Brickell提出了一般化的秘密分享構造方案,這種構造方法稱為線性秘密分享方案(Linear Secret Sharing Scheme)。這個方案中用訪問結構(Access Structure)來約束哪些參與方聯合可以重建秘密。
利用一組數學語言來描述如何拆分秘密,如何分配秘密,並利用線性代數證明這種數學描述的安全性。這種線性秘密分享方案給我們的啟示是,對於n個參與方,我可以任意規定訪問權限(只要其滿足單調性,即一組參與方可以重建秘密,那麼再加一方依然可以重建秘密),這比Shamir秘密分享有更強的一般性。
基於這種一般化的秘密分享方案,Cramer等人在文章中證明了,我們可以構造安全多方計算。這種構造的關鍵之處是如何進行乘法計算,加法在線性分享上的實現是顯而易見的。這個過程引入了重組(Recombination)操作,如果我們對於任意的秘密x和y,能夠找到重組向量r=(r1,r2,…rn)使得
那麼就可以在這種秘密分享上構建乘法而不會洩露信息,*表示向量點乘。
文章中給出的一般性計算[x*y]的方法如下,每一方計算[x]i*[y]i=ci,之後該值被秘密分享到所有方,之後每一方計算
即可完成乘法。
然而這種方法只適用於安全模型較弱的情況,對於更強的安全假設,需要更復雜的方法來完成乘法。
總結
本文以最簡明的方式,將安全多方計算的兩個技術分支做了介紹,希望能提供一個模糊的知識框架。由於安全多方計算是一個極為複雜,包含了多種密碼學技術的系統,本文只能淺嘗輒止,但通過本文,我們希望將這些點串聯在一起以提供一份全景圖。
在實際應用中,安全多方計算不僅可以用於數據提供方之間的協同工作,也可以聯合SaaS系統,雲服務來提高企業、個人隱私數據的安全性,同時增加數據聯合分析的可能性,解決數據隱私和利用間的矛盾。比如ARPA安全多方計算平臺。
在今後的文章中,我們會陸續分享一些安全多方計算平臺如何打通數據流轉通道,使安全多方計算在密鑰管理,數據安全查詢,雲數據沙箱,聯合徵信和廣告投放等情景下得以應用的案例。
怎麼樣,看完這篇燒腦的文章,對你有幫助嗎?留言告訴營長吧!
*關於作者
蘇冠通,ARPA密碼算法工程師,清華大學密碼芯片博士,擁有七年密碼算法和芯片設計與研究經驗。對安全多方計算協議,雙線性對算法,格公鑰密碼算法有深入研究並在相關領域有多篇論文發表。
關於ARPA
ARPA是一家專注於安全加密計算和區塊鏈底層技術的研發的公司,其核心產品為基於安全多方計算的隱私計算平臺,並提供全套區塊鏈+安全計算解決方案。同時ARPA作為行業成員,參與起草了工信部中國信息通信研究院即將出臺的安全多方計算標準。
閱讀更多 ARPA官方 的文章