Public-Key
構造 Schnorr 協議只能由指定驗證者進行驗證
目前我有如下 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。驗證者不能將證明轉移給其他人,只有他可以被說服。