您好,登錄后才能下訂單哦!
這篇文章主要介紹“區塊鏈新型零知識證明是怎么工作的”,在日常操作中,相信很多人在區塊鏈新型零知識證明是怎么工作的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”區塊鏈新型零知識證明是怎么工作的”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
首先,讓我們來看看通用的ZKP協議是做什么的。假設你現在有一個公開函數f,一個私密的輸入x以及一個公開的輸出y。你想要證明你知道一個x,從而得到f(x) = y,而不用泄露x是什么。并且,為了保證這個協議足夠簡單,你想要它的驗證比計算f本身還要快。
讓我們來舉個例子:
f 是一個需要在普通計算機上運行2周的計算,但是在數據中心只需要2小時。你給數據中心發送了這個計算(也就是說,運行f的代碼),然后數據中心就會運行,并且通過證明反饋了答案y。你在幾毫秒之內,就驗證了這個證明,并且相信y其實就是答案。
你有一個加密的交易,表格中的X1是我之前的余額。X2是你之前的余額。X3是我新的余額。X4是你新的余額。你想要創建一個證明,其中這個交易是有效的(特別指出,之前和現在的余額都是正的,而且我余額的減少抵消了你余額的增加)。x可以是秘鑰對,并且f可以是一個函數,其中包含了內置公開輸入的交易,而且作為輸入秘鑰,解密了交易,完成了檢驗,如果通過就返回1,如果失敗就返回0。y 當然會是1。
你有個類似以太坊的區塊鏈,而且你下載了最近的區塊。你想要一個證明,表示這個區塊是有效的,而且這個區塊是在鏈的頂端,其中鏈上任何區塊都是有效的。你想讓一個現存的全節點來提供這樣的驗證。x是整個區塊鏈,f是區塊處理的函數,驗證有效性并且輸出最后區塊的哈希,而且y就是你之前下載區塊的哈希。
所以這些問題的困難點在哪呢?就像它表現出來的,需要很容易為零知識證明(也就是,隱私性)提出保證;現在有很多種方法來將任何計算轉換為例如三色圖表問題的情況,其中圖表的三種顏色都對應原始問題的解決方案,然后使用傳統的零知識證明協議來證明,你即使不揭露它的信息,也可以獲得有效的圖表顏色。
更困難的地方在于提供簡潔性。直觀地來說,證明關于計算簡潔性是困難的,因為計算是難以置信地脆弱。如果你有個很長很復雜的計算,那么你需要有能力在計算過程中的任何地方,從0跳到1,然后再很多情況下,甚至很小的失誤都會導致計算結果完全不同。因此,很難知道你如何才能做出例如對計算過程地隨機取樣,才能保證正確性。因為,很容易就會錯過“很小部分的計算”。但是,通過一些厲害的數學方法,你就可以做到。
整體的感覺是,和這些聯合在一起的協議,都在使用糾偏編碼的數學方式,這種方式通常用來讓數據可以容錯。如果你有項目數據,那么你可以將這些數據作為行代碼,然后你可以在這行中選出四個點。其中任何兩個點都足夠來重新構造這條線,因此也給你另外兩個點。并且,如果你甚至對數據進行了很小的改變,那么它至少保證了你四個點中的三個。你也可以將數據編碼成1,000,000維度的多項式,并且從中選出2,000,000個點;這些點中的任意1,000,001個都會獲得初始數據,因此其他點,以及數據的任何偏離都會至少改變1,000,000個點。這里的算法將會這樣利用多項式,從而使得誤差放大。
原始數據更改1個點,對于多項式都會有很大的改變
簡單舉例
假設你想要證明,你有個多項目P,從而對于x從1到100萬,P(x)是0 <= P(x) <= 9之間的整數。這就是“范圍檢查”的簡單舉例;也許你會假設這類檢查可以用來進行驗證,例如在進行轉賬后,賬戶余額仍然是正數。如果1 <= P(x) <= 9成立,那么這可能是檢查這些值形成正確的數獨解決方案的一部分。
“傳統”的方式是證明這會顯示所有1,000,000個點,并且通過檢查這些數值來驗證。但是,我們想要看到是否我們能夠做出證據,可以在少于1,000,000個步驟的時候就被驗證。簡單隨機檢查P的估值不會這樣做;總會有欺詐者出現,來證明P是滿足999,999個位置,但是不能滿足最后一個,而且隨機取樣就幾個數字,通常總是會錯過那個。那么我們可以怎么做呢?
讓我們從數學方式來轉化這個問題。假設C(x)是多項式檢驗;如果0 <= x <= 9,那么C(x) = 0,否則,C(x)就是非零數字。有一種很簡單的方法,就可以構建C(x):x * (x-1) * (x-2) * … * (x-9)(我們會假設,所有我們的多項式和其他數字都會使用常數,所有我們不需要擔心之間的數字)。
現在,問題變成了:證明你知道P,然后對于所有的x從1到1,000,000,C(P(x)) = 0。讓Z(x) = (x-1) * (x-2) * … (x-1000000)。很基本的數學事實是,對于x從1到1,000,000,任何等于零的多項式都是Z(x)的乘積。因此,問題再次轉變成了:證明你知道P和D,然后對于所有的x,C(P(x)) = Z(x) * D(x)(需要注意到,如果你知道一個合適的C(P(x)),那么用Z(x)除以計算D(x)不是太困難;你可以使用長多項式除法或者基于FFT算法來進行更快地運算)。現在,我們將最初的問題轉換成了數學問題,并且看起來可以順利解決。
那么如何證明這個問題呢?我們可以假設,證明過程是證明者和驗證者之間的三步溝通:證明者發出了一些信息,然后驗證者發出一些需求,之后證明者發出更多的信息。首先,證明者承認(也就是說,創建一個Merkle樹,并且給驗證者發去根哈希)對于1到10億之間x的所有P(x) 和 D(x)的估值。這就包含了0 <= P(x) <= 9之間的100萬個點,以及剩下的9.99億個點。
假設驗證者已經知道Z(x)在這些點的估值;那么Z(x)就像一個“公共的驗證秘鑰”,從而每個人都必須提前知道(沒有地方存儲Z(x)的客戶端,可以簡單地將它存儲在Z(x)的Merkle樹根部,而且需要證明者也為每個Z(x)的數值提供驗證者需要的分支;或者,有些數字字段,對于x和Z(x)都很容易計算)。在獲得這個認可(也就是說,Merkle樹的根部),驗證者然后會在1和10億之間選擇隨機的16x數值,而且讓證明者來提供P(x)和D(x)的Merkle樹分支。證明者提供了這些數值,而且驗證者會檢查(i)這些分支和之前提供的Merkle樹根部符合(ii)C(P(x))其實等于Z(x) * D(x)。
我們知道這個證明有很好的完整性,如果你其實知道一個合適的P(x),那么你可以計算D(x)并且構建正確的證明,來通過16個檢查點。但是穩定性又如何呢?也就是說,如果欺詐的證明者提供了個錯誤的P(x),他們被抓的最小可能性是多少?我們可以進行如下分析。因為C(P(x))是由1,000,000維度多項式組成的10維度多項式。整體來說,我們知道這兩個不同的多項式最多在N個點符合;因此,10,000,000維度的多項式和任何等于Z(x) * D(x)的多項式都不會相等。對于x來說,至少在990,000,000個點都不會同意。因此,對于不好的P(x),在一輪被抓住的概率已經是99%;通過16輪檢查,被抓住的概率是1 – 10-32 ,也就是說,這個機制不可能存在欺詐。
那么,我們剛剛做了什么?我們使用多項式來推動任何不良解決方案的錯誤,以至于對于初始問題的任何錯誤解決方案,都需要100萬個檢查才能發現,最終導致驗證協議的解決方案,可以99%的概率發現錯誤。
我們可以將這三步的機制轉換成一個非交互式的證明,這可以通過單個的證明者來廣播,然后被任何人使用菲亞特-夏米爾啟發式算法來進行驗證,證明者首先構建P(x) 和 D(x)數值的Merkle樹,然后計算樹的根哈希。這個根部本身被用于作為熵的來源,用來決定證明者需要提高這個樹的哪些分支。證明者然后就會廣播Merkle樹的根部,分支還有證明。計算全部會在提供方完成;從數據計算Merkle樹根部的過程,然后是使用這些來選擇經過審計的分支,有消息地完成了交互性驗證者的需求。
欺詐者在不需要有效的P(x)前提下,唯一能做的事情,就是嘗試進行有效驗證,直到最終他們特別幸運,選擇到了正確的Merkle樹分支,但是概率只有1 – 10-32 (也就是說,至少有1 – 10-32 的概率,虛假的證明不會通過檢查),欺詐者需要花費幾十億年,才能得到可以通過的證明。
前景展望
為了說明這項技術的能力,我們來做些看起來不是很重要的事情:證明你知道第100萬個斐波納契數。為了完成這個,我們會證明你對多項式有了解,P(x)代表第x個斐波納契數。多項式檢驗就會從3個維度進行:C(x1, x2, x3) = x3-x2-x1(需要注意,如果對所有x來說,C(P(x), P(x+1), P(x+2)) = 0,那么P(x)久代表斐波納契數)。
所以問題就變成了:證明你知道有個P和D,然后C(P(x), P(x+1), P(x+2)) = Z(x) * D(x)。對于其中的16個因子,證明者需要為P(x), P(x+1), P(x+2) and D(x)提供Merkle樹的分支。證明者而且還需要保證所提供的Merkle樹的分支可以保證,P(0) = P(1) = 1。否則,整個流程就是一樣的。
現在,為了完成這個,還需要解決2個問題。第一個是,如果我們嘗試進行列舉數字的方法來解決這個問題,效率就會很低,因為這些數字通常都會很大。例如,第100萬個斐波納契數有208988個數字。如果我們其實想要獲得簡單性,與其使用常規數字進行列舉,我們需要使用有限的數字系統,始終符合我們了解的規則,例如a * (b+c) = (ab) + (ac) and (a^2 – b^2) = (a-b) * (a+b),但是每個數字都會占據一定空間的數據。證明關于斐波納契數數字的問題,需要更加復雜的設計。最簡單的模式,就是將每個a + b用a + b的N進制數來代替,對減法和乘法也是同樣地方法,對于除法,使用模塊逆轉(例如,如果N=7,那么3 + 4 = 0, 2 + 6 = 1, 3 * 4 = 5, 4 / 2 = 2而且5 / 2 = 6)。
其次,你也許注意到了,在上面的證明中,我忽略了一種攻擊:如果攻擊者不是通過看似真實的P(x),而是使用了并不在這些多項式的數據?那么,無效的C(P(x))必須要和有效的C(P(x))在至少9.9億個點上相同,就不會應用了,而且會非常不同,而且更有效的攻擊是有可能發生的。例如 ,一個攻擊者會保證任何x都有一個隨機數p,那么計算d = C(p) / Z(x),并且將這些數字都放入P(x)和D(x)。這些數字不會在任何低維度的多項式,但是它們會通過檢測。
這就證明了這種可能性會很有效地抵抗攻擊,雖然做這些的工具相對復雜,而且你可以說它們組成了STARKs協議中的數學創新。同時,這個解決方案有個限制:你可以清除這些數據,但是你不能清除和你的多項式存在一個或兩個變量差別的多項式。因此,這些工具會提供接近性證明,證明大多數在P和D的點上,都會代表正確的多項式。
所以最終證明,這已經足夠來打造證明,盡管會有兩個小問題。首先,驗證者需要檢查更多的指數來彌補錯誤占據的有限空間。其次,如果我們正在打造邊界檢測,那么我們需要將接近性證明擴大到不止是證明大多數點是在同個多項式,而且證明這兩個特別的點是在那個多項式上。
到此,關于“區塊鏈新型零知識證明是怎么工作的”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。