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