Public-Key

構造 Schnorr 協議只能由指定驗證者進行驗證

  • April 14, 2020

目前我有如下 DLP, $ y = g^x \bmod p $ ,我可以使用 Schnorr 協議輕鬆建構知識證明。

但我想把它變成一個由兩方組成的系統,公鑰和私鑰如下。

  • 證明者有私鑰 $ x_p $ 和公鑰 $ y_p = g^{x_p} $
  • 驗證者有私鑰 $ x_v $ 和公鑰 $ y_p = g^{x_v} $

是否有可能我可以建構一個證明者知道的知識證明 $ x $ 在 $ y = g^x \bmod p $ 並且只能由指定的驗證者使用公鑰進行驗證 $ y_p $ ?

我嘗試將活板門承諾添加到非互動式 schnoor 協議中。陷阱門協議通過公鑰為選定的驗證者提供後門。

密碼設置

  • $ y=g^x $ 在哪裡 $ r $ 是要證明的秘密
  • $ y’=g^{x’} $ 在哪裡 $ y $ 是驗證者的公鑰,並且 $ x’ $ 是驗證者的私鑰

構造證明

  • 挑選 $ w $ , $ r $ , $ d $ 隨機進入 $ Z_q $
  • $ c=g^wy’^r $
  • $ t=g^d $
  • $ h=hash_q(c, t) $
  • $ s=d + (h + w)x $
  • $ (w, r, t, s) $ 是證明並發送給驗證者

確認

  • $ c=g^w y’^r $
  • $ h = hash_q(c, t) $
  • 核實 $ g^s = ty^{h+w} $

模擬成績單

  • 挑選 $ \alpha $ , $ \beta $ 隨機進入 $ Z_q $
  • $ c=g^\alpha $
  • $ t=g^sy^{-\beta} $
  • $ h=hash_q(c ,t) $
  • $ r = (\alpha - w)(-x’) $
  • $ w = \beta - h $
  • $ (w, r, t, s) $ 是成績單

由於活板門承諾,指定驗證者( $ y’ $ ) 可以創建一個有效的證明。但只有指定的驗證者知道證明來自他自己或證明者。對於其他人,他們無法判斷證明來自指定的驗證者或證明者。只有指定的驗證者或證明者知道證明是由誰創建的。因此,只有指定的驗證者才能在該協議中被說服。

所以這個協議,可以讓指定的驗證者知道 Schnorr 協議中的 r。驗證者不能將證明轉移給其他人,只有他可以被說服。

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