Zero-Knowledge-Proofs
Schnorr 辨識協議安全證明
我閱讀了關於 Schnorr 辨識協議對抗冒充攻擊的安全證明。為了便於理解,讓我總結一下協議:給定組 $ G $ 帶發電機 $ g $ . 驗證者由證明者的公鑰初始化 $ g^a $ ,其中秘密對應方的知識將由證明者證明。協議執行如下:
- 證明者隨機生成 $ a_t\in G $ 並發送 $ g^{a_t} $ 驗證者
- 驗證者通過發送隨機數來響應 $ c $ 給證明者。
- 證明者通過發送響應 $ a_z = a_t + c,a $
- 驗證者檢查是否 $ g^{a_z}\overset{?}{=}g^{a_t},(g^a)^c $
現在,安全證明的想法是:給定對手 $ \mathcal{A} $ 能夠發出有效的 $ a_z’ $ 針對任意公鑰 $ g^{a’} $ , 我們可以轉 $ \mathcal{A} $ 變成一個高效的 $ \mathrm{DLog},_g(g^{a’}) $ 甲骨文。
證明假設我們可以“倒帶”對手,使其發出 2 個不同的 $ a_z $ 是關於一個單一的 $ a_t $ . 我不明白這個假設。對我來說,這似乎是不完整的。如果我有不合作的對手怎麼辦?這不能變成 DLog 預言機,因為這樣的對手與知道密鑰的誠實證明者無法區分,從而破壞了零知識協議的屬性。所以這是一個完整的證據,我只是沒有得到,或者是惡意對手可能會在不破壞 DLog 的情況下破壞協議的事實 $ G $ 本質上無法證明?
重要的是要了解模擬器是非互動式機器;它不與證明者(或其他任何人)互動。它可以做的是模仿(或模擬)證明者和驗證者之間的真實互動,通過扮演雙方的角色並在內部“向自己發送消息”。但是不需要精確地模仿協議,只需要產生一個足夠接近協議實際執行的輸出的輸出*。*這就是為什麼它可以在內部多次重複協議,直到獲得滿意的輸出;證明者不需要“合作”,因為模擬器再次不與證明者互動。