詳解最小化反共謀基礎設施MACI:鏈上治理中的抗勾結框架

2021-11-13 15:11:21

關於這篇文章的背景,請參考《二次方投票和二次方資助》。在這篇文章發布後的一個月,BSC基金會在DoraHacks开發者平臺HackerLink上運行了BSC生態第一輪二次方資助‌,並在其後的15天中收到了全球超過60個开發者團隊提交的項目。

在《二次方投票和二次方資助》中,我介紹了Vitalik的博客《Quadratic Payments》所提到的三個問題:身份僞造攻擊(Identity Bribery)、勾結(Collusion)、理性忽視問題(Rational Ignorance)。這三個問題其實不限於二次方投票,而是鏈上治理機制所遇到的通用問題。因此,這些問題的解決方案不僅可以使得二次方投票更規模化和更安全,還可以惠及更多鏈上治理的機制。

這篇文章的目標是為設計一種“非合作二次方投票”,或“抗勾結二次方投票”的機制做准備。在這種場景下,投票者無法相互之間合作,因此就沒有了勾結的可能性。這種機制一個基礎框架是,Vitalik Buterin在Ethresear上發表的文章《Minimal anti-collusion infrastructure》[1] (MACI)。因此,我們先解釋MACI的機制,從而為進一步探討如何使用MACI改進二次方投票,消除勾結(Collusion)的可能性。

MACI: Minimal Anti-Collusion Infrastructure

MACI是“最小化抗勾結框架”。背景材料參考Vitalik Buterin 的博客https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413 ,以及《On Collusion》 https://vitalik.ca/general/2019/04/03/collusion.html

很多的鏈上治理應用需要“抗勾結”這個特性,但同時又需要區塊鏈對交易執行以及抗審查、保護隱私的保證。投票是有這種需求的一個重要場景,因為很明顯在投票中,抗勾結是必須的,同時對執行結果的正確性的要求是很高的,需要保護計票過程,最後,還需要防止對投票者的審查。

設置

假設有一個智能合約\(R\),包含一個公鑰的列表 \(K_1 ... K_n\), 以及一些必要的函數,可以把這些公鑰注冊到智能合約中。另外,只有符合以下兩個條件驗證身份的參與者的公鑰可以進入到R中:

账戶屬於一個“合法”的參與者(一個獨立的人,某個社區的成員,比如擁有某個國家的國籍、在一個論壇上有足夠高的聲譽、持有不少於某個數量的Token…)

账戶持有人個人控制密鑰(例如,如果需要的話,可以打印出來以證明)

每一個用戶需要stake一筆錢: 如果任何人泄漏了自己的私鑰,那么得到私鑰的人可以直接取走這筆錢,從而這個账戶就會從列表中被移除。這個機制抑制了任何人把私鑰交給別人。

另外,假設有一個操作員(\(operator\)),他有一個私鑰\(k_\omega\), 和一個對應的公鑰\(K_\omega\).

最後,假設有一個機制 \(M\), 它是一個函數 \(action^n \rightarrow Outputs\), 其中,函數的輸入是\(n\)個參與者的行為,輸出是這個函數定義的某種輸出結果。例如,一個簡單的投票機制是一個函數,根據輸入的值,輸出出現次數最多的那個值。

執行

在起始時間\(T_{start}\),\(operator\)开始一個其實狀態\(S_{start} = {i: (key=K_i, action = \phi)}, i \in 1...n\).

在起始時間\(T_{start}\)和結束時間\(T_{end}\)之間,任何注冊的參與者可以向R發送消息,消息用參與者自己的私鑰\(k\)加密。有兩種消息:

約定行為: 例如投票。參與者需要發送加密過的消息 \(enc(msg = (i, sign(msg = action, key = k_i)), pubkey = K_\omega)\), 其中\(k_i\)是這個參與者當前的私鑰,\(i\)是參與者在\(R\)中的id

更新密鑰: 參與者需要發送加密過的消息\(enc(msg = (i, sign(msg = NewK_i, key = k_i)), pubkey = K_\omega)\), 其中\(NewK_i\)是參與者要變更的公鑰, \(k_i\)是這個參與者當前的私鑰

這時,操作員的工作是按照消息上鏈的先後順序處理每一個消息。具體的處理過程:

使用操作員私鑰解密消息。如果解密失敗,或者解密對應的信息無法解碼成為以上的兩類信息,則直接跳過這條信息

使用\(state[i].key\)驗證消息的籤名

如果解碼後的消息是約定的行為(\(action\)),那么設置\(state[i] = action\), 如果解碼後的消息是一個新的公鑰,那么設置\(state[i].key = NewK_i\)

在\(T_{end}\)之後,操作員必須公布輸出狀態 \(M(state[1].action, ... , state[n].action)\), 同時給出一個ZK-SNARK,證明這個輸出是正確的結果。

為什么這個機制是抗勾結的

假設一個參與者想要證明他做過什么,例如做過\(action\) \(A\),他可以引用一個鏈上的交易\(enc(msg = (i, sign(msg = A, key = k_i)), pubkey = K_\omega)\),並且提供一個零知識證明,驗證這筆交易的確是包含\(A\)的加密信息。但是,他無法證明他沒有發出別的交易,例如他可能發出過一筆更早的交易,把公鑰換成了一個新的\(NewK_i\),因此前面的證明也就變得沒有意義了,因為如果他更換過密鑰的話,他可能已經做了別的動作。

參與者還可能把私鑰給其他人,但是這樣做的話那個人拿到私鑰後就可以立即試圖修改密鑰。這樣的話 1) 有50%的成功率,2) 會導致拿到密鑰的人直接拿走之前stake的存款。

MACI未解決的問題

接收方在可信硬件環境中,或者接收方在可信多籤的情況下,賣出私鑰

原有的私鑰在一個可信的硬件環境中的攻擊,這個環境可以防止私鑰變更為任何攻擊者們不事先知道的私鑰

第一種情況,可以通過特別設計的復雜籤名機制,而這種設計對可信硬件和多籤不友好。不過這種設計需要確保驗證函數對ZKP友好。

第二種情況可以通過“面對面零知識證明”解決,例如,參與者可以把私鑰拆解為\(x + y = k_i\),公布\(X = x*G\) 和 \(Y = y*G\), 並且給驗證者展示兩個信封,分別包含\(x\)和\(y\); 驗證者打开一個,檢查公布的\(Y\)是正確的,然後檢查\(X + Y = K_i\)。

非合作二次方投票

這種機制可以用來改進包括投票在內的多種鏈上治理機制。在二次方資助中,當資金池規模非常大的時候,或者當二次方資助被用於更大的場景時(例如大選、國會審批預算等場景),勾結就會成為一個必須被解決的問題。因此,設計一個抗勾結二次方投票(Anti-collusion quadratic funding)機制,可以規模化二次方資助。

[1]Vitalik Buterin, Minimal anti-collusion infrastructure,

https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

解析五大交易所上幣:什么賽道最受歡迎?上幣效應究竟多強?

@OdailyChina @Assassin_Malvo Nerio(小寫)自上线幣安以來,已斬獲...

星球日報
4 9小時前

Arthur Hayes Token2049演講全文:市場在降息後可能崩盤,但以太坊表現可能會不錯

整理:Weilin,PANews “It’s fucking fed day”, 9 月 18 日...

星球日報
4 9小時前

深度解析Multi-Agent:Web3與AI終將相互成就?

如果說 AIGC 开啓了內容生成的智能時代,那么 AI Agent 則有機會把 AIGC 的能力真...

星球日報
4 9小時前

EIGEN解鎖在即?淺析EigenLayer當下估值和獲利預期

原創 | Odaily星球日報( @OdailyChina ) 作者|Azuma( @azuma_...

星球日報
4 9小時前

死而復生的“Neiro”,把幣安和何一都拉下水

在一周前,陀螺財經曾撰寫過《 交易所站隊“NEIRO”?MEME內战進行時 》,提到關於交易所站隊...

陀螺財經
4 9小時前

應對美聯儲降息:市場波動中的期權交易策略

本周市場顯示出看漲樂觀情緒,主要是由於加密貨幣交易者關注的積極因素——利率下調和流動性,將由美聯儲...

星球日報
4 9小時前