使用零知識證明,可以在保持在用戶匿名的同時驗證區(qū)塊鏈交易。
密碼學是區(qū)塊鏈技術最重要的組成部分之一,在過去幾年中得到了廣泛的應用。在這里,我們討論零知識證明(ZKP)——一種與密碼學密切相關的機制。接下來您將了解ZKP的一般概念和非交互式零知識證明,了解在區(qū)塊鏈中使用協(xié)議的一些用例,并從密碼學的角度深入了解ZKP。
什么是零知識證明?
零知識證明是當今應用密碼學中最抽象、最吸引人的概念之一。從可能用于核裁軍到為公共區(qū)塊鏈網(wǎng)絡提供匿名和安全的交易,零知識證明是密碼技術創(chuàng)新的一個深刻例子。
在密碼學中,零知識證明或零知識協(xié)議是一個方法,一個政黨(驗證)可以向另一方(校驗)證明他們知道一個值x。一個零知識證明的本質在于它可以揭示某些信息。挑戰(zhàn)在于如何在不披露信息本身或任何額外信息的情況下證明擁有這些信息是合理的。
零知識證明必須滿足以下三個參數(shù):
· 完整性。如果這個陳述是真的,誠實的驗證者——正確地遵循協(xié)議的驗證者——將被誠實的驗證者說服。
· 可靠性。如果陳述是假的,沒有任何作弊證明可以說服誠實的驗證者它是真的。
· 零知識性。如果該語句為真,則除了該語句為真之外,驗證者不會學到任何東西。換句話說,僅僅知道語句(而不是秘密)就足以想象一個場景,表明驗證者知道秘密。這是通過每個驗證者都有一個模擬器來實現(xiàn)的,模擬器可以生成一個“看起來”是誠實的驗證者和普通驗證者之間交互的記錄。模擬器應該能夠生成文本,但只能訪問要證明的語句,而不能訪問驗證者本身。
完整性是更一般的交互式證明系統(tǒng)的性質。零知識的加法使驗證過程變成零知識的證明。
零知識證明不是數(shù)學意義上的證明,因為有很小的概率,即可靠誤差,一個作弊證明者能夠說服一個虛假陳述的驗證者。換句話說,零知識證明是概率證明而不是確定性證明。然而,有一些技術可以將可靠性錯誤降低到可以忽略的值。
ZKP的一般結構
零知識證明的一般結構包括參與者a和參與者b之間的三個連續(xù)動作。這些動作被稱為目擊、挑戰(zhàn)和回應。
見證人 。A知道這個秘密的事實決定了一些問題,這些問題總是可以被A正確地回答。首先,A從集合中隨機選擇任何問題并計算一個證明。然后,A將證明發(fā)送給B。
A隨機選擇一個問題并將證明發(fā)送給B。
挑戰(zhàn)。然后,B從集合中選擇一個問題,讓A回答。
B隨機選擇一個問題,讓A回答。
響應。A計算答案并將其發(fā)送回B。
A計算出答案并發(fā)送給B,
接收到的答案允許B檢查A是否真的知道這個秘密。
這個過程可以重復很多次,直到A猜測而不是知道正確答案的概率變得足夠低。
為了說明ZKP在實踐中是如何工作的,維基百科引用了 Ali Baba山洞的故事,這個故事最初是由Jean-Jacques Quisquater發(fā)表的。在這個例子中,Peggy和Victor扮演了驗證者。
在這個故事里,洞的形狀像一個圓環(huán)。入口在左邊,有一扇神奇的門擋住了右邊。Peggy想向Victor證明她知道打開魔法門的秘密詞。然而,Peggy不想透露這個秘密詞。
Victor在外面等著,Peggy選擇了一條路來證明Peggy知道這個秘密單詞,他們在洞口的左右兩邊做了記號,分別是a和b。在Victor的視線之外,Peggy沿著A或b路走著。Victor走進山洞,喊著A或b路的名字,他想讓Peggy回去。既然Peggy真的知道這個秘密,如果需要的話,她可以很容易地打開魔法門,走Victor選擇的那條路回到入口。
如果Peggy現(xiàn)在知道了這個秘密字,她只有在Victor叫出她進去后走的那條路的時候,才能從門口回到門口。因為Victor選擇的路徑是隨機的,Peggy不知道關鍵字的概率是1/2。如果你重復這個過程,那么概率(?)^ k。通過這種方式,例如,重復這個過程20次就足以證明Peggy知道關鍵字。
Peggy回到入口時走的是維克多喊出來的那條路。如果Victor把一切都記錄在相機里,拍攝下來的視頻就不會成為其他任何一方的證據(jù),因為他們可以事先商定Peggy要去哪里。這意味著她可以在不知道關鍵字本身的情況下找到正確的方法。
正如我們所看到的,示例滿足以下屬性:完整性、可靠性和零知識。
注意,ZKP需要用戶之間的交互。雖然在單輪和常量協(xié)議中交互的數(shù)量很少,但是兩個用戶必須同時參與。
一個非交互式ZKP
考慮這樣一種情況,用戶P和V都是數(shù)學家,他們使用普通(蝸牛)郵件彼此通信。數(shù)學家P想周游世界,向數(shù)學家V證明新的定理,而不揭示證明的本質。在這個場景中,我們需要提出一些非交互式協(xié)議,因為數(shù)學家P可能沒有固定的地址,并且可能在收到下一個答案之前移動。
Blum、Feldman和Micali提出了一種非交互式ZKP,其中用戶P和V有一個共享的密鑰,這足以證明P在不泄露信息本身的情況下知道一些秘密信息。
與常規(guī)的零知識證明不同,非交互式ZKP的一般結構只包含參與者P和V之間的單個動作,而這個動作是一個目擊者。
P將秘密信息作為參數(shù)傳遞給一個特殊的函數(shù)——“make a proof”(見下圖)。輸出是“證明”的某個值。
ZKP可以應用在哪里?
身份驗證系統(tǒng)。ZKP證明的研究是由身份驗證系統(tǒng)推動的,其中一方希望通過一些秘密信息(如密碼)向另一方證明其身份,但不希望另一方了解任何關于該秘密的信息。
道德行為。ZKP在加密協(xié)議中的一個用例是在保持隱私的同時強制執(zhí)行誠實的行為。粗略地說,這個想法是強迫用戶使用ZKP來證明它的行為是符合協(xié)議的。由于可靠性,我們知道用戶必須誠實行事才能提供有效的證明。由于零知識,我們知道用戶在提供證據(jù)的過程中不會損害其秘密的隱私。
機密性。ZKP的另一個用例是需要保密的交易??紤]一個簡單的公共區(qū)塊鏈(例如以太坊),它與某種加密貨幣或令牌相關聯(lián)。當用戶之間發(fā)生通常的交易時,區(qū)塊鏈記錄詳細的傳輸信息:誰、向誰傳輸以及傳輸多少。因此,如果您知道特定的交易地址或用戶地址,您可以做出一些財務結論。對于當今的企業(yè)來說,為某些交易保留一些細節(jié)是至關重要的。在這種情況下,ZKP可以隱藏交易細節(jié),并識別它們對于添加到新塊是有效的。(區(qū)塊鏈的一個例子是Zcash。)
檢查個人信息。如果你想從銀行貸款,有必要提供收入證明。此證書包含機密信息。在這種情況下,您的一些個人數(shù)據(jù)將對其他人開放,這是我們希望避免的。銀行只要知道一個人的收入是償還貸款的最低要求就足夠了。
我們可以實現(xiàn)一個分布式系統(tǒng),其中每個用戶都有一個包含一些個人數(shù)據(jù)的特殊加密數(shù)字標識符。在這個系統(tǒng)中,為了獲得貸款,你可以從你的公司獲得相應的數(shù)字收入證明,其合法性是加密的,很容易檢查。然后你可以申請貸款。然后,銀行可能會核實你使用ZKP的最低收入要求,沒有必要透露敏感的細節(jié)。其中的一個例子是HyperledgerIndy。
Indy的點對點賬外代理交互匿名。有時候,在區(qū)塊鏈上匿名是必要的。例如,在沒有公開您的身份的情況下進行交易或沒有連接的交易。用戶還可以進行多個交易,同時對身份保密。
出于這些目的,您可以從版本1.2開始使用Hyperledger Fabric,該版本支持一種特殊的基于zkp的加密協(xié)議-身份混合器(Idemix)。
ZKP是一種強大的加密方法,它在區(qū)塊鏈中的應用似乎很有前途,因為現(xiàn)有的區(qū)塊鏈技術可以對ZKP進行調整,以滿足關注數(shù)據(jù)隱私的特定業(yè)務需求。
評論