2012-05-17 40 views
1

我在一個有幾十個成員的小組。我寫了一個速度很快的網絡投票系統,而且我希望在其中添加一些「安全」元素。我試圖儘可能地變成赤裸裸的骨頭。我所做的就是讓用戶在投票時輸入一個祕密字符串(例如GUID),並且每個選民都存儲在數據庫中。匿名在線投票系統

我想到的用於向用戶分發祕密的最安全的方法是在數據庫中創建一串祕密字符串,將它們打印出來並帶到會議中,並讓人們從帽子中吸取祕密。這樣,我相信我會得到兩個主要的好處:(1)我作爲投票系統的作者,將無法確定哪些人投了贊成票(對於這個問題也不會有其他人,只有祕密持有人(2)不能「只有任何人」可以去投票,因爲有效的祕密是先驗已知的。

有沒有一種合理的方式來模擬實際存在的,從頭到尾的過程,而不會影響上面概述的原則優勢。也許這是不可能完成的,並且在某些時刻必須要有信任,否則我必須堅持要有人「親自」畫一個祕密(同時我記錄了那些被給予了個人祕密的人)。

我也不知道如果有人聲稱已經失去了他們的祕密該怎麼辦,因爲如果他們不誠實,我只是讓他們畫一個新的祕密,他們將有兩個投票。如果沒有找到「失去」祕密的痕跡,我不能進去,並刪除與之相關的選票。

我所在的地方是我認爲我最好的選擇是基本上讓人們爲每次通過實際存在發佈和分發祕密的投票畫出新的祕密。是否有一種更優雅/自動化的方式來實現上述同樣的好處,我還沒有意識到?

+1

這個當前的方案聽起來只不過是一個真正的janky版本的用戶/通行證,沒有額外的好處(除了不必編寫處理用戶設置密碼操作的代碼)。更優雅的將是一個普通的用戶/通行證計劃。 – Cheekysoft

+0

@Cheekysoft我不希望投票可以追溯到用戶,但我希望用戶能夠改變他們的投票結果 - 這種計劃可以避免「登錄」,這可能會對投票產生懷疑匿名投票。 – vicatcu

+0

可能更好地調整問題以表明您想要(接近)完全匿名投票機制。只是隨機抽取,但妥協可能是臨時記錄每個投票,直到他們執行「鎖定」,然後刪除該關係並且不允許進一步的變化。 – Cheekysoft

回答

3

這是一個難題。一般來說,良好的電子投票系統是一個難題。有很多關於他們的文獻。一個好的開始是閱讀David Chaum可以找到的所有紙張:-)

您正在處理無記名投票要求。

正如您自己指出的那樣,您的系統具有重要的侷限性,但我認爲不可能做得更好。

問題是向選民分發祕密(代幣),使你,選舉權威,不知道誰得到了哪個祕密和所有的選民可以相信它。最後一部分是問題。選擇禮帽的實際會議可以完成這項工作,因爲選民可以目睹並證明你沒有作弊(看到他們被泄露的祕密)。我無法想象任何協議都可以讓你處於遠程位置並完成相同的工作。例如,你可以產生祕密,並將它們交給第三方,他們洗牌並將其交給選民,但是那麼每個人都必須信任第三方。再舉個例子,你可以通過匿名電子郵件地址分發祕密,但是你不能確保只有經過授權的選民才能獲得祕密。我在這裏看不到解決方案。即使帽子協議是脆弱的,除非持有帽子的人從第一個選秀到最後一個選秀持續觀看。

因此,事情是,既然你是親自見面,爲什麼不只是在同一時間進行投票呢? (反對:在投票前比在投票時等會面可能會更方便......)

至少關於選民丟失標記的部分很容易回答:你不能給他們一個新的祕密。對他們太糟糕了。

順便說一下,還有另一個要求,你沒有解決:選民可驗證性。

在您的系統中,基本的選民可驗證性非常容易:只需在選舉後發佈所有的代幣和相應的投票。但是這可以讓選民在選舉前證明他們的投票是什麼(通過分享他們的代幣或在選舉之前爲其做出零知識承諾),他們不應該這樣做(防止選民強制和投票購買)。

+0

是的,不幸的是,這很複雜,你說得很對......我希望投票在會議背景之外發生的原因是因爲我的系統允許選民在選項發展時添加新選項並更改他們的投票 - 這是不容易實時處理;在會議上的創造力是一個時間... – vicatcu

+0

我認爲要做的事情是每個人都獲得一個可重複使用的祕密,並得到一個你必須出席至少一次會議;除非投票的所有成員證明他們的祕密在已發佈的投票清單中,否則我永遠不能懷疑所有投票的祕密都是「明眼人」發佈的......並且在那麼每個人都必須相信我不會操縱數據庫中的選票......呃這是重複的 – vicatcu

-2

當他們訪問該網站時,刪除一個帶有唯一ID的cookie。但是,如果他們清除了他們的餅乾,你就會敬酒。

+0

使用此解決方案,網站運營商知道並可以記錄每個cookie發給誰,這違反了無記名投票要求。 – Celada

+0

@Celada:不一定。他知道身份證投票的事實並不意味着他知道身份證的擁有者是誰。 –

+0

從這個問題引用:「不」,只有任何人「可以去投票」。這意味着你必須識別並認證屬於該組的成員的人,然後才能向他們發放令牌,對嗎? – Celada

0

一個解決方案可能是建立一個服務器端服務,當投票打開時它會自動向每個用戶發送一個隨機密鑰,這通常是通過一個在URL上有一個參數的鏈接完成的。這樣,當他們進入該網站時,它是匿名的,但每個人都必須有一個投票的關鍵。密鑰既將主題和爲用戶生成的隨機密鑰以神祕的方式結合起來,使其不易複製,而且還將密鑰存儲在服務器端進行驗證,以確保它僅被使用一次。我創建了一個使用此方法的輪詢系統。

+1

如果系統通過電子郵件發送密鑰,毫無疑問,幕後系統已將密鑰與電子郵件地址... – vicatcu

+0

這不是一個疑問,但它不需要與電子郵件地址相關聯。這聽起來像是一個非常懷疑的團體。不幸的是,沒有辦法真正有100%的隨機和可信的方式來做到這一點。使用電子郵件實際上是實現這一目標的最佳方式,因爲您可以通過所給出的主題和選項更改來跟蹤進度。 –