Vitalik Buterin 澄清區塊鏈投票的兩個誤解:它為何被低估了?

維塔利克·布特林
2021-05-27 13:32:36
收藏
儘管使用區塊鏈進行投票的嘗試存在問題,但正確的解決方案不是放棄區塊鏈,而是與其他加密技術結合起來。

本文來自鏈聞,原文標題:《Vitalik:為何需要區塊鏈投票?》,作者:Vitalik Buterin,以太坊聯合創始人,編譯:南風,來源:Unitimes。

投票是一個非常需要過程完整性的過程。投票的結果必須是正確的,而且必須有一個透明的過程來保證這一點,這樣每個人都可以相信這個結果是正確的。不應該存在成功地干涉任何人的投票意願或阻止他們的選票被統計的可能性。

區塊鏈是一種為過程完整性提供保證的技術。如果某個過程運行在區塊鏈上,則能保證該過程會根據一些預先商定的代碼運行,並提供正確的輸出。沒有人可以阻止其執行,沒有人可以篡改這一執行,也沒有人可以審查和阻止任何用戶的輸入被處理。

所以乍一看,區塊鏈似乎恰好提供了投票所需要的東西。我不是唯一有這種想法的人;大量主要的潛在用戶對此感興趣。但事實證明,有些人對此有非常不同的意見….

Vitalik Buterin 澄清區塊鏈投票的兩個誤解:它為何被低估了?

儘管投票的需求和區塊鏈提供的技術好處似乎完美匹配,但我們經常看到反對兩者結合的嚇人文章。而且不僅僅是一篇文章:《科學美國人》(Scientific American,科普類雜誌) 上刊登了一篇反對區塊鏈投票的文章 [1];CNet 網站也發布了一篇這樣的文章 [2];還有 ArsTechnica 網站也發布了一篇文章 [3]。而且不只是科技記者:Bruce Schneier (知名計算機安全專家) 也反對區塊鏈投票 [4];麻省理工學院的研究人員寫了一整篇論文 [5],認為這是個馊主意。那么到底發生了什麼?

概述

區塊鏈投票協議的批評者通常會提出兩個關鍵的批評

  1. 區塊鏈不是用來進行選舉的軟件工具。區塊鏈提供的信任屬性與投票需要的屬性並不匹配,具有不同信息流和信任屬性的其他類型的軟件工具反而會更有用。
  2. 通常不能信任軟件來進行選舉,不管它是什麼軟件。軟件和硬件的 bugs 未被檢測到的風險太高,無論平台是如何組織的。

本文將依次討論這兩種觀點 (用「駁斥」這個詞太過強烈,但我絕對不同意這兩種觀點)。首先,我將討論使用區塊鏈進行投票的現有嘗試的安全問題,以及正確的解決方案不是放棄區塊鏈,而是將其與其他加密技術結合起來。其次,我將闡述軟件 (和硬件) 是否可信的問題。我的答案是:計算機安全實際上正在變得更好,我們可以努力繼續這一趨勢。

從長遠來看,永遠堅持紙質方式 (來進行投票)將成為我們改善投票的巨大障礙。每 N 年進行一次投票是一種有著 250 年歷史的民主形式,如果投票能夠更方便、更簡單,我們就能擁有更好的民主,這樣我們就可以更經常地投票

毫無疑問,本文是基於良好的區塊鏈可擴展性技術 (比如分片)可用為前提。當然,如果區塊鏈無法擴展,這些都不可能發生。但到目前為止,這項技術的發展非常迅速,沒有理由認為它不會發生。

糟糕的區塊鏈投票協議

區塊鏈投票協議總是在被攻擊。兩年前,區塊鏈投票技術公司 Voatz 風靡一時,很多人對此非常興奮。但去年,麻省理工學院的一些研究人員在他們的平台上發現了一系列關鍵的安全漏洞 [6]。與此同時,在莫斯科,一個即將用於選舉的區塊鏈投票系統被黑客攻擊 [7],幸運的是,攻擊發生在選舉開始的一个月前。

這些黑客攻擊相當嚴重。以下是分析 Voatz 的研究人員成功發現的攻擊能力表格:

Vitalik Buterin 澄清區塊鏈投票的兩個誤解:它為何被低估了?

這本身並不是反對使用區塊鏈投票的理由。但區塊鏈投票軟件應該設計得更謹慎,並隨著時間的推移逐步擴大規模

隱私保護 \& 抗脅迫

但即使是技術上沒有被攻破的區塊鏈投票協議通常也很糟糕。為了理解其中的原因,我們需要更深入地研究區塊鏈提供什麼特定的安全屬性,以及投票需要什麼特定的安全屬性-- 當我們深入研究時,我們將看到二者存在一個不匹配之處。

區塊鏈提供了兩個關鍵屬性正確執行 (correct execution) 和抗審查(censorship resistance)。正確執行只是意味著區塊鏈接受用戶的輸入 (「交易」),根據一些預定義的規則正確地處理它們,並返回正確的輸出 (或以正確的方式調整區塊鏈的「狀態」);抗審查也很容易理解:任何想要發送交易並願意支付足夠高的費用的用戶,都可以發送交易,並期待交易很快被打包到鏈上。

這兩個屬性對於投票非常重要:你希望的投票結果肯定是把每個候選人的得票數加起來,選出得票最多的候選人的結果,且你肯定希望任何有資格投票的人都能參與投票,即使一些有權勢的人試圖阻止他們。但投票還需要一些區塊鏈不提供的關鍵屬性

*隱私保護**:你不應該知道某些特定的人給哪個候選人投了票,甚至不知道他們是否投了票;

*抗脅迫**:你不應該能夠向別人證明你是如何投的票,即使你想這麼做。

上述第一項要求 (即隱私) 的必要性是顯而易見的:你希望人們根據他們的個人感受來投票,而無需考慮他們周圍的人、他們的雇主、警察或街上隨機出現的暴徒對他們的投票選擇的感受。

第二項要求 (即抗脅迫 ) 需要用於防止出現「兜售選票」(vote selling) 的問題:如果你能證明你是如何投票的 (即證明你把票投給了誰),那麼兜售你的選票就變得非常容易。選票的可證明性也會使脅迫形式變得可能,即脅迫者要求看到 (被脅迫者,也即投票人) 把票投給了某個候選人的某種證明。大多數人,即使是那些知道第一項要求的人,也不會考慮第二項要求。但第二項要求也是必要的,在技術上提供這項要求很重要。毋庸置疑,你在外面看到的一般「區塊鏈投票系統」甚至不會嘗試提供第二項屬性,而且通常無法提供第一項屬性

不使用區塊鏈的安全電子投票

加密方式來安全執行的社交機制概念並不是區塊鏈極客們發明的,實際上早在我們之前就存在了。在區塊鏈領域之外,致力於研究安全電子投票問題的密碼學家已經有 20 年的傳統,好消息是已經有了解決方案。Juels,Catalano 和 Jakobsson 在 2002 年發表的題為《抗脅迫的電子選舉》(Coercion-Resistant Electronic Elections[8]) 的論文在過去 20 年裡被很多文獻引用:

Vitalik Buterin 澄清區塊鏈投票的兩個誤解:它為何被低估了?

從那以來,這個概念經歷了多次迭代;Civitas[9] 是一個突出的例子,儘管還有許多其他的例子。這些協議都使用一套類似的核心技術:有一組經商定的「監票人」(talliers,或稱計票人),以及一個信任假設,即大多數監票人都是誠實的。每個監票人擁有一個私鑰的「一部分」,對應的公鑰被公布。投票人通過使用監票人的公鑰來對投票進行加密,並將經加密的投票公布,監票人使用一個安全多方計算 (MPC) 協議 [10] 來對選票進行解密和驗證,並計算票數。票數計算是「在 MPC 內部」完成的:監票人從頭至尾都不會知道他們的私鑰,且在計算最終結果時,不會知道任何關於個人投票的信息,除了可以從最終結果本身看出什麼信息來之外。

對投票進行加密提供了隱私,且可以添加一些額外的基礎設施 (比如混合網絡) 使隱私性更強。與此同時,為了提供抗脅迫,可以使用以下兩種技術中的一種:

第一種選擇是在註冊階段 (監票人在此階段獲悉每個註冊投票人的公鑰),投票人會生成或者接收到一個密鑰。對應的公鑰在監票人之間共享,且監票人的 MPC 只有在某個投票被密鑰簽名的情況下才會計算該投票。投票人無法向第三方證明自己的密鑰是什麼,因此如果他們被賄賂或者脅迫,他們可以簡單地出示一個錯誤的密鑰並使用錯誤的密鑰來簽名投票。或者,投票人可以發送消息來更改他們的密匙,投票人無法向第三方證明他們沒有發出這樣的信息,因此投票結果還是這樣。

第二種選擇是這樣一種技術,即投票人可以進行多次投票,後一次投票可以推翻前一次投票。如果某個投票人被賄賂或者脅迫,他可以先按照行賄者 / 脅迫者的要求給某個候選人投票,但之後可以發送另一次投票來推翻前一次投票。

Vitalik Buterin 澄清區塊鏈投票的兩個誤解:它為何被低估了?賦予投票人能夠通過之後的投票來推翻之前的投票,這是上圖這個 2015 年協議的抗脅迫機制的關鍵

現在,我們來看看所有這些協議中一個重要的細微差別。它們都依賴於一個外部原語來完成它們的安全性保證電子布告欄 (bulletin board,上圖中的「BB」)。布告欄是一個任何投票人都可以發送信息的地方,並保證:(1) 任何人都可以閱讀布告欄,(2) 任何人都可以向被接受的布告欄發送信息。你能找到的大多數抗脅迫的投票文件都會隨意提到布告欄的存在,但是很少有論文討論這個布告欄實際上可以如何被實現。在本文中,你可以看到我的意圖:實現布告欄的最安全方式是使用某條現有的區塊鏈!

使用區塊鏈的安全電子投票

當然,在區塊鏈之前,已經有很多人試圖製作一個電子布告欄。這篇 2008 年的論文 [12] 就是這樣的嘗試,它的信任模型是一個標準的要求,即「n 個伺服器中必須要有 k 個是誠實的」(常見的是 k = n/2)。比如,這篇 2021 年的文獻綜述 [13] 涵蓋了一些區塊鏈之前的布告欄實現嘗試,也探索區塊鏈在其中的使用,而這些區塊鏈之前的解決方案同樣依賴於 k-of-n 信任模型。

區塊鏈也是 k-of-n 信任模型,它要求至少有一半的礦工或 PoS 驗證者遵循協議,如果這一假設失敗,通常會導致「51% 攻擊」。那麼,為什麼區塊鏈要比一個特殊用途的電子布告欄更好呢? 答案是:建立一個真正可信的 k-of-n 系統是困難的,區塊鏈是唯一一個已經大規模解決了這個問題的系統。假設某個政府宣布它正在建立一個投票系統,並提供 15 個當地組織和大學的名單,這些組織和大學將運行一個特殊用途的布告欄。作為一個外部觀察者,你怎麼知道政府從 1000 個組織中選擇了這 15 個組織不是基於其想要與某個情報機構勾結的意願?

另一方面,公鏈擁有任何人都可以參與的無需許可的經濟共識機制 (PoW 或者 PoS),以及現有的由區塊瀏覽器、交易所和其他監視節點組成的多樣化且高度激勵的基礎設施,以不斷實時驗證沒有什麼不好的事情發生

這些更複雜的投票系統不只是使用區塊鏈它們還依靠諸如零知識證明之類的密碼學來保證正確性,並依靠多方計算來保證抗脅迫。因此,它們避免了那些更為「天真」的投票系統的弱點,即只是「把選票直接投給區塊鏈」而忽略由此產生的隱私保護和抗脅迫問題。但區塊鏈布告欄仍然是整個設計的安全模型的關鍵部分:如果委員會被攻破了,但區塊鏈沒有被攻破,抗脅迫的特性就會消失,儘管圍繞投票過程的所有其他保證仍然存在。

MACI:以太坊上的抗脅迫區塊鏈投票

以太坊生態系統目前正在試驗一種名為 MACI 的系統 [14],該系統結合了區塊鏈、ZK-SNARKs 和一個確保抗脅迫性的中央參與者 (但除了保證抗脅迫特性之外,沒有能力破壞任何特性)。MACI 在技術上不是很困難。用戶可以通過以下方式參與:使用自己的私鑰簽名消息,然後通過中央伺服器發布的公鑰來對該簽名消息進行加密,並將經加密的簽名消息發布到區塊鏈。伺服器從區塊鏈下載這些消息,對其進行解密和處理,並輸出一個結果和一個 ZK-SNARK 證明,以確保正確地進行了計算。

Vitalik Buterin 澄清區塊鏈投票的兩個誤解:它為何被低估了?

用戶無法證明他們是如何參與其中的,因為他們能夠發送一個「更改密鑰」的信息來欺騙任何試圖審計他們的人:他們可以先發送一條更改密鑰的消息,將他們的密鑰從 A 更改為 B,然後發送一條用 A 簽名的「假消息」。伺服器會拒絕這條假消息,但其他人沒有任何方法知道這條更改密鑰的消息被發送了。對伺服器上有一個信任需求,儘管只是為了實現隱私保護和抗脅迫;伺服器不能通過不正確的計算方式或通過審查消息來發布錯誤的結果,從長遠來看,多方計算可以用於在某種程度上實現該伺服器的去中心化,進而加強隱私保護和抗脅迫的保證。

這個方案在 clr.fund[15] 有一個演示,該方案被用於進行二次方融資 (quadratic funding)。通過使用以太坊區塊鏈來保證投票的抗審查,確保了比依賴一個委員會提供了高得多的抗審查程度。

小結

  • 投票過程有四個重要的安全要求必須滿足:正確性抗審查隱私保護抗脅迫

  • 區塊鏈擅長前兩項,不擅長後兩項。

  • 把投票加密放到區塊鏈上可以增加隱私。零知識證明可以帶來正確性,而外部觀察者無法直接合計選票,因為它們是加密的。

  • 多方計算解密和檢查投票可以提供抗脅迫特性,條件是與用戶可以多次與系統交互的機制相結合:要麼前一次投票使後一次投票無效,要麼反過來。

  • 使用區塊鏈確保你有非常高的安全抗審查性,並且即使委員會串通起來打破了抗脅迫性,你依然將保持這種抗審查性。引入區塊鏈可以顯著提高系統的安全性

但我們可以信任技術嗎?

但現在我們回到第二個對任何類型的電子投票 (不管是否使用區塊鏈) 的更深層次的批評:技術本身太不安全,不應該被信任。

麻省理工學院 (MIT) 最近的一篇論文 [16] 批評了區塊鏈投票,其中包括下方這個表格,描述了任何形式的無紙化投票從根本上來說都太難保證安全:

Vitalik Buterin 澄清區塊鏈投票的兩個誤解:它為何被低估了?

這篇論文的作者們關注的關鍵屬性是軟件獨立性 (software-independence),他們將其定義為「一種屬性,即系統軟件中未檢測到的變化或錯誤不能對選舉結果造成不可察覺的變化」。基本上就是說,代碼中的一個 bug 不應該意外地讓 Prezzy McPresidentface 成為某個國家的新總統 (或者更現實地說,某個蓄意被嵌入的 bug 不應該能夠將某個候選人的票數份額從 42% 增加到 52%)。

但是還有其他的方法來處理 bug。例如,任何使用可公開驗證的零知識證明的基於區塊鏈的投票系統都可以被獨立驗證。某個人可以自己編寫證明驗證器的實現,並自己驗證 ZK-SNARK。他甚至可以編寫自己的投票軟件。當然,實際做到這一點的技術複雜性超過了 99.99% 的任何實際投票人基數,但如果成千上萬的獨立專家有能力做到這一點,並驗證該軟件能夠起作用,這在實踐中簡直不要太好了。

然而,對於 MIT 的作者們來說,這還不夠:

因此,任何只使用電子的系統,即使是端到端可驗證的系統,似乎都不適用於可預見的將來的政治選舉。美國投票基金會已經注意到 E2E-V 方法改善網上投票安全性的承諾,但已經發布了一份詳細的報告,建議避免將其用於網上投票,除非和直到該技術更加成熟,並在投票中得到充分測試。

其他人對這些想法提出了延伸。例如,Juels 等人的提議強調使用密碼學來提供多種形式的「抗脅迫」。Clarkson 等人的 Civitas 提案實現了抗脅迫的額外機制,Iovino 等人進一步將其納入並細化到他們的 Selene 系統中。從我們的角度來看,這些提議是創新但不現實的:它們相當複雜,最嚴重的是,它們的安全性依賴於投票人的設備沒有被破壞並按預期運行,這是一個不現實的假設。

這些 MIT 作者們關注的問題不是投票系統的硬件安全;這方面的風險實際上可以在使用零知識證明的情況下減輕。相反,他們關注的是一個不同的安全問題:即使在原則上,用戶的設備是否安全?

考慮到對消費性設備的各種漏洞利用和黑客攻擊的悠久歷史,人們很有理由認為答案是「不安全」。以下引用我自己 2013 年寫的一篇關於比特幣錢包安全的文章:

昨晚 9 點左右,我點擊了一個訪問 CoinChat[.]freetzi[.]com 的鏈接 -- 我被提示運行 java。我這樣做了 (我以為這是一個合法的聊天室),但什麼也沒發生。我關了該窗口,沒有放在心上。等我打開我的 bitcoin-qt 錢包大約 14 分鐘後,看到了一筆我沒有授權的交易,該筆交易幾乎將我錢包裡的所有資金 (2.07 BTC) 發送到這個地址:

1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC

還有:

2011 年 6 月,Bitcointalk 成員「allinvain」的電腦被不明入侵者直接入侵,損失了 2.5 萬 BTC (當時價值 50 萬美元)。攻擊者能夠訪問 allinvain 的 wallet.dat 文件,並迅速掏空了該錢包 -- 要麼通過 allinvain 的電腦發送交易,要麼上傳 wallet.dat 文件然後在自己的電腦上掏空了該錢包。

但這些災難掩蓋了一個更大的事實:在過去的二十年裡,計算機安全實際上一直在緩慢而穩步地改善[17]。現在攻擊更難發生,通常要求攻擊者在多個子系統中尋找漏洞,而不是在一段大型複雜代碼中尋找單個漏洞。現在引人注目的事件比以往任何時候都要大,但這並不是任何事情都變得更加不安全的跡象;相反,這只是我們越來越依賴互聯網的一個標誌。

可信硬件(trusted hardware[18]) 是最近一個非常重要的改進來源。一些新的「區塊鏈手機」(例如 HTC 的一款手機 [19]) 在這種技術上走得相當遠,並在可信硬件芯片上安裝了一個以安全為重心的極簡操作系統,允許高安全要求的應用程序 (例如加密貨幣錢包) 保持與其他應用程序分離。三星已經開始生產使用類似技術的手機。甚至是那些從未在廣告中宣傳為「區塊鏈設備」的設備 (比如 iphone) 時常都有某種可信硬件。

加密貨幣硬件錢包實際上是相同的東西,只是這種可信硬件模塊在物理上位於計算機外部而不是內部。但可信硬件 (活該!) 經常在安全圈,特別是區塊鏈社區中受到不好的評價,因為它總是一次又一次地被攻破 [20]。的確,你肯定不想用它來替代你的安全保護。但作為一種增強技術,它是一個巨大的進步。

最後,單一的應用程序,如加密貨幣錢包和投票系統,比整個消費者操作系統簡單得多,出錯的空間更小 -- 即使你必須整合對二次方投票、抽簽、二次方抽選等的支持。像可信硬件這樣的工具的好處是,它們能夠將簡單的東西從複雜和可能被攻破的東西中隔離出來,而且這些工具正在取得一些成功。

所以隨著時間的推移,風險可能會降低

但是好處是什麼呢?

這些安全技術的改進預示著消費硬件在未來可能比現在更受信任。過去幾年在這一領域的投資很可能在未來十年繼續獲得回報,我們可以期待進一步的顯著改善。但是讓投票電子化 (基於區塊鏈或其他方式) 有哪些好處,從而值得去探索這整個領域呢?

我的答案很簡單:投票將變得更有效率,使我們能夠更經常地進行投票。目前,對組織 (政府或企業) 的正式民主投入往往被限制為每 1-6 年進行一次投票。也許在很大程度上正是由於這個原因,我們社會中的去中心化決策制定嚴重分化為兩個極端:純粹的民主和純粹的市場。民主要麼非常低效 (企業和政府投票),要麼非常不安全 (社交媒體點贊 / 轉發)。市場在技術上比社交媒體高效得多,也安全得多,但其基本的經濟邏輯使其不適用於許多類型的決策問題,尤其是與公共產品有關的決策問題。

Vitalik Buterin 澄清區塊鏈投票的兩個誤解:它為何被低估了?是的,我知道這又是一個三角形,我真的真的很抱歉不得不用它。但是請原諒我這一次 ….(好吧,我确信以後我會製作更多的三角形;忍忍吧)

如果我們能建立更多介於民主和市場之間的系統,從前者的平等主義、後者的技術效率和兩者之間的經濟屬性中獲益,我們可以做很多事情。二次方融資 (Quadratic funding) 就是一個很好的例子;流動民主 (liquid democracy) 是另一個很好的例子。即使我們不引入新穎的委託機制或二次方數學,我們也可以做很多事情,通過在更小的範圍內進行更多的投票,使投票更適應每個投票人可以獲得的信息。所有這些想法的挑戰是,為了有一個方案能夠持久地維持任何程度的民主,你需要某種形式的抗女巫攻擊和減少賄選:這正是這些被看好的 ZK-SNARK + MPC +區塊鏈的投票方案試圖解決的問題。

加密領域可以提供幫助

加密貨幣領域的一個被低估的好處是,它是一個優秀的「虛擬經濟特區」,可以在高度敵對的環境中測試經濟和加密想法。無論你構建和發布什麼,一旦其控制的經濟力量超過了某個規模,大量形形色色的參與者 (有時是利他的參與者,有時是受利益驅動的參與者,以及有時是惡意的參與者,其中很多人還是完全匿名的) 會突然來到這個系統並嘗試將其經濟力量扭曲成他們自己的各種目標。

攻擊者的動機很高:如果一個攻擊者從你的加密經濟工具中竊取了 100 美元,他們通常可以獲得完整的 100 美元獎勵,而且他們通常可以逃脫懲罰。但是防禦者的動機也是很高的:如果你開發了一種能夠幫助用戶避免資金損失的工具,你便能夠 (至少有時候) 將其轉變成一種工具並賺取數百萬美元。加密貨幣是終極的訓練區:如果你可以構建一些能夠在這種環境中大規模生存的東西,那麼它也可能在更大的世界中生存。

這適用於二次方融資 [21],適用於 multisig (多簽)[22] 和社交恢復錢包 (social recovery wallets)[23],也適用於投票系統。區塊鏈領域已經幫助推動了重要安全技術的興起:

  • 硬件錢包;

  • 高效的通用零知識證明;

  • 形式化驗證工具;

  • 搭載可信硬件芯片的「區塊鏈手機」;

  • 抗女巫攻擊機制,比如 Proof of Humanity[24]

在所有這些案例中,技術的某個版本在區塊鏈出現之前就已經存在了。但難以否認的是,區塊鏈在推動這些工作方面產生了重大影響,區塊鏈領域固有的激勵機制在推動技術發展的真正實現方面發揮了關鍵作用。

總結

從短期來看,任何形式的區塊鏈投票都應該局限於小型實驗,無論是針對更主流的應用還是針對區塊鏈領域本身的小型試驗。目前的安全性顯然還不夠好,不能一切都依賴計算機。但這正在改善,而如果我錯了,安全性沒有得到改善,那麼不僅區塊鏈投票,而且整個加密貨幣都將很難成功。因此,這項技術有很大的動力繼續改進。

我們都應該繼續關注這項技術,以及世界各地為提高安全性所做的努力,並慢慢地在非常重要的社會進程中更加自如地使用技術。技術已經是我們金融市場的關鍵,對經濟的很大一部分進行加密化將把更大一部分經濟交給我們的加密算法運行這些算法的硬件。我們應該仔細觀察和支持這一過程,並隨著時間的推移利用其好處,將我們的治理技術帶入 21 世紀。

特別感謝 Karl Floersch、Albert Ni、Mr Silly 和其他人的反饋和討論。

鏈捕手ChainCatcher提醒,請廣大讀者理性看待區塊鏈,切實提高風險意識,警惕各類虛擬代幣發行與炒作,站內所有內容僅係市場信息或相關方觀點,不構成任何形式投資建議。如發現站內內容含敏感信息,可點擊“舉報”,我們會及時處理。
ChainCatcher 與創新者共建Web3世界