※ 引述《rdadi (不專業技術員)》之銘言:
: 不在籍的電子投票
: 還沒有實行
: 或是可行性的模型
: 其實可以一直討論
: 現在都有先進的IT跟OT技術
: 加上流程還是可以加入人工驗證
: 並不是完全沒有討論的空間
如果要達到匿名投票的線上投票,以目前的的技術來看完全不可能。
我這篇完全不考慮駭客或是造假的情況發生,但光是這樣,以目前的技還是不可能達到
匿名投票的線上投票。
以學術一點的用語來說,我這篇的攻擊者屬於半誠實的攻擊者,也就是他會造你設計的
流程執行,但他會記下他所有他經手過的資料來攻擊。
匿名投票主要有兩個特性要達到,一是匿名,另一個則是正確計票。
匿名的意思很簡單,就是不知道這張票是誰投的。但是匿名也是有分等級的。
一個是在投票的時候不知道是誰投的,再來是就算開票後,還是不知道是誰投的。
而正確計票的意思也很簡單,就是每個人的票要正確且只能被計到一次。
沒有正確計到有分成你的票沒有被計到或是你的票被記錯兩種情形,所以如果要正確計票
的話,那這兩種情形都要考慮進去。
而只能被計到一次,就是字面上的意思。要確保你的票只能被計到一次。
那來看看目前比較常提到的幾種技術。
最簡單的方法就是公鑰加密。公鑰加密是一種密碼學上的技術,你可以將訊息用公鑰加密
起來,然後只有私鑰的人才有辦法解密看訊息。所以只要每個人用公鑰把自己的票加密給
中選會,然後中選會在開票的時候,再將票解密公佈就好。不過這個方法大概會有幾個問
題,首先,你沒有辦法確保每個人可以傳幾張票給你。除非有設計別的方法讓每個人都只
能傳一張票。不過當我可以確保每個人都只傳一張,那我其實就可以知道你投的人是誰。
所以匿名性就消失了。因為我前面有說,這篇的攻擊者是半誠實的攻擊者,所以就不考慮
中間人攻擊這種主動攻擊。不過,這種純加密的方式還蠻容易被竄改內容的。
再來是區塊鏈,區塊鏈的特性是不可竄改。所以只要一上鏈,就可以確保資料完整性。
而且區塊鏈還有一個特性是柯文哲最愛的公開透明,你只要一上鏈,你的投票結果就會被
知道了。因此在設計上,通常不會直接把選票上鏈,而且將選票用公鑰加密後,再上鏈。
這樣一來,在開票之前,除了有私鑰的人(通常是選務中心,在這應該就是中選會)可以偷
看票的結果外,其他人都沒有辦法知道投票結果。
之後只要在開票時候,中選會把私鑰公開,讓選票解密完後,就可以簡單知道投票結果。
除了開票後會知道每個人投票以外這個匿名性,其他的條件都滿足了。
應該會有人問說,區塊鏈不就是匿名?那應該沒有問題。
那就要看你是怎麼拿到錢包的,應該是也是中選會發的,所以只要中選會記下每個人對應
的錢包位址,那就直接失去匿名性。
這個方法其實還不錯,只要你相信中選會不會在投票過程偷看。
但不是每個人都相信中選會,所以有人提了一個技術叫Verifiable delay function(VDF)
VDF概念很簡單,他會有一個數學式跟一個值,你必須花一定的時間,才有辦法把答案算
出來。只要把答案設計成選票號碼,在投票時間你沒有辦法知道投票結果。連中選會也
沒有辦法,因為他必須花時間才辦法算出答案。
但,一樣的問題。只要算出答案就可以知道每個人票投給誰了。不過這個方法可以預防中
選會在投票過程偷看。但還是沒有辦法達到開票後的匿名性。
以上的幾種方法都是在設計線上投票常見方法。
基本上,所有的方法就必須要相信中選會是公正的。又或是讓中選會的影響最小。
但即使是最小,還是沒有辦法達到一開始所說的那些條件。
至於你說的,在點餐機加隔版就看不到投票內容。
怎麼會看不到,只要記下你投票的時間跟機台,再開票的時候對照資料庫的時間。
我就知道你投給誰了。這就是沒有開票後的匿名性。
而目前的投開票機制是要怎麼達到匿名性及正確計票呢?
匿名性在實體反而簡單,因為人跟票是分開的。所以只要投完票後,票就匿名了。
而在正確計票方面,選務人員會點票,他會看已領票跟末領票加起來是否等於原來給的票
這樣就可以確保每張票都有被計到。不會多也不會少。
當然如果有人真的有方法可以達到上述的條件,歡迎提出來。
我應該會指出哪邊的條件沒有達成。