具有獨特匿名聲明的組成員身份
是否有可能完成以下方案?
有一個伺服器(S)和許多客戶端。
每個客戶端都向 S 註冊,暴露其真實身份;S 將真實身份資訊保存在其數據庫中,並與每個客戶端執行一些密鑰/標識符交換(可能是 DHE 或 RSA 之類的東西)。
然後,有人向 S 發送聲明,以便 S 能夠判斷此聲明來自其中一個已註冊的客戶,但無法辨識來自哪個客戶(類似於分解大素數)。同時S應該能夠保存它並且只接受來自剩餘客戶端的另外2個索賠(即已經發送索賠的客戶不能再次發送它)。
任何客戶都不應該擁有這樣的資訊,如果洩露,可能會使整個方案失效。換句話說,任何單個客戶的標識符的暴露只會危及該客戶提出索賠的能力。
案例:3 個客戶(X、Y 和 Z)向 S 註冊
。X 向 S 提出索賠
。S 驗證它來自其中一個客戶並保存,通知客戶該索賠已被接受。S 不知道該聲明來自 X。此時,S 只知道 3 個聲明中的 2 個仍然存在。
Z提出了自己的主張。S 驗證並接受它。
此時 S 知道只剩下 1 個索賠。
X 再次發送它的聲明。S 發現它已經被認領並拒絕它。
Y 向它發送索賠。S 驗證並接受它。
此時,S 知道所有聲明都已提出。
如果“S 為他們每個人分配了一個唯一標識符”,那麼 S 可以
使用這些標識符中的每一個執行聲明算法,以找出給定聲明來自誰。
,該承諾是由伺服器分配的標識符。
2015 年發表了一篇論文,描述了一個名為 Anonize 的方案來做到這一點。
它似乎是圍繞客戶使用的專門設計的非互動式零知識證明 (NIZKPoK) 協議建構的。
首先,進行註冊,從而客戶端向偽隨機函式的種子發送承諾。伺服器發回給它的是伺服器對該承諾的簽名和客戶端的 id,它成為該客戶端的****主令牌。然後客戶端使用種子生成一次性令牌。最後,要送出響應,客戶必須通過 NIZK 證明它知道某個主令牌、調查指揮員的簽名授權某些客戶進行調查,並且它確實通過它知道的種子計算了一次性令牌。
值得注意的是,該方案實際上可以在單個伺服器上進行多個*臨時調查,而無需讓伺服器的操作員有機會在多個調查中跟踪客戶。*這是通過使用每個調查都不同的調查 id來生成一次性令牌來實現的。另一方面,客戶端只能為每個調查 ID 生成一個一次性令牌,這意味著它只能送出一個答案。
可以在此處找到可用的線上實現,並且在此處託管開發參考實現。