Zero-Knowledge-Proofs

零知識證明還是知識的零知識證明?

  • September 24, 2020

零知識證明是否( $ \mathrm{ZKP} $ ) 與知識的零知識證明 ( $ \mathrm{ZKPoK} $ ),但從今天開始,這些概念並沒有在我對密碼學的理解中造成問題。

那麼,兩者之間的真正區別是什麼(如果有的話) $ \mathrm{ZKP} $ 和一個 $ \mathrm{ZKPoK} $ ? 使用這兩個概念的人是否難以區分?

這是一個答案差異,可以部分回答我的問題,但我期待直接回答我的問題。

由於您參考了我對一個非常相似的問題的回答,我假設您已經閱讀過它,因此您知道 ZK 和 ZKPoK 之間在技術層面上的區別。不過,簡單回顧一下:標準的 ZK 證明了證人的存在,而 ZKPoK 證明了證明者實際上知道證人,這通過說存在一個可以從證明者的程式碼中恢復證人的有效提取器來形式化。實際上,“零知識證明”更好的全稱是“成員的零知識證明”(它證明了一個詞 $ x $ 屬於一種語言 $ L $ ,這相當於說該陳述存在證人“ $ x $ 屬於 $ L $ ”)。

要回答您的主要問題:

那麼,ZKP 和 ZKPoK 之間的真正區別(如果有的話)是什麼?使用這兩個概念的人是否難以區分?

技術層面存在明顯差異,這轉化為應用程序的明顯差異。首先,零知識證明被用作更大的加密對象構造中的組件(有數百個範例,但僅舉幾例:可驗證加密、惡意安全計算、匿名憑證等)。在 ZK 證明的許多應用中,知識屬性的證明實際上是至關重要的。例如,在可驗證的加密和匿名憑證中就是這種情況——但在惡意安全計算中卻不是這樣,標準的零知識就足夠了。

為了讓您直覺地了解差異何時重要,這裡有一條經驗法則:

  • 如果你只是想證明“某些屬性被驗證”(例如:“你發給我的密文包含一點”),零知識證明(成員資格)就足夠了。
  • 如果您需要以任何方式對證明者進行身份驗證,那麼您需要一個零知識的知識證明。

更直接地說:ZK 證明只說明了陳述(“陳述是真實的”)。ZK知識證明要強大得多,因為它還說明了證明者本人:“陳述是真實的,並且證明者知道它的證人”。這在任何“經過身份驗證的”加密協議中都是絕對重要的:您可以說授權使用者(對於您的應用程序中“授權”的任何定義)是認識見證人的使用者;然後,發送 ZKPoK 可以被視為對使用者進行身份驗證,而無需透露身份驗證憑證(這可以防止竊取他的身份)。

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