Signature

匿名電子投票的方法

  • August 16, 2013

我想實現一個基於網際網路的電子投票系統。選民應能夠為 n 個可能的候選人中的一個投票。每個候選人都有自己的投票箱,由可信賴的第三方保管。這個第三者是絕對值得信賴的,因為它可以被信任地履行他勤勉地監督演員的職責。然而,它並非沒有偏見,因此在任何情況下都必須能夠看到哪個選民投票給了哪個候選人。

這個問題可以使用同態加密來解決。投票同態加密並同態添加到投票箱中。為了防止第三方獲得任何投票的任何資訊,每個選民都會在每個投票箱中投一票。此投票的 n-1 次將是“0”表示“沒有投票給該候選人”,只有一次它將是“1”表示“投票給該候選人”。

這種方法的一個令人不快的副作用是第三方顯然無法檢查每一票的正確性。選民可能會嘗試給多個候選人打“1”或給單個候選人打“2”。當然,第三方可以提前分發預先簽名的投票幣,選民將用於投票。然而,第三方會辨識這些硬幣,即它們的價值,因此仍然知道誰投票給了誰。

您是否知道如何依靠盡可能少的其他(受信任的)第三方來解決這個問題?

使用指數 Elgamal 作為加密函式,

  1. 定義候選人列表:例如,Alice、Bob、Carol
  2. 選民送出他們的投票加密:例如,給 Alice 的選民: $ v=\langle\mathsf{Enc}(1),\mathsf{Enc}(0),\mathsf{Enc}(0)\rangle $
  3. 使用OR 證明(圖 2)顯示每個密文加密 0 或 1:例如, $ \langle \pi_1, \pi_2, \pi_3 \rangle $
  4. 在加密下,將投票中的密文相加:例如, $ v_t=\mathsf{Enc}(1)\cdot\mathsf{Enc}(0)\cdot\mathsf{Enc}(0)=\mathsf{Enc}(1+0+0)=\mathsf{Enc}(1) $
  5. 使用相同的 OR-proof 來展示 $ v_t $ 加密 0 或 1(0 表示投票者棄權)
  6. 送出 $ \langle v, \pi_1, \pi_2, \pi_3, v_t, \pi_t \rangle $

任何人都可以檢查的有效性 $ \pi_1, \pi_2, \pi_3 $ . 任何人都可以加起來 $ v $ 看到它是 $ v_t $ . 任何人都可以檢查 $ \pi_t $ .

選舉官員採取 $ v $ 從每個人那裡,將它們按元素相加。然後使用證明已正確解密的協議對結果進行解密(通常使用共享密鑰)(有關如何執行此操作,請參見同一篇論文)。

是的。已經對這個問題進行了廣泛的研究:甚至有一個密碼學家社區致力於建構此類投票方案(請參閱端到端可審計投票系統)。我會根據該領域的經驗給你一些建議。

**不要自己設計。**不要嘗試自己設計。已經對這個主題進行了廣泛的研究,如果你試圖發明輪子,很可能你最終會得到一些不安全或劣等的東西。

相反,如果您不將其用於公開選舉,我建議您使用Helios。它是一個最先進的系統,具有任何人都知道如何為網際網路投票實現的最佳安全性——並且它具有高質量的實現,您可以輕鬆使用,幾乎不需要您付出任何努力. 它比您自己設計的任何東西都經過了更徹底的審查。

**對於公開選舉,網際網路投票不夠安全。**如果您打算將其用於公職公開選舉,我的建議是:不要。只是不要。安全隱患太嚴重了。要了解有關此主題的更多資訊,我建議閱讀以下內容:線上政府選舉系統 - 有可能嗎?安全網際網路輪詢這個這個這個

引用自:https://crypto.stackexchange.com/questions/3474