Keys

預計算 ElGamal 臨時密鑰的現有工作

  • September 19, 2019

我在玩電子投票方案中的一個問題,該方案使用加法同態加密來統計選票,即在一天結束時,必須信任某人(或某些人,如果秘密材料以某種方式被破壞)解密最後的統計。

查看 ElGamal 的加法變體,此處轉載以供參考:

  • $ M $ 是一個模域,所有計算都在其中發生

  • $ g $ 是一個生成器 $ M $

  • 私鑰 = $ k_2 $ = 隨機數 < $ M $

  • 公鑰 = $ k_1 $ = $ g^{k_2} $

  • $ m $ 是模域的成員 $ M $

  • $ x $ 是明文

  • $ r $ 是一個隨機數 < $ M $ , 每次呼叫 E 都不同

    • 這是臨時密鑰,在第二個中使用 $ D(…) $
  • $ E(k_1, x) = <g^r, m^x * k_1^r> = <c_1, c_2> $

  • $ D(k_2, c_1, c_2) = c_2 * ({c_1^{k_2}})^{-1} $

  • $ D(r, k_1, c_1, c_2) = c_2 * (k_1^r)^{-1} $

在電子投票方案*中,每張選票都表示為 1 或 0 明文,計票只需將所有密文相乘並解密結果即可。

以下方案無需釋放私鑰來解密最終計數:

在“選舉”之前

  • 預先計算大量隨機數 $ R = [R_1, … , R_n] $ 在哪裡 $ n $ 是可能投票者的數量
  • 讓 $ A = [A_1, …, A_n] = [R_1, A_1+R_2, A_2+R3, … , A_{n-1}+R_n] $
  • 按順序發布 A 的每個成員的雜湊值

加密“選票”時

  • 當選擇一個 $ r $ 為一個 $ E(k_1, x) $ , 選擇 R 的第一個未使用的成員

選舉後

  • 發布所有密文(“選票”)
  • 發布 $ A_y $ 在哪裡 $ y $ 是投票數

$ A_y $ 將是計票的臨時密鑰,但不允許解密任何其他選票(就像私鑰一樣)。的正確性 $ A_y $ 由投票機構通過事先發布雜湊值來實現其價值。


簡而言之,它只是為最終計數的所有可能的臨時密鑰發布承諾(通過散列);然後釋放單個相關的臨時密鑰。每個人都可以統計並解密該統計,但解密單個“選票”值應該是不可能的。

我建構了一個概念驗證程序,它實際上可以做到這一點(使用添加劑 ElGamal 的一些開源實現),並且它可以工作。

當然,僅僅工作是不夠的;我很好奇這個計劃的安全性。

我的問題是,是否有任何與這種方法相關的出版物或其他工作?

這似乎是對有據可查的附加 ElGamal 電子投票方案的一個非常簡單的擴展,但我的 Google-Fu 沒有找到任何東西,而且我個人對任何此類材料都不熟悉。

(這種方法

$$ the pre-computed ephemeral key part, specifically $$被打破以及為什麼,自然也可以接受) *從實際方案中大大簡化,但這是加密位的核心。

您似乎想在不洩露私鑰的情況下解密最終值。首先,如果有人知道私鑰,他們可以發布一個非常簡單的非互動式零知識證明,證明明文是密文的解密(密文是所有選票的累積),而不會透露密鑰的實際值。這是解決問題的標準方法。(如果您有興趣,我可以添加證明)。

其次,文獻中已經研究了預先承諾 Elgamal 隨機因素的方法,但原因完全不同。有人擔心,如果投票機選擇隨機性,他們可能會嘗試一些值,直到密文以某種模式出現(例如,如果投票給 Alice,則第 5 位為 0,如果投票給 Alice,則為 1鮑勃)。您的計劃偶然避免了這種情況。在On-Subliminal Channels in Encrypt-on-Cast Voting Systems 中考慮了一種更徹底的方法。

如果你堅持你的方法,請注意你永遠不需要使用 $ c_1 $ 一點也不。 $ c_2 $ 單獨是一個更簡單的原語,稱為 Pedersen 承諾。使用 Pedersen 承諾對投票進行編碼,將它們相加(在承諾下),然後揭示隨機因素的總和的方法被考慮在以永恆的隱私向公眾改進 Helios 中。不同之處在於選民選擇隨機因素並送出加密,而不是使用為他們選擇的因素。(這樣做也是出於完全不同的原因:Pedersen 承諾具有稱為永久隱私的屬性)。

就您方法的安全性而言,不清楚誰知道 R 以及選民如何獲得他們的 R 值。例如,如果我給選民 5 的值 ( $ R_5 $ - 1) 並給選民 6 值 ( $ R_6 $ +1),它們仍然會加起來為正確的值 $ R $ . 然而選民 5 的資訊將是 $ m^x/k_1 $ 選民 6 將是 $ m^x*k_1 $ . 這些可能是投票的合理值:例如說 $ k_1=m^2 $ . 如果選民 5 投票給 0,那麼這可以算作 -1,如果選民 6 投票給 1,那麼這可以算作 +3。換句話說,你最終得到了候選人 1 的 2 票,而不是每個候選人 1 票。

選擇可能就足夠了 $ m $ 以這樣一種方式,沒有人知道之間的離散對數 $ k_1 $ 和 $ m $ 但在認可它之前,我必須再考慮一下。

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