區塊鏈與零知識證明

零知識證明:

零知識證明(Zero Knowledge Proof),是這樣的一個過程,證明者在不向驗證者提供任何額外信息的前提下,使驗證者相信某個論斷(Statement)是正確的。
證明過程包括交互式(Interactive)非交互式(Non-interactive 兩種。
(零知識證明:零知識,即在證明的過程中不透露任何內情。通俗的來講,就是既證明了自己想證明的事情,同時透露給驗證者的信息爲“零”。)

交互式
零知識證明協議的基礎是交互式的。它要求驗證者不斷對證明者所擁有的“知識”進行一系列提問。證明者通過回答一系列問題,讓驗證者相信證明者的確知道這些“知識”。然而,這種簡單的方法並不能使人相信證明者和驗證者都是真實的,兩者可以提前串通,以便證明者可以在不知道答案的情況下依然通過驗證。

非交互式
非交互式零知識證明不需要交互過程,避免了串通的可能性,但是可能需要額外的機器和程序來確定實驗的順序。


爲什麼區塊鏈要用到零知識證明?

  • 個人的身份與很多信息進行了關聯,你的手機號,身份證號,銀行卡號等等都綁定在一起,只要知道你的手機號,就可以通過關聯信息獲取到你的姓名,出生年月等等信息。

  • 在區塊鏈的世界中,用地址來表示交易雙方,這樣達到了匿名的作用。然而,鏈上的信息雖然是匿名的,但是通過鏈上信息綁定的鏈下信息,像很多交易所都綁定了鏈上地址與鏈下的銀行賬戶、支付寶,使得可以很方便的追溯真實世界的交易雙方,使得匿名性蕩然無存。

  • 零知識證明能夠在隱藏發送方、接受方以及交易金額等其他細節的情況下,保證交易有效


零知識證明如何保證區塊鏈中交易的匿名性?

目前ZCASH(大零幣)使用零知識機制來證明交易有效,其零知識方法爲:zk-SNARK是“zero knowledge Succinct Non-interactive ARgument of Knowledge”的縮寫。ZCASH可以將交易紀錄上的交易雙方和金額都加密隱藏起來,因此礦工無從得知這些交易上的細節,但仍然可以驗證交易。
1、 zero knowledge: 零知識,即在證明的過程中不透露任何內情,如上文的例子所示。
2、 succinct: 簡潔的,主要是指驗證過程不涉及大量數據傳輸以及驗證算法簡單。
3、 non-interactive: 無交互。
4、 ARguments: 驗證者只對計算能力有限的證明者有效。擁有足夠計算能力的證明者可以僞造證明。這也叫“計算可靠性"(相對的還有”完美可靠性")。
5、 of Knowledge: 對於證明者來說在不知道證據(Witness,比如一個哈希函數的輸入或者一個確定 Merkle-tree 節點的路徑)的情況下,構造出一組參數和證明是不可能的。

零知識證明大體由四部分組成:

  • 多項式問題的轉化 - 需要證明的問題轉化爲多項式問題 t(x)h(x) = w(x)v(x),證明者提交證明讓驗證者確認多項式成立。

  • 隨機挑選驗證 - 隨機選擇驗證的數值s,驗證t(s)h(s) = w(s)v(s)。相對於驗證多項式相等t(x)h(x) =w(x)v(x),隨機挑選驗證,簡單,驗證數據少。隨機挑選驗證,安全性肯定不及多項式等式驗證,但如果確實足夠隨機,安全性還是相當高的。

  • 同態隱藏 -同態隱藏指的是函數的一種特性。輸入的計算和輸出的計算保持“同態”。以加法同態爲例,滿足如下的三個條件的函數E(x),稱爲加法同態:

1.給定 E(x),很難推導出x.
2.不同的輸入,對應不同輸出
3. E(x+y) 可以由 E(x),E(y)計算出來。乘法同態類似。

  • 零知識 - 證明者和驗證者之間除了“問題證明與否”知識外,不知道其他任何知識(不知道隨機挑選值,不知道挑選值的多項式計算結果等等)。

在ZCASH中,摒棄了之前的UTXO方式,而是使用了一種基於UTXO,被稱爲NOTE(支票)的新方式代替。NOTE代表了當前賬戶對資產的支配權,與UTXO不同,賬戶餘額的存儲方式不再是“未消費的交易輸出”,而是“未被作廢的支票(NOTE)”;一個NOTE是由所有者公鑰PK、所擁有金額V、和唯一區分支票的序列號r組成,表示爲NOTE=(PK, v, r)。

Cash交易分爲兩類:透明地址交易隱藏地址交易

透明地址交易的輸入、輸出直接是可見的NOTE信息;隱藏地址交易,輸入和/或輸出的地址和金額是隱藏的。

在ZCASH的隱藏地址交易中,交易的輸入輸出不再是明文的NOTE,而是NOTE的簽發廢棄通知
在這裏插入圖片描述
左側代表的是“簽發的新的NOTE”,右側代表的是“作廢的NOTE”。每次進行轉賬,就會把轉賬方的NOTE放到作廢列表裏,代表此NOTE已經作廢,同時爲收款方創建一張等額的NOTE。這樣就實現了“資產的轉移”,並且由於都是記錄的NOTE的哈希值,因此並不知道被廢棄的和新簽發的NOTE的內容,這樣就做到了隱藏交易雙方及交易細節。

礦工怎麼能夠確認這些匿名交易是真實有效的呢?(運用零知識證明的部分)

  • 其實,在礦工確認交易時,轉賬方會提供一個證明P,能夠證明:轉賬方通過私鑰SK、公鑰PK、支票序列號r計算後的哈希值與在簽發列表中存在的哈希值一致,這足以證明轉賬方的NOTE存在。這樣既沒有泄露轉賬方的信息,又證明了NOTE存在(類似上文提到的用戶註冊的例子)。

  • 礦工確認NOTE存在後,就會在作廢列表中查詢,如果沒有此筆NOTE的作廢記錄,則證明轉賬方NOTE有效 (防止雙花)。然後再在作廢列表中,把當前NOTE的序列號哈希計算後的值記錄在作廢列表中,表明此筆NOTE已經 作廢,同時爲收款方簽發新的NOTE。

發佈了83 篇原創文章 · 獲贊 25 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章