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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【译】zkSNARKs in a nutshell

發布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【译】zkSNARKs in a nutshell 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
zkSNARK的可能性令人印象深刻,您可以驗證計算的正確性,而無需執行它們,您甚至不會知道執行了什么 - 只是它正確地完成了。 不幸的是,大多數zkSNARKs的解釋都是在某種程度上揮手致意,因此他們仍然是“神奇的”,這表明只有最開明的人才能真正理解他們是如何以及為什么(以及如果?)他們的工作。 現實情況是,zkSNARK可以簡化為四種簡單的技術,本博文旨在解釋它們。 任何懂得RSA密碼系統工作原理的人,都應該對目前使用的zkSNARK有很好的理解。 讓我們看看它是否會實現其目標!

pdf版本

作為一個非常簡短的總結,zkSNARKs目前已經實現,有4個主要成分(不用擔心,我們將在后面的章節中解釋所有術語):

A)編碼為多項式問題

要檢查的程序被編譯成多項式的二次方程:t(x)h(x)= w(x)v(x),其中當且僅當程序正確計算時等式成立。 證明者想說服驗證者這種平等。

B)通過隨機抽樣的簡潔性

驗證者選擇一個秘密評估點s來減少乘以多項式和驗證多項式函數等式的問題到簡單的乘法和等式檢查數字:t(s)h(s)= w(s)v(s)

這極大地減少了驗證尺寸和驗證時間。

C)同態編碼/加密

使用編碼/加密函數E,它具有一些同態特性(但不完全同態,但還不實際)。 這允許證明者在不知道s的情況下計算E(t(s)),E(h(s)),E(w(s)),E(v(s)),她只知道E其他有用的加密值。

D)零知識

證明者通過與數值相乘來置換值E(t(s)),E(h(s)),E(w(s)),E(v(s)),以便驗證者仍然可以檢查他們的正確結構而不知道實際的編碼值。

非常粗略的想法是檢查t(s)h(s)= w(s)v(s)與檢查t(s)h(s)k = w(s)v秘密數k(不為零),區別在于如果僅發送數字(t(s)h(s)k)和(w(s)v(s)k),則不可能推導出t(s)h(s)或w(s)v(s)。

這是揮手致意的部分,以便您可以了解zkSNARK的本質,現在我們將詳細介紹。

RSA和零知識證明

讓我們先快速提醒一下RSA的工作方式,留下一些挑剔的細節。 請記住,我們經常使用模數來代替其他數字,而不是完整整數。 這里的符號是“a +b≡c(mod n)”,意思是“(a + b)%n = c%n”。 請注意,“(mod n)”部分不適用于右側的“c”,但實際上適用于“≡”和所有其他的“≡”。 這使得它很難閱讀,但我保證謹慎使用它。 現在回到RSA:

證明者提出以下數字:

  • p,q:兩個隨機秘密素數
  • n:= pq
  • d:1 <d <n - 1的隨機數
  • e:一個數,使得de≡≡(mod(p-1)(q-1))。

公鑰是(e,n),私鑰是d。 素數p和q可以丟棄,但不應該顯示。

消息m通過加密

  • E(m):= m e %n

和c = E(m)通過解密

  • D(c):= c d %n。

由于c d≡(m e %n)d≡m ed (mod n)和m的指數中的乘法表現如同模(p-1)(q-1)中的乘法一樣,我們得到m ed≡m(mod n)。 此外,RSA的安全性依賴于n不能有效地進行因式分解,因此d不能從e計算(如果我們知道p和q,這很容易)。

RSA的一個顯著特點是它是乘法同態的 一般而言,如果可以交換順序而不影響結果,則兩個操作是同態的。 在同態加密的情況下,這是您可以對加密數據執行計算的屬性。 完全同態加密 ,存在但是不實用的東西,將允許評估加密數據上的任意程序。 在這里,對于RSA,我們只是在談論組乘法。 更正式地說:E(x)E(y)≡x e y e≡(xy)e≡E(xy)(mod n)或者用文字表示:兩條消息的加密乘積等于消息的產品。

這種同態性已經允許某種乘法的零知識證明:證明者知道一些秘密數字x和y并計算它們的乘積,但只發送加密版本a = E(x),b = E(y)和c = E(xy)給驗證者。 驗證者現在檢查(ab)%n≡c%n并且驗證者學習的唯一東西是產品的加密版本以及產品是否正確計算,但她既不知道這兩個因素,也不知道實際產品。 如果您通過添加替換產品,這已經進入區塊鏈的方向,主要操作是添加余額。

交互式驗證

關于零知識方面,讓我們現在關注zkSNARK的另一個主要特點,即簡潔性。 正如你將會看到的那樣,簡潔性是zkSNARKs中非常重要的部分,因為零知識部分將由于允許有限形式的同態編碼的某種編碼而被“免費”給出。

SNARKs是簡潔的非交互式知識論的簡稱。 在這種所謂的交互協議的一般設置中,存在證明者和驗證者 ,證明者想通過交換消息來說服驗證者說明一個陳述(例如f(x)= y)。 通常所需的屬性是沒有證明者可以說服驗證者說明一個錯誤的語句( 健全性 ),并且證明者有一定的策略來說服驗證者說明任何真實的陳述( 完整性 )。 首字母縮略詞的各個部分具有以下含義:

  • 簡潔:與實際計算的長度相比,消息的大小很小
  • 非互動性:沒有或只有很少的互動。 對于zkSNARK,通常會有一個設置階段,然后從證明者到驗證者發送一條消息。 此外,SNARKs通常具有所謂的“公開驗證者”屬性,意味著任何人都可以驗證而無需重新進行交互,這對區塊鏈很重要。
  • 參數:驗證者僅受計算限制的證明者的保護。 具有足夠計算能力的證明者可以創建關于錯誤陳述的證明/論據(請注意,具有足夠的計算能力,任何公鑰加密都可以被破壞)。 這也被稱為“計算健全性”,而不是“完美健全性”。
  • 知識:證明者不可能在不知道某個所謂的證人的情況下構造一個證明/論證(例如,她想從中度過的地址,哈希函數的原像或者某個默克爾樹的路徑節點)。

如果添加零知識前綴,則還需要該屬性(粗略地說)在交互期間,驗證者除了語句的有效性之外什么都不學習。 驗證者尤其不了解證人字符串 - 我們稍后會看到那是什么。

作為一個例子,讓我們考慮下面的事務驗證計算:當且僅當σ1和σ2是根哈希值時,f(σ1,σ2,s,r,v,p s ,p r ,v)= 1 Merkle-trees(前置狀態和后置狀態),s和r是發送者和接收者賬戶,p是Merkle樹證明,證明s的平衡在σ1中至少為v,如果v從s的平衡移動到r的平衡,他們就散列到σ2而不是σ1。

如果所有輸入已知,驗證f的計算相對容易。 因此,我們可以把f變成zkSNARK,其中只有σ1和σ2是公知的,(s,r,v,p s ,p r ,v)是證人字符串。 零知識屬性現在導致驗證者能夠檢查證明者是否知道某個證人將根哈希從σ1變為σ2,這樣做并不違反任何正確事務的要求,但她不知道誰發給誰多少錢。

零知識的正式定義(仍然省略一些細節)是有一個模擬器 ,它也生成了安裝字符串,但不知道秘密證人,可以與驗證器交互 - 但外部觀察者不能將這種互動與真正的證明者的互動區分開來。

NP和復雜性 - 理論上的減少

為了看到zkSNARKs可以用于哪些問題和計算,我們必須從復雜性理論中定義一些概念。 如果你不關心什么是“證人”,在“閱讀”零知識證明之后你不會知道什么,或者為什么只有針對關于多項式的特定問題才有zkSNARK,那么你可以跳過本節。

P和NP

首先,讓我們限制只輸出0或1的函數,并調用這些函數問題 。 因為你可以單獨查詢每一個較長結果的位,所以這不是一個真正的限制,但它使理論變得更容易。 現在我們要測量解決給定問題的“復雜”(計算函數)。 對于數學函數f的特定機器實現M,我們總是可以計算在特定輸入x上計算f所需的步驟數 - 這稱為M on x的運行時間 。 到底什么是“步驟”,在這方面并不太重要。 由于程序對于較大的輸入通常需要更長的時間,因此此運行時間總是以輸入的大小或長度(以位數為單位)進行度量。 這就是例如“n 2算法”的概念來自哪里 - 它是一個算法,在大小為n的輸入上最多需要n 2個步驟。 “算法”和“程序”的概念在這里大致相同。

對于某些k,運行時最多為n k的程序也稱為“多項式時間程序”。

復雜性理論中的兩類主要問題是P和NP:

  • P是具有多項式時間程序的問題類別L.

盡管指數k對于某些問題可能相當大,但P被認為是“可行”問題的類別,事實上,對于非人為問題,k通常不大于4.驗證比特幣交易在P中是個問題,正如評估一個多項式(并將該值限制為0或1)。 粗略地說,如果你只需要計算一些值而不是“搜索”某些東西,那么問題幾乎總是在P中。如果你必須搜索某些東西,那么你最終會在一個名為NP的類中結束。

NP類

對于NP中的所有問題,有zkSNARKs,實際上,今天存在的實用的zkSNARKs可以以通用的方式應用于NP中的所有問題。 目前尚不清楚在NP之外是否有任何問題存在zkSNARK。

NP中的所有問題總是具有一定的結構,源于NP的定義:

  • NP是具有多項式時間程序V的問題類別L,其可以用于驗證事實上給定多項式大小的所謂證人的事實。 更正式地說:
    L(x)= 1當且僅當存在某個多項式大小的字符串w(稱為見證)時 ,V(x,w)= 1

作為NP中問題的一個例子,讓我們考慮布爾公式可滿足性(SAT)的問題。 為此,我們使用歸納定義來定義一個布爾公式:

  • 任何變量x 1 ,x 2 ,x 3 ,...都是一個布爾公式(我們也使用任何其他字符來表示變量
  • 如果f是布爾公式,則?f是布爾公式(否定)
  • 如果f和g是布爾公式,則(f ^ g)和(f∨g)是布爾公式(連接/和,或/或)。

字符串“((x 1∧x 2 )∧?x2)”將是一個布爾公式。

如果有一種方法可以將真值分配給變量,以便公式計算為真(其中,真假,真假真,真假假等等,常規規則),則布爾公式是可滿足的 。 可滿足性問題SAT是所有可滿足的布爾公式的集合。

  • 如果f是一個可滿足的布爾公式,則SAT(f):= 1,否則為0

上面的例子“((x 1∧x 2 )∧?x 2 )”是不可滿足的,因此不在SAT中。 給定公式的見證是它令人滿意的分配,并驗證變量賦值是令人滿意的是一個可以在多項式時間內求解的任務。

P = NP?

如果將NP的定義限制為見證長度為零的字符串,則可以捕獲與P中相同的問題。因此,P中的每個問題也都在NP中。 復雜性理論研究的主要任務之一是顯示這兩類實際上是不同的 - NP中存在一個問題,它不在P中。看起來很明顯,情況就是這樣,但如果你能正式證明它,你可以贏得100萬美元 。 哦,只是作為一個便箋,如果你可以證明相反的話,那么P和NP是平等的,除了贏得這個數額之外,加密貨幣很有可能從一天到下一天不復存在。 原因在于,找到工作難題證明的解決方案,散列函數中的沖突或對應于地址的私鑰會更容易。 這些都是NP中的問題,既然你證明了P = NP,那么他們必須有一個多項式時間程序。 但是這篇文章并不是為了嚇倒你,大多數研究人員都認為P和NP是不相等的。

NP完全性

讓我們回到SAT。 這個看似簡單的問題的有趣屬性是它不僅存在于NP中,而且也是NP完全的。 這里的“complete”一詞與“Turing-complete”完全相同。 這意味著它是NP中最難的問題之一,但更重要的是 - NP-complete的定義 - 對NP中任何問題的輸入都可以轉化為SAT的等價輸入,其意義如下:

對于任何NP問題L,都有一個所謂的約化函數 f,它可以在多項式時間內計算,這樣:

  • L(x)= SAT(f(x))

這種簡化函數可以看作是一種編譯器:它將源代碼編寫成某種編程語言,然后轉換成另一種編程語言的等價程序,這種編程語言通常是一種具有某種語義行為的機器語言。 由于SAT是NP完全的,所以NP的任何可能的問題都存在這種減少,包括檢查例如比特幣交易在給定適當的塊散列情況下是否有效的問題。 有一個將事務轉換為布爾公式的歸約函數,當且僅當事務有效時,公式才可滿足。

縮小例子

為了看到這樣的減少,讓我們考慮評估多項式的??問題。 首先,讓我們定義一個多項式(類似于布爾公式)作為由整型常量,變量,加法,減法,乘法和(正確平衡)括號組成的表達式。 現在我們要考慮的問題是

  • PolyZero(f):= 1如果f是一個多項式,其中的變量取自集合{0,1}

我們現在將構建從SAT到PolyZero的縮減,從而表明PolyZero也是NP完全的(檢查它是否在NP中作為練習)。

在布爾公式的結構元素上定義簡化函數r就足夠了。 這個想法是,對于任何布爾公式f,值r(f)是具有相同數量變量的多項式,當且僅當r(f)(a 1 ,...,a k )為零,其中true對應于1,false對應于0,并且r(f)僅對來自{0,1}的變量采用值0或1:

  • r(x i ):=(1-x i
  • r(?f):=(1-r(f))
  • r((f ^ g)):=(1-(1-r(f))(1-r(g)))
  • r((f∨g)):= r(f)r(g)

人們可能假設r((f ^ g))將被定義為r(f)+ r(g),但是這將取多元式的值超出{0,1}集合。

使用r,公式((x∧y)∨?x)被轉化為(1-(1-(1-x))(1-(1-y))(1-(1-x)),

請注意,r的每個替換規則都滿足上述目標,因此r正確地執行了減少操作:

  • SAT(f)= PolyZero(r(f))或f滿足當且僅當r(f)在{0,1}

見證保存

從這個例子中,你可以看到,約簡函數只定義了如何翻譯輸入,但當你仔細觀察它時(或者讀取它證明它有效的減少),你也會看到一種方法來轉換有效的證人與輸入一起。 在我們的例子中,我們只定義了如何將公式轉換為多項式,但是通過證明我們解釋了如何轉換證人和令人滿意的分配。 交易不需要證人的同時轉換,但通常也是這樣做的。 這對于zkSNARK來說非常重要,因為證明者的唯一任務是說服驗證者證明這樣的證人存在,而不透露關于證人的信息。

二次跨度程序

在前一節中,我們看到了NP內部的計算問題如何相互減少,特別是存在NP完全問題,這些問題基本上只是NP中所有其他問題的重新解釋 - 包括交易驗證問題。 這使得我們可以很容易地找到NP中所有問題的通用zkSNARK:我們只是選擇一個合適的NP完全問題。 因此,如果我們想要展示如何使用zkSNARK來驗證事務,那么足以展示如何針對某個NP完全的問題進行處理,并且可能在理論上更容易處理。

本文和下一節基于GGPR12文件(鏈接的技術報告比期刊論文更多),作者發現稱為二次跨度程序(QSP)的問題特別適合于zkSNARK。 二次跨度程序由一組多項式組成,其任務是找出那些是另一個給定多項式的倍數的線性組合。 此外,輸入字符串的各個位限制您允許使用的多項式。 詳細地說(一般的QSP比較寬松一些,但我們已經定義了強壯的版本,因為它稍后會被使用):

長度為n的輸入的字段F上的QSP由下式組成

  • 在該域F上的一組多項式v 0 ,...,v m ,w 0 ,...,w m
  • F上的多項式t(目標多項式),
  • 一個內射函數f:{(i,j)| 1≤i≤n,j∈{0,1}}→{1,...,m}

這里的任務大致是將多項式乘以因子并將它們相加,使得總和(稱為線性組合 )是t的倍數。 對于每個二進制輸入字符串u,函數f限制可以使用的多項式,或更具體地說,它們在線性組合中的因子。 對于正式的:

當且僅當存在來自字段F的元組a =(a 1 ,...,a m ),b =(b 1 ,...,b m )時,輸入u被QSP 接受 (驗證)

  • (如果k = f(i,u [i]),對于某個i,(u [i]是u的第i個比特)
  • 一個k ,b k = 0,如果k = f(i,1 - u [i])
  • 目標多項式t除以v a w b其中v a = v 0 + a 1 v 0 + ... + a m v m ,w b = w 0 + b 1 w 0 + ... + b m w m

請注意,如果2n小于m,則在選擇元組a和b時仍有一些自由。 這意味著QSP僅適用于輸入達到一定大小的情況 - 這個問題通過使用非均勻復雜性來解決,這是我們現在不會涉及的一個主題,讓我們注意到,對于輸入通常很小的密碼學來說,它非常適用。

作為布爾公式的可滿足性的類比,可以將因子a 1 ,...,a m ,b 1 ,...,b m看作變量的分配,或者一般情況下可以看到NP證人。 為了看到QSP在NP中,注意所有驗證者必須做的事情(一旦她知道了因素)就是檢查多項式t除以v a w b ,這是一個多項式時間問題。

我們不會在此討論從泛型計算或電路到QSP的減少,因為它無助于理解一般概念,所以您必須相信我QSP是NP-complete(或者對于一些非統一的類似NP /聚)。 在實踐中,這種減少是實際的“工程”部分 - 它必須以一種聰明的方式完成,使得產生的QSP將盡可能小,并且還具有一些其他好的特征。

我們已經可以看到的關于QSP的一件事是如何更有效地驗證它們:驗證任務包括檢查一個多項式是否劃分另一個多項式。 這可以通過證明者提供另一個多項式h來促成,使得將任務轉變為檢查多項式身份或將其不同地置換為檢查th-v a w b = 0,即檢查確定多項式是零多項式。 這看起來相當容易,但我們稍后將使用的多項式相當大(程度大約是原始電路中柵極數的100倍),因此乘以兩個多項式不是一件容易的事。

因此,驗證者不是實際計算v a ,w b及其乘積,而是選擇一個秘密隨機點s(這個點是zCash的“有毒廢物”的一部分),計算數字t(s),v k (s)和w k (s)對于所有的k和它們,v a (s)和w b (s)并且僅檢查t(s)h(s)= v a (s)w b (s)。 因此,一堆多項式加法,與標量和多項式乘積的乘法被簡化為場乘法和加法。

只在一個點上檢查一個多項式身份,而不是在所有的點上當然會降低安全性,但是證明者可以作弊的唯一方法就是如果她不是零多項式,那就是如果她設法達到零的該多項式,但是因為她不知道s和0的個數(多項式的階數)與s(場元素的個數)的可能性相比是微小的,所以這在實踐中是非常安全的。

詳細zkSNARK

我們現在詳細描述用于QSP的zkSNARK。 它始于每個QSP必須執行的設置階段。 在zCash中,電路(交易驗證器)是固定的,因此QSP的多項式是固定的,它允許設置只執行一次,并重新用于所有交易,這只會改變輸入u。 對于生成公共參考字符串 (CRS)的設置,驗證者選擇一個隨機和秘密字段元素s并在該點加密多項式的值。 驗證者使用一些特定的加密E并在CRS中發布E(v k (s))和E(w k (s))。 CRS還包含其他幾個值,這使得驗證更有效,并且還增加了零知識屬性。 在那里使用的加密E具有一定的同態特性,這允許證明者在沒有實際知道v k (s)的情況下計算E(v(s))。

如何簡潔地和零知識地評估多項式

讓我們先看一個更簡單的情況,即只是在秘密點對多項式進行加密評估,而不是完整的QSP問題。

為此,我們修復一個組(這里通常選擇一個橢圓曲線)和一個生成器g。 請記住,如果有一個數字n(組順序),使得列表g 0 ,g 1 ,g 2 ,...,g n-1包含組中的所有元素,則稱該組為元素。 加密僅僅是E(x):= g x 現在驗證者選擇一個秘密字段元素并發布(作為CRS的一部分)

  • E(s 0 ),E(s 1 ),...,E(s d ) - d是所有多項式的最大度數

之后,s可以(并且必須)被遺忘。 這正是zCash所說的有毒廢物,因為如果有人能夠恢復這個以及稍后選擇的其他秘密值,他們可以通過在多項式中找到零來任意欺騙證據。

使用這些值,證明者可以在不知道s的情況下計算任意多項式f的E(f(s)):假設我們的多項式是f(x)= 4x2 + 2x + 4,并且我們想要計算E(f(s))那么我們得到E(f(s))= E(4s 2 + 2s + 4)= g 4s ^ 2 + 2s + 4 = E(s 2 )4E(s 1 )2E(s 0 )可以在不知道s的情況下從已發布的CRS中計算出來。

這里唯一的問題是,由于s被破壞,驗證者無法檢查證明者是否正確評估了多項式。 為此,我們還選擇另一個秘密字段元素α,并發布以下“移位”值:

  • E(αs0),E(αs1),...,E(αsd)

與s一樣,在設置階段之后,值α也被破壞,并且證明者和驗證者都不知道。 使用這些加密值,證明者可以類似地計算E(αf(s)),在我們的例子中,這是E(4s 2 +2αs+4α)= E(αs2) 4 E(αs1)2E(αs0 ) 4 因此,證明者發布A:= E(f(s))和B:= E(αf(s)),并且驗證者必須檢查這些值是否匹配。 她通過使用另一種主要成分來做到這一點:所謂的配對功能 e。 橢圓曲線和配對函數必須一起選擇,以便以下屬性適用于所有x,y:

  • e(g x ,g y )= e(g,g) xy

使用這個配對函數,驗證者檢查e(A, )= e(B,g) - 注意是驗證者已知的,因為它是CRS的一部分,為E(αs0)。 為了證明如果證明者沒有作弊,這個檢查是有效的,讓我們看看以下的等式:

e(g,g)= e(g f(s) )= e(g,g) αf(s)

e(B,g)= e( gαf(s) ,g)= e(g,g) αf(s)

然而,更重要的部分是證明者是否能夠以某種方式提出滿足檢查e(A, )= e(B,g)但不是E(f(s))的值A,B和E(αf(s)))。 這個問題的答案是“我們不希望”。 嚴重的是,這被稱為“指數假設的d-power知識”,并且作弊證明人是否可以做這樣的事情是未知的。 這個假設是為證明其他公鑰加密方案的安全性而做出的類似假設的延伸,并且這些假設同樣未知為真或假。

實際上,上述協議實際上并不允許驗證者檢查證明者是否評估了多項式f(x)= 4x2 + 2x + 4,驗證者只能檢查證明者是否在點s處評估了一些多項式。 QSP的zkSNARK將包含另一個值,允許驗證者檢查證明者的確評估了正確的多項式。

這個例子表明驗證者不需要評估完整的多項式來證實這一點,只需要評估配對函數即可。 在下一步中,我們將添加零知識部分,以便驗證者不能重構關于f(s)的任何內容,甚至不能重建加密值(E(f(s)))。

為此,證明者選擇一個隨機δ而不是A:= E(f(s))和B:= E(αf(s))),她通過A':= E(δ+ f(s) ))和B:= E(α(δ+ f(s))))。 如果我們假設加密不能被破壞,那么零知識屬性就非常明顯。 我們現在必須檢查兩件事情:1.證明者實際上可以計算這些值,并且2.驗證者的檢查仍然是真實的。

對于1.,請注意,A'= E(δ+ f(s))= gδ+ f(s) = gδgf(s) = E(δ)E(f(s))= E )A和類似地,B'= E(α(δ+ f(s))))= E(αδ+αf(s)))= gαδ+αf(s) = gαδgα F(S)

= E(α) δE (αf(s))= E(α) δB

對于2.,注意驗證者檢查的唯一事情是她接收到的值A和B對于某個值a滿足等式A = E(a)和B = E(αa),這對于a來說顯然是這種情況=δ+ f(s),這是a = f(s)的情況。

好的,所以我們現在知道一些關于證明者如何在加密的秘密點上計算多項式的加密值而沒有驗證者知道關于該值的任何事情的信息。 現在讓我們將其應用于QSP問題。

針對QSP問題的SNARK

請記住,在QSP中,給定多項式v 0 ,...,v m ,w 0 ,...,w m,目標多項式t(度至多為d)和二進制輸入串u。 證明者找到一個1 ,...,a m, b 1 ,...,b m (根據u有些限制)和一個多項式h

  • th =(v 0 + a 1 v 1 + ... + a m v m )(w 0 + b 1 w 1 + ... + b m w m )。

在上一節中,我們已經解釋了如何設置公共參考字符串(CRS)。 我們選擇秘密數字s和α并發布

  • E(s 0 ),E(s 1 ),...,E(s d )和E(αs0),E(αs1),...,E(αsd)

由于我們沒有單一的多項式,而是針對問題固定的多項式集合,所以我們也立即發布評估的多項式:

  • E(t(s)),E(αt(s)),
  • E(v 0 (s)),...,E(v m (s)),E(αv 0 (s)),...,E(αv m (s)),
  • E(w 0 (s)),...,E(w m (s)),E(αw 0 (s)),...,E(αw m (s)),

我們需要更多的秘密數βv,βw,γ(它們將用于驗證那些多項式是否被評估過,而不是某些任意多項式)并發布

  • E(γ),E(βvγ),E(βwγ),
  • E(βv v1 (s)),...,E(βv v m (s))
  • E(βw w1 (s)),...,E(βw w m (s))
  • E(βv t(s)),E(βw t(s))

這是完整的公共參考字符串。 在實際的實現中,CRS的某些元素是不需要的,但這會使表示變得復雜。

現在證明者做什么? 她使用上面解釋的減少來找出多項式h和值a 1 ,...,a m, b 1 ,...,b m 在這里,使用證人保留約簡是很重要的(見上文),因為只有這樣,值a 1 ,...,a m, b 1 ,...,b m才能與約簡一起計算,并且很難找到除此以外。 為了描述證明者向驗證者發送的證明作為證明,我們必須回到QSP的定義。

有一個內射函數f:{(i,j)| 1≤i≤n,j∈{0,1}}→{1,...,m},這限制了a 1 ,...,a m, b 1 ,...,b m的值 由于m相對較大,因此對于任何輸入都有不會出現在f的輸出中的數字。 這些指數不受限制,所以讓我們稱他們為自由并且定義v free (x)=Σk a k v k (x)其中k在所有指數中都是免費的 對于w(x)= b 1 w 1 (x)+ ... + b m w m (x),證明現在由

  • V free := E(v free (s)),W:= E(w(s)),H:= E(h(s)),
  • V'free:= E(αv free (s)),W':= E(αw(s)),H':= E(αh(s)),
  • Y:= E(βv vfree (s)+βw w(s)))

最后一部分用于檢查是否使用了正確的多項式(這是我們在另一個例子中未覆蓋的部分)。 請注意,所有這些加密值都可以由證明者只知道CRS而生成。

驗證者的任務如下:

由于k的值(其中k不是“自由”的指數)可以直接從輸入u計算出來(這也是驗證者已知的,這是要驗證的),驗證者可以計算缺失部分v的全部金額:

  • è(V (S))= E(Σ ?一個? v ?(S)),其中k的范圍在所有索引不是在我釋放

由此,驗證者現在使用配對函數e確認以下等式(不要害怕):

  • E(V ' 免費,G)= E(V 免費,克α)中,e(W',E(1))= E(W,E(α))中,e(H”,E(1))= e(H,E(α))
  • E(E(γ)中,Y)= E(E(β v γ),V 免費)E(E(β 瓦特 γ),W)
  • è(E(V 0(S))電子(V (S))V 免費,E(W 0(S))W)= E(H,E(T(S)))
  • 要掌握這里的一般概念,您必須明白,配對函數允許我們對加密值進行一些有限的計算:我們可以進行任意的加法,但只是一次乘法。 此加法來自加密本身已經加性同態的事實,并且單一乘法是由配對函數具有的兩個參數實現的。 因此,e(W',E(1))= e(W,E(α))在加密空間中基本上將W'乘以1,并將其與加密空間中乘以α的W進行比較。 如果您查看W和W'的值應該是 - E(w(s))和E(αw(s)),則檢查證明者是否提供了正確的證據。

    如果您還記得關于在秘密點評估多項式的??部分,這三個首先檢查基本上驗證了證明者確實評估了由CRS中的部分構建的多項式。 第二項用于驗證證明者使用正確的多項式v和w,而不僅僅是一些任意的。 其背后的思想是證明者無法通過某種其他方式計算加密組合E(βv vfree (s)+βw w(s))),而不是從E(v free (s) )和E(w(s))。 原因是值βv不是孤立的CRS的一部分,而是僅與數值v k (s)結合,并且βw僅與多項式w k (s)結合而已知。 “混合”他們的唯一方法是通過同樣加密的γ。

    假設證明者提供了正確的證據,讓我們檢查平等是否成立。 左側和右側分別是

    • e(E(γ),Y)= e(E(γ),E(βv vfree (s)+βw w(s)))= e(g,g) γ(βv v free )+βw w (s))
    • e(E(βvγ),V free )e(E(βwγ),W)= e(E(βvγ),E(v free (s)))e (g,g) e,w(s)))= e(g,g) (βvγ)v free (s) e βv vfree (s)+βw w(s))

    (s)+ a 1 v 1 (s)+ ... + a m v m (s))(w 0 (s)+ b 1 w 1 (s)+ ... + b m w(s))= h(s)t(s),這是QSP問題的主要條件。 注意,對加密值的乘法轉換為對未加密值的加法,因為E(x)E(y)= g x g y = g x + y = E(x + y)。

    增加零知識

    正如我在開始時所說的,關于zkSNARKS的顯著特征比零知識部分更簡潔。 我們現在將看到如何增加零知識,下一部分將更加簡單地介紹簡潔性。

    這個想法是,證明者將一些數值“轉移”一個隨機秘密數量,并平衡等式另一端的偏移。 證明者選擇隨機δ自由度δw并在證明中執行以下替換

    • v 自由 (s)被v 自由 (s)+δ 自由 t(s)取代
    • w(s)由w(s)+δw t(s)代替。

    通過這些替換,含有證人因素編碼的V free和W值基本上變得不可區分形式的隨機性,因此不可能提取證人。 大多數平等檢查對修改是“免疫的”,我們仍然必須糾正的唯一值是H或h(s)。 我們必須確保

    • (s)+ ... b m w(s))(w 0 (s)+ a 1 v 1 (s)+ ... + a m v m = h(s)t(s),換句話說
    • (s)+ v free (s))(w 0 (s)+ w(s))= h(s)t(s)

    仍然成立。 隨著修改,我們得到了

    • (s)+ v free (s)+δfree t(s))(w 0 (s)+ w(s)+δw t(s))

    并通過擴大產品,我們看到用h取代h(s)

    • (s)+ v 自由 (s))+(δ 自由 δw)t((s)+δ 自由 (w 0 (s)+ w(s))+δw S)

    會做的伎倆。

    投入與證人規模之間的權衡

    正如您在前面的章節中看到的,證明只包含一個組的7個元素(通常是橢圓曲線)。 此外,驗證者所要做的工作是檢查涉及配對函數和計算E(v in (s))的一些等式,這是一個輸入大小為線性的任務。 值得注意的是,驗證字符串的大小和驗證QSP(沒有SNARKs)所需的計算量都不起任何作用。 這意味著SNARK-驗證極其復雜的問題和非常簡單的問題都需要付出相同的努力。 主要原因是因為我們只檢查單點的多項式標識,而不檢查完整的多項式。 多項式可以變得越來越復雜,但一個點總是一個點。 影響驗證工作的唯一參數是安全級別(即組的大小)和輸入的最大大小。

    通過將其中的一些參數轉換為證人,可以減少第二個參數,輸入大小:

    而不是驗證函數f(u,w),其中u是輸入,w是證人,我們取一個散列函數h并驗證

    • f'(H,(u,w)):= f(u,w)∧h(u)= H。

    這意味著我們用輸入h(u)的散列(它應該更短)替換輸入u,并驗證存在H(u)的一些值x(因此很可能等于u )除了檢查f(x,w)。 這基本上將原始輸入u移動到見證字符串中,從而增加見證大小,但將輸入大小減小到常量。

    這是顯著的,因為它使我們能夠在不斷的時間內任意地檢驗復雜的語句。

    這如何與以太坊相關?

    由于驗證任意計算是以太坊區塊鏈的核心,zkSNARK當然與以太坊非常相關。 使用zkSNARK,不僅可以執行任何人都可以驗證的秘密任意計算,而且可以高效地執行此操作。

    雖然以太坊使用圖靈完整虛擬機,但目前還不可能在以太坊實施zkSNARK驗證程序。 驗證者任務在概念上可能看起來很簡單,但配對函數實際上很難計算,因此它將使用比單個塊中當前可用的更多的氣體。 橢圓曲線乘法已經相當復雜,并且配對將其轉換到另一個級別。

    現有的zkSNARK系統(如zCash)為每項任務使用相同的問題/電路/計算。 在zCash的情況下,它是交易驗證者。 在Ethereum上,zkSNARK不會局限于單個計算問題,相反,每個人都可以為其專門的計算問題建立一個zkSNARK系統,而無需啟動新的區塊鏈。 添加到以太坊的每個新zkSNARK系統都需要一個新的秘密可信設置階段(某些部分可以重復使用,但不是全部),即必須生成新的CRS。 也可以為“通用虛擬機”添加zkSNARK系統。 這不需要為新用例創建新設置,就像您不需要為以太坊新智能合約引導新區塊鏈一樣。

    讓zkSNARKs進入以太坊

    有多種方法可以為Ethereum啟用zkSNARK。 所有這些都降低了配對功能和橢圓曲線操作的實際成本(其他所需操作已經足夠便宜),因此也可以降低這些操作的氣體成本。

  • 提高EVM的(保證)性能
  • 僅對某些配對函數和橢圓曲線乘法改進EVM的性能
  • 第一種選擇當然是從長遠看更好的方案,但難以實現。 目前,我們正在努力為EVM添加功能和限制,這將允許更好的實時編譯和解釋,而無需對現有實施進行太多必要的更改。 另一種可能是完全更換EVM并使用諸如eWASM之類的東西。

    第二種選擇可以通過迫使所有以太坊客戶端實現一定的配對函數并在某個橢圓曲線上乘以所謂的預編譯合約來實現。 好處是這可能更容易和更快實現。 另一方面,缺點是我們固定在一定的配對函數和一定的橢圓曲線上。 以太坊的任何新客戶都必須重新實施這些預編譯的合同。 此外,如果有進步,有人發現更好的zkSNARK,更好的配對函數或更好的橢圓曲線,或者如果在橢圓曲線,配對函數或zkSNARK中找到缺陷,我們將不得不添加新的預編譯合約。

    https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/

    總結

    以上是生活随笔為你收集整理的【译】zkSNARKs in a nutshell的全部內容,希望文章能夠幫你解決所遇到的問題。

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