本文由幣乎(bihu.com)優(yōu)質(zhì)內(nèi)容計(jì)劃支持
交易過(guò)程完全匿名是數(shù)字貨幣ZCash最大的亮點(diǎn),正是這一點(diǎn)使得ZCash自提出以來(lái)便備受關(guān)注。ZCash匿名交易的實(shí)現(xiàn)依賴(lài)于一種叫做“零知識(shí)證明”的密碼學(xué)手段。本文將通過(guò)打比方的手法岸夯,用通俗的語(yǔ)言,解釋清楚ZCash的交易原理,以及零知識(shí)證明是如何運(yùn)用到ZCash交易過(guò)程中的昧诱。
一、從比特幣說(shuō)起
為了有助于理解所袁,我們不妨先分析比特幣盏档,作為鋪墊。
我們先來(lái)打個(gè)比方說(shuō)明比特幣的轉(zhuǎn)賬原理燥爷。
這和日常生活中的銀行轉(zhuǎn)賬是一個(gè)道理蜈亩。通過(guò)銀行轉(zhuǎn)賬,我們?cè)诮灰讜r(shí)不必對(duì)實(shí)物貨幣進(jìn)行轉(zhuǎn)移前翎,而是以銀行記賬的方式稚配,實(shí)現(xiàn)“資產(chǎn)所有權(quán)”的轉(zhuǎn)移。比特幣交易的過(guò)程實(shí)質(zhì)上就是一個(gè)“資產(chǎn)所有權(quán)”的轉(zhuǎn)移過(guò)程港华,轉(zhuǎn)入比特幣的那一方“新建”一份資產(chǎn)所有權(quán)道川,而轉(zhuǎn)出方需要“銷(xiāo)毀”原先的資產(chǎn)所有權(quán),被銷(xiāo)毀的那張“支票”永遠(yuǎn)不會(huì)再出現(xiàn)立宜。
二冒萄、ZCash的轉(zhuǎn)賬原理
與比特幣一樣,ZCash的交易過(guò)程也是 “資產(chǎn)所有權(quán)”的轉(zhuǎn)移赘理。
演示場(chǎng)景:Alice轉(zhuǎn)1個(gè)ZEC給Bob宦言。
轉(zhuǎn)賬前,Alice創(chuàng)建一張面額為1個(gè)ZEC的“支票”商模,
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)”瞪醋,用來(lái)唯一識(shí)別該支票忿晕。A的“支票代號(hào)”為r1。
明確以上信息银受,Alice就可以進(jìn)行ZEC轉(zhuǎn)賬了践盼。
第一步:比特幣一樣鸦采,要先為B新建一張“支票”。Bob的支票代號(hào)(r2)與Alice的支
票代號(hào)(r1)不相同咕幻,
第二步:新的“資產(chǎn)所有權(quán)”生成的同時(shí)渔伯,必須要想辦法銷(xiāo)毀原來(lái)的“資產(chǎn)所有權(quán)”。即必須想辦法讓A手中的“支票”失效肄程。與比特幣簡(jiǎn)單粗暴的“直接撕毀”不同锣吼,ZCash采用“備注作廢”的手段,達(dá)到同樣的效果蓝厌。怎么理解呢玄叠?就是在不對(duì)原先“支票”作任何處理的前提下,新建一個(gè)作廢文件列表拓提,錄入需要作廢的“發(fā)票代號(hào)”读恃。
原先的A持有的支票仍舊存在,并沒(méi)有消失崎苗,只是這張支票已經(jīng)被記入“作廢列表”狐粱。在確定資產(chǎn)所有權(quán)時(shí)要同時(shí)讀取兩個(gè)列表的信息,能確定Bob擁有資產(chǎn)所有權(quán)的判斷方法是:作廢列表中不存在Bob所持“支票”的代號(hào)胆数。
可是為什么要這樣設(shè)計(jì)呢肌蜻?其實(shí)這樣設(shè)計(jì)的目的是為了在交易過(guò)程中運(yùn)用 “零知識(shí)證明”。
三必尼、零知識(shí)證明
什么是零知識(shí)證明蒋搜?
零知識(shí)證明 (被稱(chēng)為“zk-SNARK”)是實(shí)現(xiàn)Zcash的匿名特性的核心技術(shù)∨欣颍“零知識(shí)證明”的定義是:證明者能夠在不向驗(yàn)證者提供任何有用的信息的情況下豆挽,使驗(yàn)證者相信某個(gè)論斷是正確的。舉個(gè)簡(jiǎn)單的例子:
A要向B證明自己擁有某個(gè)房間的鑰匙券盅,假設(shè)該房間只能用鑰匙打開(kāi)鎖帮哈,而其他任何方
法都打不開(kāi)。這時(shí)有2個(gè)方法:
(一)A把鑰匙出示給B锰镀,B用這把鑰匙打開(kāi)該房間的鎖娘侍,從而證明A擁有該房間的正確的鑰匙。
(二)B確定該房間內(nèi)有某一物體泳炉,A用自己擁有的鑰匙打開(kāi)該房間的門(mén)憾筏,然后把物體拿出來(lái)出示給B,從而證明自己確實(shí)擁有該房間的鑰匙?花鹅。
后面這個(gè)方法屬于零知識(shí)證明氧腰。好處在于在整個(gè)證明的過(guò)程中,B始終不能看到鑰匙的樣子,從而避免了鑰匙的泄露古拴。
那么零知識(shí)證明怎么運(yùn)用到ZCash交易過(guò)程中呢箩帚?我們?cè)倩仡櫛忍貛藕蚙Cash的例子。
A要向B轉(zhuǎn)一個(gè)單位的數(shù)字貨幣(BTC/ZEC)斤富,即A要向B轉(zhuǎn)移一個(gè)單位的資產(chǎn)所有權(quán)膏潮。這時(shí)有以下兩個(gè)方法:
(一)比特幣中的做法:A擁有一張1BTC的支票锻狗,要轉(zhuǎn)賬給B時(shí)满力,先給B新建一張1BTC的支票,同時(shí)當(dāng)著B(niǎo)的面將自己原先的支票撕毀轻纪。
(二)ZCash中的做法:A擁有一張1ZEC的支票油额,要轉(zhuǎn)賬給Bb時(shí),先給B新建一張1ZEC的支票刻帚,然后在一張約定有效的作廢列表中潦嘶,記錄下A的發(fā)票的代號(hào),證明A的支票已經(jīng)失效崇众。
ZCash的方法屬于零知識(shí)證明掂僵。整個(gè)交易過(guò)程中,B并沒(méi)有見(jiàn)過(guò)A的支票顷歌,但是還是實(shí)現(xiàn)了資產(chǎn)所有權(quán)的轉(zhuǎn)移锰蓬。在ZCash的整個(gè)交易系統(tǒng)中,A和B的交易還有其他見(jiàn)證者眯漩,即負(fù)責(zé)記錄交易信息的礦工芹扭。同樣道理,礦工也不必看到Al的支票赦抖,只要能確定代號(hào)為r1的支票已經(jīng)作廢了就行舱卡。