存不存在一種匿名投票方式(計算機實現),滿足以下條件?

1.有效性:能確定該票是有權利投票的人投的,且不能投多次,能驗證投票未被篡改。

2.匿名性:無法獲知該票是誰投的,投了什麼,無法獲知哪些人投了哪些人沒投。

總而言之就是絕對公平公正匿名的投票方式。任何人都能驗證投票有效性,不怕追蹤被報復的系統。


有的。

根據 身份驗證、中間人攻擊和數字簽名:淺談密碼學(中),我們可以設計一個盲投票的演算法。

在介紹這個演算法之前我們要設計出一個基於 RSA 的盲簽名協議,它要滿足這個需求:

Alice 需要將文件 t 交給 Bob 簽名,但是 Bob 不能看到 t 的內容。

我們來分析下 RSA 本身。我們想要的是 t^d,mathrm{mod},n(d, n 為對方私鑰),因為公鑰 e 滿足m^{ed}=m,(mathrm{mod},n),因此我們可以找個和 n 互質的隨機數 k,把 tk^e發給 Bob,對方返回t^d k^{ed},mathrm{mod},n=t^d k,mathrm{mod},n,再「除以」k(同餘類環mathbb{Z}_n上 k 的乘法逆總是存在),就能得到我們想要的結果了。

因此,演算法是這樣的:

  1. 投票人將自己的身份證明以及干擾過的選票發給中央機構。由於選票被干擾過,因此此時中央機構無法獲知選票的內容,也就無法將選票和投票人聯繫起來。
  2. 中央機構驗證投票人的身份證明,然後給選票簽名,將干擾過且簽名過的選票發回給投票人。由於每個身份證明只能獲得一次簽名,所以投票人無法一人多投。
  3. 投票人解除干擾,將簽名過的選票發給中央機構。如果中央機構使用多份公鑰-密鑰對的方法試圖關聯選票和人,投票人此時就能發現,可以拒絕投票。
  4. 中央機構驗證簽名,確認選票有效性。

事實上,傳統的選舉中,這裡的「簽名」是用紙質選民證代替的:中央機構驗證選民身份發證,選民用證換選票。選民證的不可偽造性是用紙質介質——而不是密碼學——保證的。

至於計票的監督問題么……你可以把選票先自己簽一下名,然後連公鑰一次提交給中央(當然干擾也是簽名過的票 + 公鑰作為整體一起干擾),這樣開票的時候你就可以驗證自己的票有沒有被開出來,而且中央也無法在投票完之後偽造選票了。


存在,且已經實現(至少理論上的).

這裡即覆蓋了相關的內容,一一閱讀即可.

End-to-end auditable voting systems

具體細節可能會在一個月內補上.

PS:因為投票系統的牽扯的安全特性太多,不翻看論文情況下,還是不敢貿然回答的.但若是急用答案,可以優先參照Helios Voting Helios Voting, 這個是基本滿足題主所提的條件,而且,你也可以自己發起一個投票,來試驗一下.


Bruce Schneier 的 《應用密碼學》 一書 第六章 第一節 "保密選舉" 里列出了一些方法,而且滿足的條件比題目中的更苛刻,因為密碼學專家想探討的就是可用的匿名選舉方式。

在這一節中,最後結論是理論上可行的,但是很複雜而已。有一種方法基本滿足條件(但是有一點瑕疵),並且實際中也是可用的。

這還是96年出版的書,現在應該有更好的辦法。真要了解其實就應該和樓上的那位同學一樣去查論文,密碼學的很多東西在科普文里根本講不清楚的。


有。這應該是數學問題吧。舉一個存在性(其可行性經過改進)例子:

例如有10人,一人一票總計10票。

現讓這10個人在10台電腦上都不記名投票,可以隨意投什麼,一台一次。但在一台處標記本次投票是否為「真」。不標記則作廢。

計算機只需記錄所有為真的投票。票數超過10就作廢本次投票。(少於10可以算作棄權)。

實際上你不需要每個人輪流去每台計算機去投,這樣畢竟效率太低了。你可以只在你的計算機上投,但是你的計算機會遠程登錄另外10台計算機,從每台計算機上隨機投票。只有你和你的計算機知道你投的什麼票。實際上除非查看你的計算機,沒有人知道你投了什麼票。在這個終端程序上,我們還可以強制你只能選一個選項(投1票)。然後這個程序登錄到那10台計算機上,隨機生成投票結果,但是保證把你選擇的選項記做「真」。

這麼複雜的過程,只是為了產生硬匿名。這是一種不依賴中央機構的真匿名方式。只有你和你的計算機知道你投了什麼票。10台計算機不記錄時間(或者隨機數時間,從列表中抽取時間等等)

計算機同時可也可把時間戳隨機化。因為唱票不需要時間戳,這個信息不需要被唱票的機器知道。因此從統計角度無法知道是誰投的什麼票。

從博弈的角度,除非十個人合謀,否則出現多投都能被發現。隨著人數的增多,多投而不溢出的概率收斂到0。。


兄弟,作業要獨立完成哦


可以,並且已經存在,上面幾個說不可能的已經點了差評。

正確方式是使用密碼學:

具體是採用ElGamal加密演算法的變種,實現同態加密。什麼叫同態加密呢,就是對數據加密後的密文進行運算,比如加減乘除與或運算等等把得到的結果再解密,出來的結果和直接用未加密的明文通過相同計算得到的一樣,也就是說數據可以在加密的狀態下進行計算。

ElGamal encryption

同時ElGamal也是一種私鑰加密演算法,可以在保證匿名性的同時確保安全性和認證投票人。

詳細請自行翻牆看此視頻:

https://www.youtube.com/watch?v=ZDnShu5V99s


首先,先問為什麼匿名?對於代議制來說,只有最基本那次直接選舉,是需要匿名的,其他的間接選舉,或者表決,是不應該匿名的,否則我們怎麼知道選出來的代表,到底幹了什麼?

其次,在直接選舉中,先驗證選舉人的投票資格,然後再匿名投入到投票箱中,再公開驗票,已經很完美保持了選舉人。


推薦閱讀:

密碼學 安全方向?
Diffie-Hellman密碼交換是如何運作的?
RSA 1024和AES 256,這兩種加密演算法理論上哪種更安全?
能否設計出「可以杜絕主辦方作弊的」匿名投票系統?
誰能最簡單的詳解橢圓曲線演算法,secp256k1 是如何生成公鑰和私鑰的?

TAG:演算法 | 投票 | 投票系統 | 密碼學 |