[原創(chuàng)?區(qū)塊鏈關(guān)鍵概念必讀系列-07]一分鐘教你弄懂零知識證明


一、背景與概念

“零知識證明”其實(shí)并不是一個新鮮概念。早在1985年,它就由S.Goldwasser、S.Micali及C.Rackoff提出了。如果要論年齡的話,它可能比很多幣圈人士都要老。只不過,那時候停留在數(shù)學(xué)理論階段,除了科學(xué)界,并沒有被很多人熟知。近年來,隨著區(qū)塊鏈的火爆以及零知識證明在其中的應(yīng)用,這個概念才逐漸進(jìn)入大眾視野。

所謂零知識證明(Zero-Knowledge Proof),實(shí)質(zhì)上是一種涉及兩方或更多方的協(xié)議,即兩方或更多方完成一項任務(wù)所需采取的一系列步驟。證明者向驗證者證明并使其相信自己知道或擁有某一消息,但證明過程不能向驗證者泄漏任何關(guān)于被證明消息的信息。簡單理解,就是證明者能夠在不向驗證者提供任何有用信息的情況下,讓驗證者相信你。


二、案例

如果沒有相關(guān)理論基礎(chǔ),很多人第一眼看到上面的概念解釋,可能會覺得“這不就是忽悠嘛”。但其實(shí),零知識證明是一種科學(xué)的密碼學(xué)原理,有嚴(yán)密的數(shù)學(xué)基礎(chǔ)。這里,一個有意思的小故事可以幫助大家理解這個概念。

有一天,山神被強(qiáng)盜抓住了,強(qiáng)盜向山神拷問進(jìn)入山洞的咒語。面對強(qiáng)盜的逼迫,山神想:如果我把咒語告訴了他們,他們就會認(rèn)為我沒有價值了,就會殺了我;但如果我死活不說,他們也會認(rèn)為我沒有價值而殺了我。怎樣才能做到既讓他們確信我知道咒語,但又一丁點(diǎn)咒語內(nèi)容也不泄露給他們呢?

這個問題很糾結(jié),山神思考良久后,想了一個好辦法。他對強(qiáng)盜說:“你們在離開我一箭遠(yuǎn)的地方,用弓箭指著我,當(dāng)你們舉起右手我就念咒語打開石門,舉起左手我就念咒語關(guān)上石門,如果我做不到或逃跑,你們就用弓箭射死我?!?/p>

強(qiáng)盜們同意了,因為這個方案不僅對他們沒有任何損失,而且還能幫助他們搞清楚山神到底是不是真的知道咒語這個問題。山神也沒有損失,因為處于一箭之地的強(qiáng)盜們聽不到他念的咒語,不必?fù)?dān)心泄露了秘密,同時他又確信自己的咒語有效,也不會發(fā)生被射死的杯具。

強(qiáng)盜舉起了右手,只見山神的嘴動了幾下,石門果真打開了,強(qiáng)盜舉起了左手,山神的嘴動了幾下后石門又關(guān)上了。強(qiáng)盜還是有點(diǎn)不信,說不準(zhǔn)這是巧合呢,他們不斷地?fù)Q著節(jié)奏舉右手舉左手,石門跟著他們的節(jié)奏開開關(guān)關(guān),最后強(qiáng)盜們想,如果還認(rèn)為這只是巧合,自己未免是個傻瓜,那還是相信了山神吧。

這樣,山神既沒有告訴強(qiáng)盜進(jìn)入山洞石門的咒語,同時又向強(qiáng)盜們證明了,他是知識這個咒語的。

這就是零知識證明的一個重要實(shí)例。

三、零知識證明的屬性與一般過程

通過山神被抓的故事,我們可以看出,零知識證明必須滿足以下3個屬性:

(1)正確性,即證明者無法欺騙驗證者。換句話講,如果山神不知道咒語,那么,他能瞞過強(qiáng)盜的概率會很低,因為強(qiáng)盜只要多試幾次就知道他有沒有咒語了。

(2)完備性,即驗證者有足夠大的理由相信證明者。在故事中,山神真的知道咒語,所以他可以像故事中講的一樣,做足夠多的實(shí)驗,讓強(qiáng)盜相信他不是因為巧合蒙對了一次,而是確確實(shí)實(shí)知道咒語。如果他不知道咒語,多做幾次實(shí)驗就可能露餡兒,強(qiáng)盜就沒有理由相信他知道咒語。

(3)零知識性。驗證者無法獲取任何額外的知識。強(qiáng)盜雖然知道山神有正確的咒語,但并不知道咒語是什么。

這三個屬性是不可分離的,必須同時滿足。因為山神給強(qiáng)盜證明他知道咒語,可能存在一種情況——他試了很多次都是巧合,存在證明者欺騙驗證者的情況。但只要實(shí)驗重復(fù)得足夠多,或者一直重復(fù)下去,就會讓這種巧合(小概率事件)的可能性降到很低,甚至忽略不計。


四、應(yīng)用

在區(qū)塊鏈中,零知識證明已應(yīng)用其中,最常見是圖靈機(jī)的計算模型(后續(xù)會專門細(xì)講)。另一個應(yīng)用是ZCash,用零知識證明來實(shí)現(xiàn)交易過程的匿名性。

相比于ZCash而言,比特幣的轉(zhuǎn)賬有一個特點(diǎn),那就是不匿名。只要我們知道了比特幣地址,任何人都可以查到它的所有交易行為信息,比如從誰那里收了幣,又轉(zhuǎn)給了誰,一清二楚。這對于某些領(lǐng)域,比如反洗錢,當(dāng)然是極好的,但對于另一些人,可能就不那么討人喜歡了。比如一個普通人,花錢去買什么東西,給誰買了禮物,他可能并不想讓別人知道。如果大家都能隨意查到,他會覺得自己的隱私權(quán)受到了侵犯。ZCash的零知識證明,就解決了這部分用戶的需求。

在比特幣交易中,如果A有3個比特幣,要給B轉(zhuǎn)賬1個比特幣,那么在賬本上就會記錄著:A轉(zhuǎn)出了兩筆比特幣,一筆為1比特幣,轉(zhuǎn)給了B;另一筆為2比特幣,轉(zhuǎn)給了自己。

那么,利用“零知識證明”的ZCash是怎么做到實(shí)現(xiàn)匿名交易的呢?

如果A有3個幣,要給B轉(zhuǎn)賬1個幣。A會先把1個幣分成若干份隨機(jī)放進(jìn)一個“混合熔爐”里,并指定B的接收地址。在這個熔爐里,同時在里面的還有其他人(交易方)放入的若干份幣。這些幣又被熔爐隨機(jī)拆分,再隨機(jī)組合,然后從被“大雜燴”的幣中若干份,合成為1個幣,轉(zhuǎn)移到B的地址中。

這樣的話,經(jīng)過一系列 “混合”,我們只能知道A給了B一個幣,卻無法知道A的交易地址等信息,因為B受到的幣實(shí)際上是多個交易者“雜燴”而成,并不能準(zhǔn)確識別它來自哪里。

五、零知識證明的優(yōu)缺點(diǎn)和意義

通過以上解釋,我們不難看出,零知識證明最大的優(yōu)點(diǎn)就是保護(hù)了交易的匿名性,減少了雙方交換的信息。對匿名隱私保護(hù)的更徹底,可以有效解決很多問題。

但這并不意味著零知識證明就沒有缺陷,它也可能導(dǎo)致一些問題。

首先,通過零知識證明實(shí)現(xiàn)匿名性,所需要的證明信息和計算量比較多。從上面比特幣和ZCash的交易過程中我們就可以看出這點(diǎn),熔爐再造需要大量的拆分和重新組合。這就有可能帶來大量的資源浪費(fèi),也導(dǎo)致了它的可擴(kuò)展性面臨挑戰(zhàn)。

另外,匿名性可能會被某些不法分子利用,增加監(jiān)管難度。比特幣透明交易的技術(shù),可以用做很好的反洗錢工具,而ZCash恰好相反,可能為洗錢提供大量的便利。另外,像黃、賭、毒這些產(chǎn)業(yè),如果利用零知識證明,將會給追蹤和監(jiān)管帶來非常多的困難,造成一些社會問題。

所以,零知識證明本身有優(yōu)點(diǎn)也有缺點(diǎn),關(guān)鍵看應(yīng)用于什么領(lǐng)域。未來零知識證明會在區(qū)塊鏈中有怎樣的發(fā)展,一方面取決于從業(yè)者如何利用它,另一方面也取決于監(jiān)管部門如何對待。當(dāng)然,如果能夠出現(xiàn)一種彌補(bǔ)零知識證明的缺陷的新技術(shù),那將為零知識證明的應(yīng)用打開廣闊的空間。


參考文獻(xiàn):

(1)區(qū)塊鏈解讀-零知識證明?- CSDN博客

(2)一文讀懂區(qū)塊鏈之?-?零知識證明?- 區(qū)塊網(wǎng)

(3)區(qū)塊鏈行業(yè)詞典-甲子光年

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容