作者: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 帶到哪裏做出貢獻、分叉和建議。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。