V神:區塊鏈上投票流程的實現
投票是對過程完整性非常重要的流程。投票的結果必須是正確的,而且必須透過透明的流程來保證,以便每個人都可以確信結果是正確的。應該不可能成功地干擾任何人的投票企圖或阻止他們的投票被計算在內。
區塊鏈是一項旨在為流程完整性提供保證的技術。如果某個流程在區塊鏈上執行,則可以確保該流程根據預先約定的程式碼執行,並提供正確的輸出。沒有人可以阻止執行,沒有人可以篡改執行,也沒有人可以審查和阻止任何使用者的輸入被處理。
因此乍看起來,區塊鏈似乎恰好提供了投票所需的內容。而且我不是唯一一個想到過這個人的人。許多主要的潛在使用者感興趣。但事實證明,有些人有非常不同的意見。
儘管投票的需求和區塊鏈提供的技術利益之間看似完美匹配,但我們經常看到令人恐懼的文章反對兩者的結合。這不僅是一篇文章:這是《科學美國人》的反區塊鏈投票文章,這是CNet的另一篇文章,也是ArsTechnica的另一篇文章。不僅僅是隨機的技術記者:布魯斯·施耐爾(Bruce Schneier)反對區塊鏈投票,麻省理工學院的研究人員撰寫了整篇論文,認為這是一個壞主意。發生什麼了?
批評思路總結
批評的兩個關鍵觀點:
- 區塊鏈是進行選舉的錯誤軟體工具。他們提供的信任屬性與投票所需的屬性不是很好的匹配,並且具有不同資訊流和信任屬性的其他型別的軟體工具會更好地工作。
- 通常,無論軟體是什麼,都無法信任其執行選舉。無論平臺如何組織,無法檢測到的軟體和硬體錯誤的風險都很高。
本文將依次討論這兩種說法,先,我將討論使用區塊鏈進行投票的現有嘗試的安全性問題,以及正確的解決方案如何不放棄區塊鏈,而是將其與其他加密技術結合起來的問題。第二,我將解決有關軟體(和硬體)是否可以信任的問題。答案是:電腦保安性實際上正在提高很多,我們可以繼續努力以保持這種趨勢。
整個帖子的前提是可以使用良好的區塊鏈擴充套件技術(例如sharding)。當然,如果區塊鏈無法擴充套件,這一切都不會發生。但是到目前為止,這項技術的發展正在迅速進行,沒有理由相信它不會發生。
不良的區塊鏈投票協議
區塊鏈投票協議一直遭到駭客攻擊。兩年前,一家名為Voatz的區塊鏈投票技術公司風靡一時,許多人對此感到非常興奮。但是去年,一些麻省理工學院的研究人員在他們的平臺中發現了一系列關鍵的安全漏洞。同時,幸運的是,在莫斯科舉行選舉的一個月前,駭客入侵了即將用於即將舉行的選舉的區塊鏈投票系統。
隱私和強制性
但是,即使是技術上沒有被破壞的區塊鏈投票協議也常常很爛。為了理解原因,我們需要更深入地研究區塊鏈提供的特定安全屬性以及投票所需的特定安全屬性-當我們這樣做時,我們會發現存在不匹配之處。
區塊鏈提供兩個關鍵屬性:正確執行和審查抵抗。正確執行只是意味著區塊連結受使用者的輸入(“交易”),根據一些預定義的規則正確處理它們,並返回正確的輸出(或以正確的方式調整區塊鏈的“狀態”)。審查審查的阻力也很容易理解:任何想要傳送交易並願意支付足夠高費用的使用者都可以傳送交易,並期望很快將其包含在鏈上。
這兩個屬性對於投票非常重要:您希望投票的輸出實際上是對每個候選人的票數進行計數並選擇投票數最多的候選人的結果,並且您肯定希望有資格參加投票的人即使有實力的演員試圖阻止他們,也可以投票。但是投票還需要區塊鏈無法提供的一些關鍵屬性:
- 隱私權:您不應該知道某些候選人為哪位候選人投票。
- 強制反抗:即使您願意,也不能向他人證明您的投票方式
第一個需求的需求顯而易見:您希望人們根據自己的感受進行投票,而不是周圍的人,他們的僱主,警察或大街上的隨機暴徒會如何選擇。防止售票需要第二個要求:如果您能證明自己的投票方式,出售轉讓票就變得非常容易。
投票可證明性也將使脅迫形式成為可能,其中脅迫者要求看到其首選候選人的某種投票證明。大多數人,即使是那些意識到第一個要求的人,也不會考慮第二個要求。但是第二個需求也是必要的,並且提供它在技術上是不平凡的。
不用說,您在平常看到的平均“區塊鏈投票系統”甚至都沒有嘗試提供第二個屬性,並且通常無法提供第一個屬性。
在沒有區塊鏈的情況下進行安全的電子投票
現在傳統投票都依靠外部原語來完成其安全性保證:佈告欄。公告板是任何選民都可以傳送訊息的地方,並保證(i)任何人都可以閱讀公告板,並且(ii)任何人都可以將訊息傳送到被接受的公告板。
您可以找到的大多數抗脅迫投票檔案都會偶然提及公告板的存在,但是論文數量卻很少:討論如何實際實施此公告板。在這裡,您可以希望看到我要去哪裡:實施公告板的最安全方法是僅使用現有的區塊鏈!
使用區塊鏈進行安全的電子投票
當然,已經有很多嘗試在區塊鏈前製作公告欄的嘗試。2008年的這篇論文就是這樣的嘗試。它的信任模型是一個標準的要求,即“k的n伺服器必須誠實”(k = n/2很常見)。這份2021年的文獻回顧涵蓋了公告板上的一些區塊鏈前嘗試,並探索了將區塊鏈用於這項工作。審查的區塊鏈前解決方案類似地依賴於k-of-n信任模型。
區塊鏈也是k-of-n信任模型。它要求至少一半的礦工或股權驗證者的證據遵循該協議,並且如果該假設失敗,通常會導致“ 51%的攻擊”。
那麼,為什麼區塊鏈要比專用公告欄更好?
答案是:建立一個真正受信任的k-of-n系統是困難的,而區塊鏈是唯一已大規模解決該問題的系統。
假設某個政府宣佈正在建立投票系統,並提供了將執行特殊用途公告板的15個本地組織和大學的列表。作為外部觀察員,您怎麼會知道,政府不只是根據他們秘密與情報機構串通的意願,從1000個組織中選擇了這15個組織?
另一方面,公共區塊鏈具有任何人都可以參與的未經許可的經濟共識機制(工作證明或權益證明),並且它們具有區塊鏈瀏覽器,交易所和其他監視節點的現有多樣化且高度激勵的基礎架構,以不斷進行驗證實時沒有發生任何不良情況。
這些更復雜的投票系統不僅使用區塊鏈,還使用諸如零知識證明之類的密碼學來確保正確性,並依靠多方計算來保證抗脅迫性。因此,他們避免了更簡單的系統的弱點,這些系統僅“直接在區塊鏈上投了票”而忽略了由此產生的隱私和強制性抵制問題。但是,區塊鏈公告板仍然是整個設計安全模型的關鍵部分:如果委員會被打破,但區塊鏈沒有破壞,則強制抗性將喪失,但圍繞投票過程的所有其他保證仍然存在。
MACI:以太坊中抗壓區塊鏈投票
以太坊生態系統目前正在試驗一個名為MACI的系統,該系統將區塊鏈,ZK-SNARK和一個單一的中央參與者結合在一起,以保證抗壓性(但除了抗壓性外,無權損害其他任何效能)。MACI在技術上不是很困難。使用者透過使用其私鑰對訊息簽名,將簽名的訊息加密為由中央伺服器釋出的公共金鑰,以及將加密的簽名的訊息釋出到區塊鏈來參與。伺服器從區塊鏈下載訊息,對其進行解密,對其進行處理,然後將結果與ZK-SNARK一起輸出,以確保它們正確地進行了計算。
使用者無法證明他們是如何參與的,因為他們有能力傳送“金鑰更改”訊息來欺騙任何試圖對其進行稽核的人:他們可以先傳送金鑰更改訊息將其金鑰從A更改為B,然後再傳送“用A簽名的“偽造訊息”。伺服器將拒絕該訊息,但沒有其他人知道金鑰更改訊息已經傳送過。儘管僅出於私密性和強制性要求,但對伺服器有一個信任要求;伺服器無法透過錯誤地計算或檢查訊息來發布錯誤的結果。從長遠來看,可以使用多方計算對伺服器進行一定程度的分散,從而增強了隱私和抗強制性保證。
在clr.fund上有此計劃的工作演示,用於二次融資。以太坊區塊鏈的使用可以確保投票的抗拒性,這比依靠一個委員會來進行投票的抗拒性要高得多。
回顧
- 投票流程具有四個重要的安全要求,投票才能確保安全:正確性,審查制度,隱私和強制性。
- 區塊鏈擅長前兩個。他們在最後兩個賽季表現不佳。
- 加密區塊鏈上的投票可以增加隱私。零知識證明可以使正確性恢復原狀,儘管觀察者由於加密而無法直接加總票數。
- 多方計算解密和檢查投票可以提供抗壓性,如果與使使用者可以與系統多次互動的機制結合使用的話;第一次互動會使第二次互動無效,反之亦然
- 使用區塊鏈可確保您具有極高的安全檢查抵抗力,即使委員會串通並破壞了強制抵抗力,您也可以保持這種檢查抵抗力。引入區塊鏈可以顯著提高系統的安全級別。
短期內,任何形式的區塊鏈投票當然都應限於小型試驗,無論是針對更主流應用程式的小型試驗還是針對區塊鏈空間本身的小型試驗。目前,安全性絕對不足以依靠計算機來完成所有工作。但是它正在改善,如果我錯了並且安全性沒有改善,那麼不僅區塊鏈投票,而且整個加密貨幣都將很難獲得成功。因此,該技術有很大的動力繼續改進。
原文點選標題
相關文章
- 區塊鏈投票系統開發方案,區塊鏈投票系統開發原始碼區塊鏈原始碼
- 加密谷區塊鏈投票試驗成功加密區塊鏈
- 如何在NEO區塊鏈上實現資訊加密區塊鏈加密
- JavaScript實現區塊鏈JavaScript區塊鏈
- 雲+區塊鏈 實現區塊鏈技術的普惠應用區塊鏈
- 區塊鏈-NFT 的實現原理區塊鏈
- 1.8 區塊鏈交易流程區塊鏈
- 【區塊鏈技術實現】區塊鏈
- 支援區塊鏈的議案通過了美國國會投票區塊鏈
- 一文讀懂區塊鏈以及一個區塊鏈的實現區塊鏈
- 比特幣和區塊鏈(2):比特幣中區塊鏈的實現比特幣區塊鏈
- .Net Core實現區塊鏈初探區塊鏈
- 使用Javascript實現小型區塊鏈JavaScript區塊鏈
- 在 iOS 中實現區塊鏈iOS區塊鏈
- 區塊鏈V神:以太坊2.0演算法Rollup的不完整指南區塊鏈演算法
- 200行golang 實現的區塊鏈Golang區塊鏈
- 區塊鏈的原理與golang實現例子區塊鏈Golang
- 用區塊鏈實現造富神話?你可能對它有些誤解區塊鏈
- 瑞士區塊鏈演變:投票選舉和銀行業區塊鏈行業
- 基於區塊鏈的金融借貸交易平臺開發流程與實現區塊鏈
- 西弗吉尼亞州率先實施區塊鏈移動投票解決方案區塊鏈
- NodeJS實現簡易區塊鏈NodeJS區塊鏈
- 區塊鏈技術實體應用落地開發方案,區塊鏈資料上鍊區塊鏈
- 區塊鏈教程、區塊鏈指南、區塊鏈中文手冊、區塊鏈原理區塊鏈
- 使用MVC模式實現區塊鏈開發MVC模式區塊鏈
- [譯] 用 Java 程式碼實現區塊鏈Java區塊鏈
- 用java實現一個簡單的區塊鏈Java區塊鏈
- 一個簡單的區塊鏈程式碼實現區塊鏈
- 在區塊鏈上開發遊戲:鏈遊區塊鏈開發遊戲
- 以太坊DApp開發入門教程——區塊鏈投票系統APP區塊鏈
- 區塊鏈,中心去,何曾著眼看君王?用Go語言實現區塊鏈技術,透過Golang秒懂區塊鏈區塊鏈Golang
- 新加坡的政府區塊鏈實驗可以實現監管理解區塊鏈
- bimgotoblock-BIM要上區塊鏈GoBloC區塊鏈
- 區塊鏈“戀”上大贛州區塊鏈
- 用Java程式碼實現區塊鏈技術Java區塊鏈
- 區塊鏈安全:實現公鏈雙花攻擊的多種方法區塊鏈
- blockstack/stacks-blockchain:Stacks 2.0 區塊鏈的Rust實現Blockchain區塊鏈Rust
- 300行Kotlin程式碼實現的區塊鏈Kotlin區塊鏈