Encryption

證明某人有權訪問其公鑰是已知組的一部分的私鑰

  • August 18, 2021

我是一個加密新手,希望能指出正確的方向。我見過一些像這樣的相關問題,但沒有一個能滿足我的要求。

假設簡氏論壇是一個大型社區,簡氏論壇的每個成員都有一個公鑰/私鑰對。公鑰與他們的個人資料相關聯,任何人都可以看到。

Bob’s Backpack Shop願意為Jane’s Forum的每一位成員免費送出一個背包,但Jane’s Forum的成員非常私密,不希望任何人,甚至Bob知道他們中的哪些人從Bob那裡訂購了背包。

Jane’s Forum 的成員是否有可能向 Bob 證明他們已在該論壇註冊並有資格獲得免費背包,而無需透露他們是哪個成員?

兩個使這更難的要求:

  1. 隨著時間的推移,新成員將繼續加入論壇,新成員也應該有資格獲得背包贈品。
  2. Bob 需要能夠驗證每個訂單來自一個唯一的論壇成員(每個成員只有資格獲得一個免費背包)。

作為獎勵,如果 Bob 能夠確定哪些成員已被踢出 Jane’s Forum,那就太好了。例如,也許 Bob 提供了 VPN 服務而不是背包,他想終止被踢出論壇的使用者的帳戶。

首先要解決獎勵部分:當您解決此類問題時,您通常會得到某種協議來證明聲稱的論壇使用者是目前論壇使用者集的一部分。噹噹前論壇使用者集發生變化時,您應該能夠重新執行此協議以驗證相關使用者是否仍然被授權。如果您對每個論壇使用者都有某種確定性的偽隨機標識符,這會更好。

對於實際的證明部分,我看到了兩種選擇:使用帶有散列和組成員資格證明的零知識證明,或者使用帶有 PRF 和組成員資格謂詞的兩方計算協議。如果沒有假名部分,這將是環簽名或組簽名的標準情況,證明您可以在組的一個公鑰下生成有效的簽名。作為替代方案,如果您可以說服論壇運營進行協作,則可以使用匿名憑據/不知情的令牌,例如Privacy Pass

棘手的部分是您需要讓服務提供商了解使用者的標識符,該標識符不能被使用者任意(重新)選擇,同時不允許足智多謀的攻擊者從標識符中辨識出確切的使用者. 我能想出的最好的解決方案是散列/PRF私鑰,無論如何都不應該是暴力破解的,因此不會洩露身份,同時防止其他使用者通過證明的AND部分互相冒充/協議。

具體來說,假設你有一個通用的零知識證明協議,你想證明使用者知道他們的私鑰 $ x $ 這樣 $ H=\operatorname{Hash}(x)\land \exists i: \operatorname{is-public-key-of}(\text{pk}_i,x) $ 持有在哪裡 $ {\text{pk}_i} $ 是目前論壇使用者公鑰的集合,並將散列函式建模為隨機預言機,以免成為洩漏輸入的那些“啞”散列函式之一。要證明的上述陳述的另一種表述是 $ H=\operatorname{Hash}(x)\land (\bigvee_i \operatorname{is-public-key-of}(\text{pk}_i,x)) $ 強調第二部分的“或”性質。這篇論文看起來對這種方法有幫助。

或者,通過使用安全的多方計算,在不同的假設下也應該可以實現相同的目標。特別是,您將在這裡定義一個從論壇使用者那裡獲取私鑰的功能 $ x $ ,來自服務提供商的靜態對稱隨機密鑰 $ k $ 然後作為公共輸入論壇公鑰的目前列表。然後該功能會輸出一點 $ b $ 表示是否 $ \bigvee_i \operatorname{is-public-key-of}(\text{pk}_i,x) $ 持有和一個隨機字元串 $ I=\operatorname{PRF}(k,x) $ 作為論壇使用者標識符。雖然我認為這兩個子操作都傾向於單獨擁有高效的專用協議,但不幸的是,我認為通常沒有一種好方法可以將這些協議的輸入“綁定”在一起,這樣使用者就不會使用一個子協議的不同輸入。為此,混合協議 2PC 框架可能是最佳選擇,例如ABYMOTIONABY 2.0,因為它們允許您使用算術運算進行私鑰-公鑰關係檢查以及使用二進制運算進行雜湊驗證/PRF 評估.

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