日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不是程序员也能看懂的ZCash零知识证明

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不是程序员也能看懂的ZCash零知识证明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

交易過程完全匿名是數字貨幣ZCash最大的亮點,正是這一點使得ZCash自提出以來便備受關注。ZCash匿名交易的實現依賴于一種叫做“零知識證明”的密碼學手段。本文將通過打比方的手法,用通俗的語言,解釋清楚ZCash的交易原理,以及零知識證明是如何運用到ZCash交易過程中的。

本文的嘉賓是數字貨幣界最著名CP:Alice和Bob。

一、從比特幣說起

直接講解ZCash的交易過程可能會比較抽象。為了有助于理解,我們不妨先分析比特幣,作為鋪墊。

我們先來打個比方說明比特幣的轉賬原理。

演示場景:Alice轉1個比特幣給Bob。

轉賬前,Alice要事先準備1個比特幣。為了方便理解,我們把Alice準備轉出的這1個比特幣看成一張面額為1個比特幣的“支票”,如圖1。

圖1

從這張“支票”中我們可以獲取到如下信息:

1. Alice確實擁有1個BTC

2. Alice使用私鑰對這張支票簽名,證明Alice擁有對這筆資產轉賬的權力。

支票的面額和轉賬權都已經明確,Alice就可以給Bob轉賬了。轉賬的原理很簡單,就

是給Bob新建一張一樣的“支票”,證明Bob擁有了1個比特幣。同時撕掉Alice手中那張的“支票”,通過這“破舊”并“立新”的方式,實現資產所有權的轉移。如圖2。

圖2

以上邏輯其實不難理解,因為這和日常生活中的銀行轉賬是一個道理。通過銀行轉賬,我們在交易時不必對實物貨幣進行轉移,而是以銀行記賬的方式,實現“資產所有權”的轉移。比特幣交易的過程實質上就是一個“資產所有權”的轉移過程,轉入比特幣的那一方“新建”一份資產所有權,而轉出方需要“銷毀”原先的資產所有權,被銷毀的那張“支票”永遠不會再出現。

二、ZCash的轉賬原理

與比特幣一樣,ZCash的交易過程也是 “資產所有權”的轉移。繼續沿用前文“支票”的比方。

演示場景:Alice轉1個ZEC給Bob。

轉賬前,Alice創建一張面額為1個ZEC的“支票”,如圖3。

圖3

能從該憑證中獲取的信息:

1. Alice確實擁有1個ZEC。

2. Alice使用私鑰對這張支票簽名,證明Alice擁有對這筆資產轉賬的權力。

3. 這張“憑證”上多了一串隨機數,用符號 r 表示。這串隨機數的作用好比 “支票代號”,用來唯一識別該支票。Alice的“支票代號”為r1。

明確以上信息,Alice就可以進行ZEC轉賬了。

第一步:比特幣一樣,要先為Bob新建一張“支票”。Bob的支票代號(r2)與Alice的支

票代號(r1)不相同,如圖4。

圖4

第二步:新的“資產所有權”生成的同時,必須要想辦法銷毀原來的“資產所有權”。即必須想辦法讓Alice手中的“支票”失效。與比特幣簡單粗暴的“直接撕毀”不同,ZCash采用“備注作廢”的手段,達到同樣的效果。怎么理解呢?就是在不對原先“支票”作任何處理的前提下,新建一個作廢文件列表,錄入需要作廢的“發票代號”。如圖5,

圖5

從上圖可以看出,原先的Alice持有的支票仍舊存在,并沒有消失,只是這張支票已經被記入“作廢列表”。在確定資產所有權時要同時讀取兩個列表的信息,能確定Bob擁有資產所有權的判斷方法是:作廢列表中不存在Bob所持“支票”的代號。

可是為什么要這樣設計呢?其實這樣設計的目的是為了在交易過程中運用 “零知識證明”。

三、零知識證明

什么是零知識證明?

零知識證明 (被稱為“zk-SNARK”)是實現Zcash的匿名特性的核心技術。“零知識證

明”的定義是:證明者能夠在不向驗證者提供任何有用的信息的情況下,使驗證者相信某個論斷是正確的。舉個簡單的例子:

A要向B證明自己擁有某個房間的鑰匙,假設該房間只能用鑰匙打開鎖,而其他任何方

法都打不開。這時有2個方法:?
  (一)A把鑰匙出示給B,B用這把鑰匙打開該房間的鎖,從而證明A擁有該房間的正確的鑰匙。?
  (二)B確定該房間內有某一物體,A用自己擁有的鑰匙打開該房間的門,然后把物體拿出來出示給B,從而證明自己確實擁有該房間的鑰匙?
  后面這個方法屬于零知識證明。好處在于在整個證明的過程中,B始終不能看到鑰匙的樣子,從而避免了鑰匙的泄露。

那么零知識證明怎么運用到ZCash交易過程中呢?

我們再回顧比特幣和ZCash的例子。

Alice要向Bob轉一個單位的數字貨幣(BTC/ZEC),即Alice要向Bob轉移一個單位的資產所有權。這時有以下兩個方法:

(一)比特幣中的做法:Alice擁有一張1BTC的支票,要轉賬給Bob時,先給Bob新建一張1BTC的支票,同時當著Bob的面將自己原先的支票撕毀。

(二)ZCash中的做法:Alice擁有一張1ZEC的支票,要轉賬給Bob時,先給Bob新建一張1ZEC的支票,然后在一張約定有效的作廢列表中,記錄下Alice的發票的代號,證明Alice的支票已經失效。

ZCash的方法屬于零知識證明。整個交易過程中,Bob并沒有見過Alice的支票,但是還是實現了資產所有權的轉移。在ZCash的整個交易系統中,Alice和Bob的交易還有其他見證者,即負責記錄交易信息的礦工。同樣道理,礦工也不必看到Alice的支票,只要能確定代號為r1的支票已經作廢了就行。

四、ZCash完整的匿名交易系統

有了上述鋪墊,就可以進一步解釋ZCash的匿名交易過程了。

還是那個例子:Alice轉1 個ZEC給Bob。這個例子中有涉及到的角色有轉賬雙方Alice和Bob,以及記賬者(礦工)。

首先是Alice和Bob都有了一張支票,如圖6。

圖6

這兩張“支票”都是有效的。Alice的支票開始就存在于整個ZCash網絡,Bob的支票在生成后也會被廣播到全網。

為了隱藏交易者信息,要對兩張支票進行加密處理。在全網中存在的“支票”其實是這樣子的,如圖7。

信息都是被加密的,可以通過擁有者的私鑰解密

圖7

同時,因為資產只能有一份,所有礦工手里還有一個作廢列表。Alice要同時廣播自己的“發票代號”,錄入作廢列表中。發票代號也是加密的。所以礦工們能看到的信息其實是這樣的。其中Alice的支票是原先存在的,Alice的支票代號r1和Bob的支票是在交易過程中被Alice廣播的。如圖8。

圖8

礦工們能獲取的信息相當有限,但是這并不影響對礦工對交易有效性的判斷。

判斷的邏輯相當簡單:礦工拿到Alice給的支票代號r1,去作廢列表中檢索,假如作廢列表中已經存在r1,則證明r1所對應的的支票早已失效;若作廢列表中并不存在r1,則證明r1對應的支票仍舊有效,此時礦工把r1錄入作廢列表中,把新生成的支票錄入支票列表中。所以記賬的過程就是對原有支票登記失效,并存入現有支票票的過程。

在這個過程中,我們不難發現,每筆交易礦工能接收到的東西只有一個發票代號,和一張新的發票,而且這兩樣東西都是被加密的。所以礦工并不知道轉賬雙方是誰,也不知道轉賬金額是多少。

五、數據庫

其實有心人可以發現,按照上文的思路,能寫一個用于ZCash匿名交易的數據庫。筆者后續的文章中會另起一文專門寫數據庫的構建。以下是筆者的聯系方式。

原文地址:?https://zhuanlan.zhihu.com/p/24440530

總結

以上是生活随笔為你收集整理的不是程序员也能看懂的ZCash零知识证明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。