Homomorphic-Encryption

同態加密允許匿名是/否投票?

  • May 16, 2017

我需要一個允許線上是/否投票但不透露誰投了什麼的加密系統。我追求的是“部分”同態密碼系統嗎?例如,Damgård-Jurik 在我的情況下是否有效?

在我的方案中,會有一個伺服器獲得選票,而伺服器不應該看到誰投了什麼。但是我們可以認為伺服器不會作弊:他不會修改投票結果。但投票仍然應該是匿名的。

如果我需要同態,它是如何工作的?每個選民都需要從前一個選民那裡獲得加密嗎?還是中心化伺服器可以接收所有加密投票,然後自己“混合”它們,混合後得到結果?

它是如何運作的,有四個選民說:如果只有三個人投票,這個計劃會失敗嗎?

例如,我在這裡玩了一個不錯的模擬器,它需要 8 個選民。您不能在該頁面上放置七位選民:這只是該網站的一個實施細節,還是 Damgård-Jurik 期待預先知道的一些選民的所有選票?

該頁面還顯示了誰投了什麼,但我不清楚這是出於教學目的,還是在計票時投票不再是匿名的。

同態密碼系統有一些操作 $ * $ 在對應於其他一些操作的密文上 $ \circ $ 在明文上,即

$$ \mathcal{D}(c_1 * c_2) = \mathcal{D}(c_1) \circ \mathcal{D}(c_2). $$ 通常,您通過應用獲得的密文 $ * $ 看起來像加密算法產生的密文。對於 Damgård-Jurik, $ * $ 是乘法模 $ n^{s+1} $ 和 $ \circ $ 是加法模 $ n^s $ . 如果密文不能幫助您說出有關加密消息的任何內容,則密碼系統是安全的。

假設您將“是”編碼為 $ 1 $ 和“不”為 $ 0 $ . 投票者將加密他的編碼投票並將其發送到伺服器。假設伺服器收到密文 $ c_1, c_2, \dots, c_L $ 這些都是加密的 $ 0 $ 或者 $ 1 $ . 伺服器現在可以將密文相乘以獲得單個密文,根據上述要求將滿足

$$ \mathcal{D}\left(\prod_i c_i\right) \equiv \sum_i \mathcal{D}(c_i) = \text{number of “yes” votes.} $$ 因此,伺服器可以通過解密產品密文找到正確的選舉結果。 送出多少密文並不重要。

如果伺服器是被動的(誠實但好奇,會嘗試在不偏離指令的情況下破壞機密性),投票者是誠實的並且密碼系統是安全的,那麼伺服器無法從密文中推斷出任何關於投票的資訊(除了結果,當然,因為他解密了包含結果的密文)。Damgård-Jurik 通常被認為是安全的。

有趣的問題當然是當選民不誠實或伺服器試圖作弊時會發生什麼。這些問題的答案中有很多很好的密碼學。

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