Zero-Knowledge-Proofs
為什麼以下不是離散日誌的 ZKP?
在查看教科書 ZKP 離散對數之前,我嘗試自己建構一個。這與教科書完全不同,我一直想知道它可能有什麼問題?(我無法反駁任何 ZKP 要求,所以我想我遺漏了一些東西)。
原來的問題:
給定 $ g,h \in \mathbb{Z}_p^x $ ( $ g $ 作為生成器),為知道的人提供一個 ZKP $ x \in \mathbb{Z}_p^x $ 這樣 $ g^x=h $ .
我的建議:
- 驗證者隨機選擇一個 $ r\in \mathbb{Z}_p^x $ 並發送 $ h^r $ 給證明者。
- 證明者發回它的最佳猜測 $ g^r $ , 表示 $ a $ .
- 驗證者斷言 $ a=g^r $ .
如果證明者確實知道 $ x $ 然後他會發送: $ a=(g^{rx})^{x^{-1}}=g^r $ .
如果證明者不知道 $ x $ 那麼,為了得到 $ a=g^r $ 從知道 $ g^{rx} $ 他必須解決離散對數 $ (g^r)^x $ 恢復 $ g^r $ ,即離散對數 $ g^x $ .
如果驗證者不誠實,我看不出他如何在發現方面獲得優勢 $ x $ .
我錯過了什麼?
好問題。請注意,“零知識”不僅僅意味著“不學習 x”。這意味著您根本不應該從協議中學到任何東西(這是用模擬範式形式化的)。
特別是您的協議不是針對惡意驗證者的 ZK。這很容易看出,因為驗證者可以選擇一些任意的組元素 $ f $ 代替 $ h^r $ 然後驗證者會學習 $ f^{1/x} $ . 這是驗證者不應該學習的一些額外資訊。