a16z:Cicada如何利用時間鎖謎題和ZK證明實現鏈上投票

作者:Michael Zhu 編譯:Lynn,MarsBit

所有無論以何種有意義的方式運作的投票系統都依賴於完整性和透明度。從表面上看,這使得區塊鏈成為構建這些系統的理想平台——事實上,許多去中心化的組織已經接受了無許可投票來表達集體意圖,通常是在揮舞大量財富或調整關鍵協議參數的情況下。但是鏈上投票也有缺點,隱私仍未被探索和開發,對Web3 投票系統不利——在目前使用的大多數鏈上投票協議中,選票和投票結果是完全公開的。如果沒有隱私,投票結果很容易被操縱和選民激勵錯位,可能會導致不民主的結果。

這就是為什麼我們要發布Cicada:一個新的、開源的Solidity 庫,利用時間鎖謎題和零知識證明來實現私人鏈上投票。與現有的系統相比,Cicada 具有新穎的隱私屬性,最大限度地減少了信任假設,並且足夠高效,可以在以太坊主網上使用。

在這篇文章中,我們調查了投票隱私的情況,並提供了關於Cicada 如何工作的高層次描述(正式的證明即將到來)。我們還鼓勵開發者查看GitHub 倉庫——Cicada 可以通過許多方式進行調整和擴展,以支持不同的投票方案和功能,我們希望與社區合作,探索這些可能性。

私人投票的簡要調查

在任何投票系統(鏈上或其他)中,有許多不同層次的隱私需要考慮。個別選票的披露、運行中的計票和選民身份都會以不同方式影響選民的積極性。哪些隱私屬性是必要的,取決於投票的背景。在密碼學和社會科學文獻中經常出現的幾個:

  • 選票隱私:秘密選票,也被稱為「澳大利亞選票」,是為現實世界的投票系統開發的,作為保持個人選民的偏好的一種方式,並減輕賄賂和脅迫(在鏈上設置,我們可能需要一個比選票隱私更強大的屬性——見下文的「無收據性」)。選票隱私還可以減輕社會期望偏差——某人基於他人對其選擇的看法而投票的壓力較小。

  • 正在進行中計票的隱私:許多投票系統在選民仍在投票時隱藏正在進行中的計票,或每個選項已經投了多少票,以避免影響投票率和選民激勵。我們已經在現實世界中看到了這種情況;例如,較晚投票的美國參議員比較早投票的參議員更有可能與他們的政黨保持一致。而在鏈上:在代幣加權投票中,鯨魚可以通過讓對手保持領先來哄騙他們的虛假安全感(有些人可能懶得投票,假設他們無論如何都會贏),然後在最後一刻投出自己的選票來左右結果。

  • 選民的匿名性:在許多現實世界的投票系統中,你的投票是不公開的,但你投了票的事實往往是公開的。這對於防止選民欺詐很重要,因為公佈投票者的記錄可以讓人們檢查是否有其他人以他們的名義投票。然而,在鏈上,我們可以防止選民欺詐,同時使用加密基元保留匿名性——例如,通過Semaphore,你可以在零知識中證明你是一個還沒有投過票的合格的選民。

  • 無收據性:個人選民提供其選票的「收據」,以證明他們是如何向第三方投票的,否則可能導致賣票。一個密切相關但更強大的屬性是抗脅迫,它可以防止有人脅迫選民以某種方式投票。這些屬性在去中心化的環境中特別有吸引力,因為投票權可以通過智能合約市場實現流動性。不幸的是,它們也很難實現——事實上,Juels 等人指出,在沒有可信硬件的情況下,這在無許可的環境下是不可能的。

Cicada 專注於正在進行中計票隱私,但(正如我們在後面討論的)它可以與零知識組成員證明聯合,以達成選民的匿名性和選票隱私。

介紹Cicada: 來自同態時間鎖難題的計票隱私

為了實現正在進行中計票的隱私,Cicada 利用了(據我們所知)以前從未在鏈上使用過的密碼學基元。

首先,時間鎖謎題(Rivest, Shamir, Wagner, 1996 )是一個加密謎題,它封裝了一個秘密,只有在一些預定的時間過後才能被揭示——更具體地說,這個謎題可以通過重複進行一些非平行計算來解密。時間鎖定謎題在投票的背景下對於實現運行統計的隱私很有用: 用戶可以將他們的選票作為時間鎖謎題提交,這樣他們在投票過程中是保密的,但在投票後可以被揭露。與其他大多數私人投票結構不同的是,這使得運行統計隱私不需要依賴統計機構(如選舉工作人員計算紙質或數字選票)、閾值加密(幾個受信任方必須合作解密一個消息)或任何其他受信任方:任何人都可以解決一個時間鎖謎題,以確保投票後結果被揭示。

其次,一個同構的時間鎖謎題(Malavolta Thyagarajan, 2019 )具有額外的屬性,即在知道秘密密鑰、解密謎題或使用後門的情況下,對加密值的一些計算是可能的。特別是,一個線性同態的時間鎖謎題允許我們將謎題組合在一起,產生一個新的謎題,封裝了原始謎題的秘密值的總和。

正如論文作者所指出的,線性同態的時間鎖謎題是一種特別適合於私人投票的基元: 選票可以被編碼為謎題,並且它們可以被同態地組合起來,以獲得一個編碼最終計票的謎題。這意味著只需要一次計算就可以揭示出最終結果,而不是為每張選票解決一個獨特的謎題。

一個新的結構:效率和權衡

要使投票方案在鏈上實用,還需要考慮幾個問題。首先,攻擊者可能會試圖通過投一個不正確的編碼的選票來操縱投票。例如,我們可能希望每張選票的時間鎖謎題都編碼為一個布爾值:「 1 」表示支持被投票的提案,「 0 」表示反對。一個熱心的提案支持者可能會試圖編碼,例如「 100 」來擴大他們的有效投票權。

我們可以通過讓選民在提交選票本身的同時提交一份關於選票有效性的零知識證明來防止這種攻擊。不過零知識證明的計算成本很高——為了盡可能降低選民參與的成本,證明應該是(1 )可有效計算的客戶端和(2 )可有效驗證的鏈上證明。

為了使證明盡可能高效,我們使用了定制的sigma 協議——為特定代數關係設計的零知識證明,而不是通用的證明系統。這使得證明者的時間非常快:用Python 生成一個選票有效性證明,在一台現成的筆記本電腦上需要14 ms.

雖然該sigma 協議的驗證器在概念上很簡單,但它需要相當一部分大的模冪。 Malavolta 和Thyagarajan 的線性同態方案使用Paillier 加密,因此這些求冪將對某些RSA 模N 以N^ 2 為模執行。對於合理大小的N,在大多數EVM 鏈上,取冪非常昂貴(數百萬gas)。為了降低成本,Cicada 使用指數ElGamal——指數ElGamal 仍然提供加性同態,但在更小的模數上工作(N 而不是N^ 2 ) 。

使用ElGamal 的一個缺點是解密計數的最後一步需要暴力破解離散日誌(請注意,這是在鏈下完成並在鏈上有效驗證)。因此,它僅適用於預期的最終票數相當小的情況(例如小於2 ^ 32 ,或大約430 萬票)。在最初的基於Paillier 的方案中,無論其大小如何,計數都可以被有效地解密。

選擇RSA 模數N 也涉及權衡。我們的實現使用1024 位模數來提高gas 效率。雖然這遠高於有史以來公開分解的最大RSA 模數(829 位),但低於通常推薦的大小為2048 位,用於RSA 加密或簽名。但是,我們的應用程序不需要長期安全性:一旦選舉結束,如果將來考慮N 就沒有風險。假定計票和選票在時間鎖定期滿後公開,因此使用相對較小的模數是合理的。 (如果分解算法改進,這也可以在未來輕鬆更新。)

匿名和選民資格

如上所述,Cicada 提供了運行計票隱私——時間鎖定謎題屬性在投票期間保持計票的私密性。然而,每個單獨的選票也是一個時間鎖難題,在相同的公共參數下加密。這意味著就像可以解密計數(通過執行必要的計算)一樣,每張選票也可以。換句話說,Cicada 僅在投票期間保證選票隱私——如果好奇的觀察者希望解密特定選民的選票,他們可以這樣做。解密任何個人選票與解密最終計票一樣昂貴,因此天真地需要O(n) 的工作來完全解密有n 名選民的選票。但是所有這些選票都可以並行解密(假設有足夠多的機器),花費的掛鐘時間與解密最終計票所需的時間相同。

對於某些選票,這可能是不可取的。雖然我們對臨時運行計票隱私感到滿意,但我們可能希望無限期投票隱私。為實現這一點,我們可以將Cicada 與匿名選民資格協議結合起來,通過零知識組成員身份證明進行實例化。這樣,即使選票被解密,它所揭示的只是某人以這種方式投票——我們已經從計票中知道了這一點。

在我們的存儲庫中,我們包含一個使用Semaphore 進行選民匿名的示例合約。但是請注意,Cicada 合約本身沒有對如何確定或執行選民資格做出任何假設。特別是,您可以將Semaphore 替換為例如Semacaulk 或ZK 狀態證明(如此處和此處所建議的)。

統計當局

我們在設計Cicada 時的首要任務之一是避免需要統計機構:許多私人投票結構需要一個半信任的統計機構(或授權委員會,通過安全的多方計算進行協調)接收和匯總選票。在區塊鏈環境中,這意味著這些方案不能僅由智能合約執行,需要一些人為乾預和信任。

在大多數結構中,計票當局在完整性方面不受信任(他們無法操縱選票計數),但在活性方面值得信任——如果他們離線,則無法計算最終結果,從而無限期地拖延投票結果。在某些結構中,他們也被信任維護隱私——也就是說,他們了解每個人如何投票,但預計會在不透露此信息的情況下公佈投票結果。

儘管在許多現實世界的場景中,統計當局是一個合理(且必要)的假設,但它們在區塊鏈環境中並不理想,我們的目標是最大限度地減少信任並確保審查阻力。

Cicada 探索了鏈上投票隱私領域的眾多方向之一,並補充了其他團隊正在進行的大部分研究。如上所述,Cicada 與信號量、ZK 存儲證明和限速無效器等匿名組成員技術密切相關。 Cicada 還可以集成Nouns Vortex 團隊提出的optimistic 證明檢查器,以減輕選民的gas 負擔。

還有機會調整Cicada 以支持不同的投票方案(例如代幣加權投票、二次投票)——更複雜的方案對於以太坊主網來說可能計算成本太高,但它們在L2 上可能是實用的。考慮到這一點,我們歡迎您就下一步將Cicada 帶到哪裡做出貢獻、分叉和建議。

Total
0
Shares
Related Posts