Protocol-Design
我在使用姚明的亂碼電路時有沒有犯過明顯的錯誤?
我想使用亂碼電路來提供一種服務,允許人們在不需要向我的伺服器或其他任何人透露他們的投票的地方投票。假設我有安全的方法來生成亂碼電路、對輸入執行不經意傳輸以及評估電路。我們還假設每個投票的人都登錄了我的服務,他們有一個有效的公鑰/私鑰對,並且伺服器有一個他們的公鑰副本。我將使用它,因為在這種情況下,選民將無法輕鬆地相互連接,並且必須通過伺服器進行通信。
這只是為了一個學校項目/我自己的興趣。我將非常明確地宣傳該項目不是由安全專家完成的。
這就是我設想的一般資訊流的方式:
- 伺服器知道投票者的數量並擁有所有投票者的 ID(例如,他們對服務的登錄),然後製作一個亂碼電路來計算投票結果。
- 伺服器將此電路提供給每個選民,以及將參與的每個其他選民的公鑰。
- 每個選民都使用不經意的傳輸從伺服器檢索他們的輸入。
- 然後,每個選民都用其他每個選民的公鑰加密他們的輸入。然後他們將加密的輸入發送回伺服器。
- 然後,伺服器通過向每個選民提供使用接收選民的公鑰加密的版本,將每個選民的輸入分發給每個選民。
- 每個選民都用他們的私鑰解密其他人的輸入。
- 每個選民都會評估亂碼電路。
- 選民將電路的輸出發送到伺服器。
- 如果伺服器注意到任何輸出不同,它就會廣播該投票是錯誤的。否則,它會廣播投票結果。
- 每個選民檢查廣播的結果是否與他們計算的結果相同。
我在這裡錯過了什麼明顯的東西嗎?你有什麼方法可以提高效率嗎?
不幸的是,您的問題的答案是肯定的。你犯了明顯的錯誤。特別是姚明的亂碼電路只適合兩方計算,這裡要進行多方計算。您的整個方法出現的一個大問題是,如果伺服器與其中一位選民勾結,那麼他們可以了解所有各方的輸入。(我沒有看過你提議的工作方式的所有細節,因為這個固有的問題在一開始就出現了。)
有一個協議可以將 Yao 亂碼電路推廣到多方設置;它被稱為BMR。但是,它的成熟度較低,實施起來也比較困難。
如果您希望做一個簡單的投票協議,人們只投票贊成和反對,並且您只想知道有多少人投了贊成票,那麼使用像 Paillier 這樣的加法同態加密方案是可行的方法。但是,就像密碼學中的所有內容一樣,如果您嘗試自己設計它,就很難做到這一點。您應該查看有關投票協議的論文,然後選擇其中之一來實施。
或者,如果是用於學校項目,則考慮一個有趣的兩方應用程序並使用亂碼電路。