【区块链基础知识系列】 第8课 区块链之零知识证明
所謂零知識(shí)證明,指的是示證者在證明自己身份時(shí)不泄露任何信息,驗(yàn)證者得不到示證者的任何私有信息,但又能有效證明對(duì)方身份的一種方法。
從本質(zhì)上講,零知識(shí)證明是一種協(xié)議。所謂協(xié)議(Protocol),就是兩個(gè)或兩個(gè)以上的參與者為完成某項(xiàng)特定的任務(wù)而采取的一系列步驟,包括以下三個(gè)特征:
1. 協(xié)議自始至終是有序的過程,每一步驟必須依次執(zhí)行,在前一步驟沒有執(zhí)行完之前,后面的步驟不可能執(zhí)行。
2. 協(xié)議至少需要兩個(gè)參與者,一個(gè)人可以通過執(zhí)行一系列的步驟來完成某項(xiàng)任務(wù),但它不構(gòu)成協(xié)議。
3. 通過執(zhí)行協(xié)議必須能夠完成某項(xiàng)任務(wù)。
基于數(shù)學(xué)的推理雖然非常復(fù)雜,但思路卻很簡單一些方案。
舉幾個(gè)例子:
1)A要向B證明自己擁有某個(gè)房間的鑰匙,假設(shè)該房間只能用鑰匙打開鎖,而其他任何方法都打不開。這時(shí)有2個(gè)方法:
(一)A把鑰匙出示給B,B用這把鑰匙打開該房間的鎖,從而證明A擁有該房間的正確的鑰匙。
(二)B確定該房間內(nèi)有某一物體,A用自己擁有的鑰匙打開該房間的門,然后把物體拿出來出示給B,從而證明自己確實(shí)擁有該房間的鑰匙
后面這個(gè)方法屬于零知識(shí)證明。好處在于在整個(gè)證明的過程中,B始終不能看到鑰匙的樣子,從而避免了鑰匙的泄露。
2)A擁有B的公鑰,A沒有見過B,而B見過A的照片,偶然一天2人見面了,B認(rèn)出了A,但A不能確定面前的人是否是B,這時(shí)B要向A證明自己是B,也有2個(gè)方法。
(一)B把自己的私鑰給A,A用這個(gè)私鑰對(duì)某個(gè)數(shù)據(jù)加密,然后用B的公鑰解密,如果正確,則證明對(duì)方確實(shí)是B。
(二)A給出一個(gè)隨機(jī)值,B用自己的私鑰對(duì)其加密,然后把加密后的數(shù)據(jù)交給A,A用B的公鑰解密,如果能夠得到原來的隨機(jī)值,則證明對(duì)方是B。
后面的方法屬于零知識(shí)證明。
3)有一個(gè)缺口環(huán)形的長廊,出口和入口距離非常近(在目距之內(nèi)),但走廊中間某處有一道只能用鑰匙打開的門,A要向B證明自己擁有該門的鑰匙。采用零知識(shí)證明,則B看著A從入口進(jìn)入走廊,然后又從出口走出走廊,這時(shí)B沒有得到任何關(guān)于這個(gè)鑰匙的信息,但是完全可以證明A擁有鑰匙。
說了不少那么零知識(shí)證明的優(yōu)點(diǎn):
1.在使用零知識(shí)證明的時(shí)候,不降低安全性。
2.零知識(shí)證明工作高效,計(jì)算過程量小,雙方交換信息少。
簡單歸納,既安全、又有良好的隱私、又減少計(jì)算量。
那么區(qū)塊鏈中,ZCASH數(shù)字貨幣就是使用零知識(shí)證明,在整個(gè)交易過程中,完全匿名。他不同于比特幣的交易,他同樣也有UTXO,但是這個(gè)是完全封閉, 在ZCASH交易過程中,不同比特幣,在A轉(zhuǎn)賬給B的時(shí)候,他會(huì)當(dāng)B的面UTXO會(huì)作廢,但是ZCASH中,A轉(zhuǎn)賬給B,新建一個(gè)UTXO,原先的會(huì)發(fā)送到一個(gè)作廢列表,但是這個(gè)列表記錄的是之前的序號(hào)或者代號(hào),證明之前的UTXO失效。在這個(gè)過程中B是看不到A之前的信息,但是確實(shí)交易還是發(fā)生了,同樣道理,礦工也看不到之前的A的交易信息,只是能確定之前的交易序號(hào)或者代號(hào)存在于作廢列表了。
一、從比特幣說起
直接講解ZCash的交易過程可能會(huì)比較抽象。為了有助于理解,我們不妨先分析比特幣,作為鋪墊。
我們先來打個(gè)比方說明比特幣的轉(zhuǎn)賬原理。
演示場景:Alice轉(zhuǎn)1個(gè)比特幣給Bob。
轉(zhuǎn)賬前,Alice要事先準(zhǔn)備1個(gè)比特幣。為了方便理解,我們把Alice準(zhǔn)備轉(zhuǎn)出的這1個(gè)比特幣看成一張面額為1個(gè)比特幣的“支票”,如圖1。
圖1
從這張“支票”中我們可以獲取到如下信息:
1. Alice確實(shí)擁有1個(gè)BTC。
2. Alice使用私鑰對(duì)這張支票簽名,證明Alice擁有對(duì)這筆資產(chǎn)轉(zhuǎn)賬的權(quán)力。
支票的面額和轉(zhuǎn)賬權(quán)都已經(jīng)明確,Alice就可以給Bob轉(zhuǎn)賬了。轉(zhuǎn)賬的原理很簡單,就是給Bob新建一張一樣的“支票”,證明Bob擁有了1個(gè)比特幣。同時(shí)撕掉Alice手中的“支票”,通過這“破舊”并“立新”的方式,實(shí)現(xiàn)資產(chǎn)所有權(quán)的轉(zhuǎn)移。如圖2。
圖2
以上邏輯其實(shí)不難理解,因?yàn)檫@和日常生活中的銀行轉(zhuǎn)賬是一個(gè)道理。通過銀行轉(zhuǎn)賬,我們?cè)诮灰讜r(shí)不必對(duì)實(shí)物貨幣進(jìn)行轉(zhuǎn)移,而是以銀行記賬的方式,實(shí)現(xiàn)“資產(chǎn)所有權(quán)”的轉(zhuǎn)移。比特幣交易的過程實(shí)質(zhì)上就是一個(gè)“資產(chǎn)所有權(quán)”的轉(zhuǎn)移過程,轉(zhuǎn)入比特幣的那一方“新建”一份資產(chǎn)所有權(quán),而轉(zhuǎn)出方需要“銷毀”原先的資產(chǎn)所有權(quán),被銷毀的那張“支票”永遠(yuǎn)不會(huì)再出現(xiàn)。
二、ZCash的轉(zhuǎn)賬原理
與比特幣一樣,ZCash的交易過程也是 “資產(chǎn)所有權(quán)”的轉(zhuǎn)移。繼續(xù)沿用前文“支票”的比方。
演示場景:Alice轉(zhuǎn)1個(gè)ZEC給Bob。
轉(zhuǎn)賬前,Alice創(chuàng)建一張面額為1個(gè)ZEC的“支票”,如圖3。
圖3
能從該憑證中獲取的信息:
1. Alice確實(shí)擁有1個(gè)ZEC。
2. Alice使用私鑰對(duì)這張支票簽名,證明Alice擁有對(duì)這筆資產(chǎn)轉(zhuǎn)賬的權(quán)力。
3. 這張“憑證”上多了一串隨機(jī)數(shù),用符號(hào) r 表示。這串隨機(jī)數(shù)的作用好比“支票代號(hào)”,用來唯一識(shí)別該支票。Alice的“支票代號(hào)”為r1。
明確以上信息,Alice就可以進(jìn)行ZEC轉(zhuǎn)賬了。
第一步:比特幣一樣,要先為Bob新建一張“支票”。Bob的支票代號(hào)(r2)與Alice的支
票代號(hào)(r1)不相同,如圖4。
圖4
第二步:新的“資產(chǎn)所有權(quán)”生成的同時(shí),必須要想辦法銷毀原來的“資產(chǎn)所有權(quán)”。即必須想辦法讓Alice手中的“支票”失效。與比特幣簡單粗暴的“直接撕毀”不同,ZCash采用“備注作廢”的手段,達(dá)到同樣的效果。怎么理解呢?就是在不對(duì)原先“支票”作任何處理的前提下,新建一個(gè)作廢文件列表,錄入需要作廢的“發(fā)票代號(hào)”。如圖5,
圖5
從上圖可以看出,原先的Alice持有的支票仍舊存在,并沒有消失,只是這張支票已經(jīng)被記入“作廢列表”。在確定資產(chǎn)所有權(quán)時(shí)要同時(shí)讀取兩個(gè)列表的信息,能確定Bob擁有資產(chǎn)所有權(quán)的判斷方法是:作廢列表中不存在Bob所持“支票”的代號(hào)。
可是為什么要這樣設(shè)計(jì)呢?其實(shí)這樣設(shè)計(jì)的目的是為了在交易過程中運(yùn)用 “零知識(shí)證明”。
三、零知識(shí)證明
什么是零知識(shí)證明?
零知識(shí)證明 (被稱為“zk-SNARK”)是實(shí)現(xiàn)Zcash的匿名特性的核心技術(shù)?!傲阒R(shí)證明”的定義是:證明者能夠在不向驗(yàn)證者提供任何有用的信息的情況下,使驗(yàn)證者相信某個(gè)論斷是正確的。舉個(gè)簡單的例子:
A要向B證明自己擁有某個(gè)房間的鑰匙,假設(shè)該房間只能用鑰匙打開鎖,而其他任何方法都打不開。這時(shí)有2個(gè)方法:
(一)A把鑰匙出示給B,B用這把鑰匙打開該房間的鎖,從而證明A擁有該房間的正確的鑰匙。
(二)B確定該房間內(nèi)有某一物體,A用自己擁有的鑰匙打開該房間的門,然后把物體拿出來出示給B,從而證明自己確實(shí)擁有該房間的鑰匙 。
后面這個(gè)方法屬于零知識(shí)證明。好處在于在整個(gè)證明的過程中,B始終不能看到鑰匙的樣子,從而避免了鑰匙的泄露。
那么零知識(shí)證明怎么運(yùn)用到ZCash交易過程中呢?
我們?cè)倩仡櫛忍貛藕蚙Cash的例子。
Alice要向Bob轉(zhuǎn)一個(gè)單位的數(shù)字貨幣(BTC/ZEC),即Alice要向Bob轉(zhuǎn)移一個(gè)單位的資產(chǎn)所有權(quán)。這時(shí)有以下兩個(gè)方法:
(一)比特幣中的做法:Alice擁有一張1BTC的支票,要轉(zhuǎn)賬給Bob時(shí),先給Bob新建一張1BTC的支票,同時(shí)當(dāng)著Bob的面將自己原先的支票撕毀。
(二)ZCash中的做法:Alice擁有一張1ZEC的支票,要轉(zhuǎn)賬給Bob時(shí),先給Bob新建一張1ZEC的支票,然后在一張約定有效的作廢列表中,記錄下Alice的發(fā)票的代號(hào),證明Alice的支票已經(jīng)失效。
ZCash的方法屬于零知識(shí)證明。整個(gè)交易過程中,Bob并沒有見過Alice的支票,但是還是實(shí)現(xiàn)了資產(chǎn)所有權(quán)的轉(zhuǎn)移。在ZCash的整個(gè)交易系統(tǒng)中,Alice和Bob的交易還有其他見證者,即負(fù)責(zé)記錄交易信息的礦工。同樣道理,礦工也不必看到Alice的支票,只要能確定代號(hào)為r1的支票已經(jīng)作廢了就行。
四、ZCash完整的匿名交易系統(tǒng)
有了上述鋪墊,就可以進(jìn)一步解釋ZCash的匿名交易過程了。
還是那個(gè)例子:Alice轉(zhuǎn)1 個(gè)ZEC給Bob。這個(gè)例子中有涉及到的角色有轉(zhuǎn)賬雙方Alice和Bob,以及記賬者(礦工)。
首先是Alice和Bob都有了一張支票,如圖6。
圖6
這兩張“支票”都是有效的。Alice的支票開始就存在于整個(gè)ZCash網(wǎng)絡(luò),Bob的支票在生成后也會(huì)被廣播到全網(wǎng)。
為了隱藏交易者信息,要對(duì)兩張支票進(jìn)行加密處理。在全網(wǎng)中存在的“支票”其實(shí)是這樣子的,如圖7。
信息都是被加密的,可以通過擁有者的私鑰解密
圖7
同時(shí),因?yàn)橘Y產(chǎn)只能有一份,所有礦工手里還有一個(gè)作廢列表。Alice要同時(shí)廣播自己的“發(fā)票代號(hào)”,錄入作廢列表中。發(fā)票代號(hào)也是加密的。所以礦工們能看到的信息其實(shí)是這樣的。其中Alice的支票是原先存在的,Alice的支票代號(hào)r1和Bob的支票是在交易過程中被Alice廣播的。如圖8。
圖8
礦工們能獲取的信息相當(dāng)有限,但是這并不影響對(duì)礦工對(duì)交易有效性的判斷。
判斷的邏輯相當(dāng)簡單:礦工拿到Alice給的支票代號(hào)r1,去作廢列表中檢索,假如作廢列表中已經(jīng)存在r1,則證明r1所對(duì)應(yīng)的的支票早已失效;若作廢列表中并不存在r1,則證明r1對(duì)應(yīng)的支票仍舊有效,此時(shí)礦工把r1錄入作廢列表中,把新生成的支票錄入支票列表中。所以記賬的過程就是對(duì)原有支票登記失效,并存入現(xiàn)有支票的過程。
在這個(gè)過程中,我們不難發(fā)現(xiàn),每筆交易礦工能接收到的東西只有一個(gè)發(fā)票代號(hào),和一張新的發(fā)票,而且這兩樣?xùn)|西都是被加密的。所以礦工并不知道轉(zhuǎn)賬雙方是誰,也不知道轉(zhuǎn)賬金額是多少。
總結(jié)
以上是生活随笔為你收集整理的【区块链基础知识系列】 第8课 区块链之零知识证明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 区块链应用于供应链金融的完整解决方案
- 下一篇: Hyperledger Fabric 交