區(qū)塊鏈中的“零知識(shí)證明”究竟是什么?
了解過(guò)區(qū)塊鏈的讀者一定看到或聽(tīng)到過(guò)“零知識(shí)證明”這個(gè)詞。其中ZCash就是利用了“零知識(shí)證明”,來(lái)保證其交易過(guò)程的匿名性。
1、概念
那么什么是“零知識(shí)證明”呢?
零知識(shí)證明,英文名為Zero-Knowledge Proof,是由S.Goldwasser、S.Micali以及C.Rackoff在20世紀(jì)80年代初提出的。它指的是證明者(被驗(yàn)證者)能夠在不向驗(yàn)證者提供任何有用的信息的情況下,使驗(yàn)證者相信某個(gè)論斷是正確的。零知識(shí)證明實(shí)質(zhì)上是一種涉及兩方或更多方的協(xié)議,即兩方或更多方完成一項(xiàng)任務(wù)所需采取的一系列步驟。
2、例子
是不是覺(jué)得語(yǔ)言太“官方”了,看不懂?網(wǎng)上有一個(gè)被很多人引用的例子,即“阿里巴巴的零知識(shí)證明”,可以幫助我們理解“零知識(shí)證明”的原理。
一天,阿里巴巴被強(qiáng)盜抓住了,強(qiáng)盜向阿里巴巴拷問(wèn)進(jìn)入山洞的咒語(yǔ)。面對(duì)強(qiáng)盜,阿里巴巴是這么想的:如果我把咒語(yǔ)告訴了他們,他們就會(huì)認(rèn)為我沒(méi)有價(jià)值了,就會(huì)殺了我省糧食;但如果我死活不說(shuō),他們也會(huì)認(rèn)為我沒(méi)有價(jià)值而殺了我。怎樣才能做到既讓他們確信我知道咒語(yǔ),但又一丁點(diǎn)咒語(yǔ)內(nèi)容也不泄露給他們呢?
這的確是一個(gè)令人糾結(jié)的問(wèn)題,但阿里巴巴想了一個(gè)好辦法,當(dāng)強(qiáng)盜向他拷問(wèn)打開(kāi)山洞石門的咒語(yǔ)時(shí),他對(duì)強(qiáng)盜說(shuō):“你們?cè)陔x開(kāi)我一箭遠(yuǎn)的地方,用弓箭指著我,當(dāng)你們舉起右手我就念咒語(yǔ)打開(kāi)石門,舉起左手我就念咒語(yǔ)關(guān)上石門,如果我做不到或逃跑,你們就用弓箭射死我?!?/p>
強(qiáng)盜們當(dāng)然會(huì)同意,因?yàn)檫@個(gè)方案不僅對(duì)他們沒(méi)有任何損失,而且還能幫助他們搞清楚阿里巴巴到底是不是真的知道咒語(yǔ)這個(gè)問(wèn)題。阿里巴巴也沒(méi)有損失,因?yàn)樘幱谝患氐膹?qiáng)盜們聽(tīng)不到他念的咒語(yǔ),不必?fù)?dān)心泄露了秘密,同時(shí)他又確信自己的咒語(yǔ)有效,也不會(huì)發(fā)生被射死的杯具。
強(qiáng)盜舉起了右手,只見(jiàn)阿里巴巴的嘴動(dòng)了幾下,石門果真打開(kāi)了,強(qiáng)盜舉起了左手,阿里巴巴的嘴動(dòng)了幾下后石門又關(guān)上了。強(qiáng)盜還是有點(diǎn)不信,說(shuō)不準(zhǔn)這是巧合呢,他們不斷地?fù)Q著節(jié)奏舉右手舉左手,石門跟著他們的節(jié)奏開(kāi)開(kāi)關(guān)關(guān),最后強(qiáng)盜們想,如果還認(rèn)為這只是巧合,自己未免是個(gè)傻瓜,那還是相信了阿里巴巴吧。
這樣,阿里巴巴既沒(méi)有告訴強(qiáng)盜進(jìn)入山洞石門的咒語(yǔ),同時(shí)又向強(qiáng)盜們證明了,他是知識(shí)這個(gè)咒語(yǔ)的。
這就是零知識(shí)證明的一個(gè)重要實(shí)例。
3、原理
那么,利用了區(qū)塊鏈技術(shù)的ZCash,就是利用“零知識(shí)證明”實(shí)現(xiàn)的匿名性。
相對(duì)于ZCash來(lái)說(shuō),比特幣的轉(zhuǎn)賬并不是完全匿名的,只要知道了一個(gè)比特幣地址,任何人都可以通過(guò)https://blockexplorer.com/ 這個(gè)網(wǎng)站,查到這個(gè)地址的所有“消費(fèi)”行為和關(guān)聯(lián)。比如給誰(shuí)轉(zhuǎn)了賬,又從誰(shuí)(的比特幣地址)那里收到過(guò)轉(zhuǎn)賬,在以區(qū)塊鏈技術(shù)為基礎(chǔ)的“賬本”上都“本本份份”地記錄著。
例如A有3個(gè)BTC,要給B轉(zhuǎn)賬1個(gè)BTC,那么在賬本上就會(huì)記錄著:A轉(zhuǎn)出了兩筆BTC,一筆為1BTC,轉(zhuǎn)給了B;另一筆為2BTC,轉(zhuǎn)給了自己。
那么利用了“零知識(shí)證明”的ZCash是怎么做到的所謂匿名呢?
ZCash的代幣為ZEC。同樣假設(shè)A有3個(gè)ZEC,要給B轉(zhuǎn)賬1個(gè)ZEC。
首先,A會(huì)將自己的1個(gè)ZEC分成若干份隨機(jī)投入一系列的“混合容器”中,指定接收方B的地址,同時(shí)混入的時(shí)候還有其他交易方輸出的若干份ZEC。這些ZEC又被混合容器隨機(jī)拆分,再?gòu)倪@些被拆分生成的所有的ZEC中取出合計(jì)為1ZEC的若干份,轉(zhuǎn)移到B的地址中,同時(shí)在發(fā)送的時(shí)間上也可以設(shè)置一定的延遲[3]。
其中的“混合容器”,就是一條“公有鏈”。經(jīng)過(guò)這條公有鏈一系列的“混幣”過(guò)程,就使得包括交易地址和具體金額在內(nèi)的交易信息變得無(wú)從考證了。
當(dāng)然,雖然ZCash以其匿名性使其市場(chǎng)熱度一度很高,但其仍面臨諸多障礙與“原罪”。
首先,要實(shí)現(xiàn)匿名性,其所需要的證明信息所花費(fèi)的計(jì)算資源就非常多,帶來(lái)了大量的資源浪費(fèi),也導(dǎo)致了其可擴(kuò)展性面臨巨大挑戰(zhàn)。
另外,匿名性會(huì)帶來(lái)大量的額外監(jiān)管問(wèn)題,一旦有不法份子利用其用戶黃、賭、毒等違法領(lǐng)域,將會(huì)給追蹤與監(jiān)管帶來(lái)非常大的挑戰(zhàn),造成一系列社會(huì)問(wèn)題。