見證人 。A知道這個秘密的事實決定了一些問題,這些問題總是可以被A正確地回答。首先,A從集合中隨機選擇任何問題並計算一個證明。然後,A將證明傳送給B。
Victor在外面等著,Peggy選擇了一條路來證明Peggy知道這個秘密單詞,他們在洞口的左右兩邊做了記號,分別是a和b。在Victor的視線之外,Peggy沿著A或b路走著。Victor走進山洞,喊著A或b路的名字,他想讓Peggy回去。既然Peggy真的知道這個秘密,如果需要的話,她可以很容易地開啟魔法門,走Victor選擇的那條路回到入口。
如果Peggy現在知道了這個秘密字,她只有在Victor叫出她進去後走的那條路的時候,才能從門口回到門口。因為Victor選擇的路徑是隨機的,Peggy不知道關鍵字的概率是1/2。如果你重複這個過程,那麼概率(½)^ k。透過這種方式,例如,重複這個過程20次就足以證明Peggy知道關鍵字。
Peggy回到入口時走的是維克多喊出來的那條路。如果Victor把一切都記錄在相機裡,拍攝下來的影片就不會成為其他任何一方的證據,因為他們可以事先商定Peggy要去哪裡。這意味著她可以在不知道關鍵字本身的情況下找到正確的方法。
正如我們所看到的,示例滿足以下屬性:完整性、可靠性和零知識。
注意,ZKP需要使用者之間的互動。雖然在單輪和常量協議中互動的數量很少,但是兩個使用者必須同時參與。
一個非互動式ZKP
考慮這樣一種情況,使用者P和V都是數學家,他們使用普通(蝸牛)郵件彼此通訊。數學家P想周遊世界,向數學家V證明新的定理,而不揭示證明的本質。在這個場景中,我們需要提出一些非互動式協議,因為數學家P可能沒有固定的地址,並且可能在收到下一個答案之前移動。
Blum、Feldman和Micali提出了一種非互動式ZKP,其中使用者P和V有一個共享的金鑰,這足以證明P在不洩露資訊本身的情況下知道一些秘密資訊。
與常規的零知識證明不同,非互動式ZKP的一般結構只包含參與者P和V之間的單個動作,而這個動作是一個目擊者。
P將秘密資訊作為引數傳遞給一個特殊的函式——“make a proof”(見下圖)。輸出是“證明”的某個值。
ZKP可以應用在哪裡?
身份驗證系統。ZKP證明的研究是由身份驗證系統推動的,其中一方希望透過一些秘密資訊(如密碼)向另一方證明其身份,但不希望另一方瞭解任何關於該秘密的資訊。
道德行為。ZKP在加密協議中的一個用例是在保持隱私的同時強制執行誠實的行為。粗略地說,這個想法是強迫使用者使用ZKP來證明它的行為是符合協議的。由於可靠性,我們知道使用者必須誠實行事才能提供有效的證明。由於零知識,我們知道使用者在提供證據的過程中不會損害其秘密的隱私。
機密性。ZKP的另一個用例是需要保密的交易。考慮一個簡單的公共區塊鏈(例如以太坊),它與某種加密貨幣或令牌相關聯。當使用者之間發生通常的交易時,區塊鏈記錄詳細的傳輸資訊:誰、向誰傳輸以及傳輸多少。因此,如果您知道特定的交易地址或使用者地址,您可以做出一些財務結論。對於當今的企業來說,為某些交易保留一些細節是至關重要的。在這種情況下,ZKP可以隱藏交易細節,並識別它們對於新增到新塊是有效的。(區塊鏈的一個例子是Zcash。)
檢查個人資訊。如果你想從銀行貸款,有必要提供收入證明。此證書包含機密資訊。在這種情況下,您的一些個人資料將對其他人開放,這是我們希望避免的。銀行只要知道一個人的收入是償還貸款的最低要求就足夠了。
我們可以實現一個分散式系統,其中每個使用者都有一個包含一些個人資料的特殊加密數字識別符號。在這個系統中,為了獲得貸款,你可以從你的公司獲得相應的數字收入證明,其合法性是加密的,很容易檢查。然後你可以申請貸款。然後,銀行可能會核實你使用ZKP的最低收入要求,沒有必要透露敏感的細節。其中的一個例子是HyperledgerIndy。
Indy的點對點賬外代理互動匿名。有時候,在區塊鏈上匿名是必要的。例如,在沒有公開您的身份的情況下進行交易或沒有連線的交易。使用者還可以進行多個交易,同時對身份保密。
出於這些目的,您可以從版本1.2開始使用Hyperledger Fabric,該版本支援一種特殊的基於zkp的加密協議-身份混合器(Idemix)。
ZKP是一種強大的加密方法,它在區塊鏈中的應用似乎很有前途,因為現有的區塊鏈技術可以對ZKP進行調整,以滿足關注資料隱私的特定業務需求。
更多區塊鏈資訊:www.qukuaiwang.com.cn/news