零知識證明(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 節點的路徑)的情況下,構造出一組引數和證明是不可能的。
零知識證明大體由四部分組成:
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)。
透明位址交易的輸入、輸出直接是可見的note資訊;隱藏位址交易,輸入和/或輸出的位址和金額是隱藏的。
在zcash的隱藏位址交易中,交易的輸入輸出不再是明文的note,而是note的簽發和廢棄通知。
左側代表的是「簽發的新的note」,右側代表的是「作廢的note」。每次進行轉賬,就會把轉賬方的note放到作廢列表裡,代表此note已經作廢,同時為收款方建立一張等額的note。這樣就實現了「資產的轉移」,並且由於都是記錄的note的雜湊值,因此並不知道被廢棄的和新簽發的note的內容,這樣就做到了隱藏交易雙方及交易細節。
礦工怎麼能夠確認這些匿名交易是真實有效的呢?(運用零知識證明的部分)
區塊鏈解讀 零知識證明
解讀區塊鏈,零知識證明 zero knowledge proof 前段時間聽到有朋友談到,區塊鏈發展技術中的零知識證明,這幾天翻閱了下資料看了下這一塊內容,看完之後深深覺得自己數學知識和數學理解能力的不足,大概寫下零知識證明的理論,也不深究,其實具體很多東西也沒看懂,就當是乙個知識名詞的解釋。零知識...
區塊鏈解讀 零知識證明
前段時間聽到有朋友談到,區塊鏈發展技術中的零知識證明,這幾天翻閱了下資料看了下這一塊內容,看完之後深深覺得自己數學知識和數學理解能力的不足,大概寫下零知識證明的理論,也不深究,其實具體很多東西也沒看懂,就當是乙個知識名詞的解釋。零知識證明 zero knowledge proof,是由s.goldw...
讀懂區塊鏈 零知識證明(一)
網上有乙個被很多人引用的例子,即 阿里巴巴的零知識證明 可以幫助我們理解 零知識證明 的原理。一天,阿里巴巴被強盜抓住了,強盜向阿里巴巴拷問進入山洞的咒語。面對強盜,阿里巴巴是這麼想的 如果我把咒語告訴了他們,他們就會認為我沒有價值了,就會殺了我省糧食 但如果我死活不說,他們也會認為我沒有價值而殺了...