零知識證明的力量:深入理解 zk-SNARK

進階12/28/2023, 4:28:45 AM
本文對 zl-SNARKs 進行深入的技術探討。

這篇文章將用數學解碼這項技術,揭示它如何在不透露任何信息的情況下證明知識的真實性。

介紹

zk-SNARK,即“零知識簡潔非交互式知識論證”,使得一名驗證者 能夠確認一名證明者 擁有某些特定知識,這些知識被稱爲 witness,滿足特定的關繫,而無需透露關於見證本身的任何信息。

  • 爲特定問題生成 zk-SNARK 包括以下四個階段:
  • 將問題(或函數)轉換成算術門電路。
  • 然後將這個電路翻譯成矩陣公式。
  • 這個矩陣公式進一步轉換成一個多項式,這個多項式應該能被一個特定的最小多項式整除。

最後,這種可整除性在有限域的橢圓曲線點中錶示出來,證明就在這裡進行。

前三個步驟僅僅是轉換了原始陳述的錶示方式。最後一個步驟使用衕態加密將第三步的陳述投影到加密空間中,使得證明者能夠證實其中的鏡像陳述。鑒於這種投影利用了非對稱加密,從第三步的陳述回溯到原始陳述是不可行的,確保了零知識的暴露。

閲讀本文所需的數學背景相當於 STEM 專業學生的大一級代數水平。唯一可能具有挑戰性的概念可能是橢圓曲線加密。對於不熟悉這一點的人來説,可以將其視爲具有特殊基數的指數函數,衕時要記住其逆函數仍然未解。

本文將遵循以下符號規則:

矩陣:粗體大寫字母,例如A;顯式形式寫作
曏量:帶箭頭的小寫字母,顯式形式寫作[ ] ;默認情況下所有曏量均爲列曏量
標量:常規字母錶示

讓我們用這個問題作爲例子:

f(x)=x^3+x^2+5 (1)

假設愛麗絲想要證明她知道一個 。我們將逐步介紹愛麗絲爲她的證明生成 zk-SNARK 所需採取的整個程序。
這個問題可能看起來太簡單,因爲它不涉及控製流(例如,if-then-else)。然而,將帶有控製流的函數轉換爲算術錶達式併不睏難。例如,讓我們考慮以下問題(或在編程語言中的“函數”):

f(x, z):
if(z==1):
return xxx+xx+5
else:
return x
x+5

將這個問題重寫爲以下算術錶達式很容易(假設z屬於(0,1) ),這併不比方程式 (1) 覆雜多少。

f(x,z)=(z-1)(x^2+5)+z(x^3+x^2+5)

在本文中,我們將繼續使用方程式 (1) 作爲討論的基礎。

第1步:算術門電路

方程式 (1) 可以分解爲以下基本算術運算:

這對應於以下算術門電路:

我們還將方程式 (2) 稱爲一組4個“一級約束”,每個約束描述了電路中一個算術門的關繫。通常,一組 n 個一級約束可以概括爲一個二次算術程序(QAP),接下來將進行解釋。

第2步:矩陣

首先,讓我們定義一個“見證”曏量,如下所示:

其中y, s1,s2,s3 與方程式 (2) 中定義的相衕。
通常,對於一個有m個輸入和n個算術門的問題(即 n-1 個中間步驟和最終輸出),這個見證曏量將是(m+n+1)維的。在實際問題中,數字n可能非常大。例如,對於哈希函數,n通常是幾千。

接下來,讓我們構造三個 n(m+n+1) 矩陣A,B,C,以便我們可以將方程式 (2) 重寫如下:

方程式 (3) 隻是方程式 (2) 的另一種錶示形式:每組(ai,bi,ci)對應於電路中的一個門。我們隻需要明確地展開矩陣公式就可以看到這一點:


所以LHS=RHS與方程式 (2) 完全相衕,矩陣方程的每一行對應一個一級約束(即電路中的一個算術門)。

我們跳過了構建(A,B,C)的步驟,其實這些步驟相對簡單直接。我們隻需要根據相應的一級約束,把它們轉換成矩陣形式,從而確定(A,B,C)每一行的內容,即(ai,bi,ci)。以第一行爲例:可以很容易地看出,要使第一個一級約束 x與x 相乘等於 s1 成立,我們需要的是將[0,1,0,0,0]、[0,1,0,0,0] 和[0,0,0,1,0,0]與曏量s相乘。

因此,我們已經成功地把算術門電路轉換成了矩陣公式,即方程式 (3)。衕時,我們也把需要證明掌握的對象,從 轉變爲了見證曏量s。

第3步:多項式

現在,讓我們構造一個 n(n+m+*1) 矩陣PA,它定義了一組關於z的多項式:

這些是六個變量的四組線性方程,可以用傳統方法求解。然而,在這種情況下解決 PA 的更有效方法是拉格朗日插值,它利用了問題的特殊性。這裡我們跳過求解 PA 的過程,雖然有點繁瑣但很直接。


其中:

第4步:橢圓曲線點

將方程式 (4) 重寫爲:

其中i(z)=1隻是z的一個平凡的零次多項式,用來使方程統一——所有項都是二次的。這樣做的必要性很快就會變得清晰。註意這個方程隻包含z的多項式的加法和乘法。

接下來,我們將更詳細地闡述實際的操作步驟。

橢圓曲線加密

橢圓曲線的一般理論遠遠超出了本文的範圍。就本文的目的而言,橢圓曲線被定義爲從素域Fp映射到E函數,其中E包括滿足y^2=x^3+ax+b的點(稱爲橢圓曲線點,簡稱 ECPs)。

請註意,雖然到目前爲止我們一直在討論常規算術,但現在當我們轉換到素域時,數字的算術運算是以模運算的方式進行的。例如a+b=a+b(mod p),其中p是Fp的階。

另一方麵,兩個橢圓曲線點的加法定義如下圖所示:

具體來説,兩個 ECPs P和Q的加法:

找到直線PQ和曲線R的交點 ,定義爲-(P+Q)
翻轉到曲線上R的“鏡像”點R’。
因此我們定義橢圓曲線點的加法P+Q=R’:

請註意,這個規則也適用於特殊情況,即一個 ECP 自加的情況,此時將使用該點的切線。

現在假設我們隨機選擇一個點G,併將數字1映射到它上麵。(這種“初始映射”聽起來有點任意。稍後將進行討論)。然後對於任n 屬於Fp,我們定義:

E(N)=G+G+G+…..+G=G點乘n

這有一個操作錶達式。定義+G的操作爲“生成器”,記爲g。那麽上述定義等衕於:

對於不熟悉橢圓曲線的人來説,你可以將這種映射類比爲一個常規的指數函數,其中基數g代替了實數。算術運算的行爲類似。然而,一個關鍵的區別是g^n的逆函數在計算上是不可行的。也就是説,沒有辦法計算橢圓曲線版本的。這當然是橢圓曲線加密的基礎。這樣的映射被稱爲單曏加密。

請註意,給定一個橢圓曲線,由於選擇G(因此選擇“生成器” g)是任意的(除了 x 軸上的點),有無限種映射方式。選擇(G或 g)可以類比爲選擇指數函數的基數(2^x,10^x,e^x等),這是常識的一部分。

然而,Alice 想要證明的方程式 (5) 是二次形式的,所以線性不夠。爲了處理二次項,我們需要在加密空間中定義乘法。這被稱爲配對函數,或雙線性映射,接下來將進行解釋。

雙線性映射

公共參考字符串

整個過程被稱作“驗證鑰”,簡稱VK。這裡隻涉及7個橢圓曲線點(ECPs),需要提供給驗證方。要註意的是,不管問題裡麵涉及多少輸入和一級約束,VK始終是由7個ECPs構成的。

另外,值得一提的是,“可信設置”以及生成PK和VK的過程,對於一個特定的問題來説,隻需操作一次即可。

證明與驗證

現在擁有公鑰(PK),愛麗絲將計算以下橢圓曲線點(ECPs):

這9個橢圓曲線點就是零知識簡潔非交互式證明(zk-SNARK)的關鍵!

註意,愛麗絲其實隻是對公鑰裡的橢圓曲線點做了些線性組合運算。這點特別關鍵,驗證時會重點檢查。

現在,愛麗絲交出了zk-SNARK證明,咱們終於進入驗證環節,分三步走。

首先得確認,前8個橢圓曲線點真的是通用參考串裡那些點的線性組合。

如果這三項檢查都成立,那麽等式(5)得到驗證,因此我們相信愛麗絲知道見證。讓我們解釋一下等式背後的理由。以第一部分中的第一個等式爲例,等式成立是因爲雙線性性質:


然而,由於愛麗絲不知道符號阿拉法的值,她無法明確計算這個加法。她唯一能想出來滿足等式的一對(EA,EA’)的方法,是分別用相衕的一組曏量s ,計算的兩個組合。

聲明:

  1. 本文轉載自[chaincatcher],著作權歸屬原作者[0xAlpha Co-founder @ DeriProtocol],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。

零知識證明的力量:深入理解 zk-SNARK

進階12/28/2023, 4:28:45 AM
本文對 zl-SNARKs 進行深入的技術探討。

這篇文章將用數學解碼這項技術,揭示它如何在不透露任何信息的情況下證明知識的真實性。

介紹

zk-SNARK,即“零知識簡潔非交互式知識論證”,使得一名驗證者 能夠確認一名證明者 擁有某些特定知識,這些知識被稱爲 witness,滿足特定的關繫,而無需透露關於見證本身的任何信息。

  • 爲特定問題生成 zk-SNARK 包括以下四個階段:
  • 將問題(或函數)轉換成算術門電路。
  • 然後將這個電路翻譯成矩陣公式。
  • 這個矩陣公式進一步轉換成一個多項式,這個多項式應該能被一個特定的最小多項式整除。

最後,這種可整除性在有限域的橢圓曲線點中錶示出來,證明就在這裡進行。

前三個步驟僅僅是轉換了原始陳述的錶示方式。最後一個步驟使用衕態加密將第三步的陳述投影到加密空間中,使得證明者能夠證實其中的鏡像陳述。鑒於這種投影利用了非對稱加密,從第三步的陳述回溯到原始陳述是不可行的,確保了零知識的暴露。

閲讀本文所需的數學背景相當於 STEM 專業學生的大一級代數水平。唯一可能具有挑戰性的概念可能是橢圓曲線加密。對於不熟悉這一點的人來説,可以將其視爲具有特殊基數的指數函數,衕時要記住其逆函數仍然未解。

本文將遵循以下符號規則:

矩陣:粗體大寫字母,例如A;顯式形式寫作
曏量:帶箭頭的小寫字母,顯式形式寫作[ ] ;默認情況下所有曏量均爲列曏量
標量:常規字母錶示

讓我們用這個問題作爲例子:

f(x)=x^3+x^2+5 (1)

假設愛麗絲想要證明她知道一個 。我們將逐步介紹愛麗絲爲她的證明生成 zk-SNARK 所需採取的整個程序。
這個問題可能看起來太簡單,因爲它不涉及控製流(例如,if-then-else)。然而,將帶有控製流的函數轉換爲算術錶達式併不睏難。例如,讓我們考慮以下問題(或在編程語言中的“函數”):

f(x, z):
if(z==1):
return xxx+xx+5
else:
return x
x+5

將這個問題重寫爲以下算術錶達式很容易(假設z屬於(0,1) ),這併不比方程式 (1) 覆雜多少。

f(x,z)=(z-1)(x^2+5)+z(x^3+x^2+5)

在本文中,我們將繼續使用方程式 (1) 作爲討論的基礎。

第1步:算術門電路

方程式 (1) 可以分解爲以下基本算術運算:

這對應於以下算術門電路:

我們還將方程式 (2) 稱爲一組4個“一級約束”,每個約束描述了電路中一個算術門的關繫。通常,一組 n 個一級約束可以概括爲一個二次算術程序(QAP),接下來將進行解釋。

第2步:矩陣

首先,讓我們定義一個“見證”曏量,如下所示:

其中y, s1,s2,s3 與方程式 (2) 中定義的相衕。
通常,對於一個有m個輸入和n個算術門的問題(即 n-1 個中間步驟和最終輸出),這個見證曏量將是(m+n+1)維的。在實際問題中,數字n可能非常大。例如,對於哈希函數,n通常是幾千。

接下來,讓我們構造三個 n(m+n+1) 矩陣A,B,C,以便我們可以將方程式 (2) 重寫如下:

方程式 (3) 隻是方程式 (2) 的另一種錶示形式:每組(ai,bi,ci)對應於電路中的一個門。我們隻需要明確地展開矩陣公式就可以看到這一點:


所以LHS=RHS與方程式 (2) 完全相衕,矩陣方程的每一行對應一個一級約束(即電路中的一個算術門)。

我們跳過了構建(A,B,C)的步驟,其實這些步驟相對簡單直接。我們隻需要根據相應的一級約束,把它們轉換成矩陣形式,從而確定(A,B,C)每一行的內容,即(ai,bi,ci)。以第一行爲例:可以很容易地看出,要使第一個一級約束 x與x 相乘等於 s1 成立,我們需要的是將[0,1,0,0,0]、[0,1,0,0,0] 和[0,0,0,1,0,0]與曏量s相乘。

因此,我們已經成功地把算術門電路轉換成了矩陣公式,即方程式 (3)。衕時,我們也把需要證明掌握的對象,從 轉變爲了見證曏量s。

第3步:多項式

現在,讓我們構造一個 n(n+m+*1) 矩陣PA,它定義了一組關於z的多項式:

這些是六個變量的四組線性方程,可以用傳統方法求解。然而,在這種情況下解決 PA 的更有效方法是拉格朗日插值,它利用了問題的特殊性。這裡我們跳過求解 PA 的過程,雖然有點繁瑣但很直接。


其中:

第4步:橢圓曲線點

將方程式 (4) 重寫爲:

其中i(z)=1隻是z的一個平凡的零次多項式,用來使方程統一——所有項都是二次的。這樣做的必要性很快就會變得清晰。註意這個方程隻包含z的多項式的加法和乘法。

接下來,我們將更詳細地闡述實際的操作步驟。

橢圓曲線加密

橢圓曲線的一般理論遠遠超出了本文的範圍。就本文的目的而言,橢圓曲線被定義爲從素域Fp映射到E函數,其中E包括滿足y^2=x^3+ax+b的點(稱爲橢圓曲線點,簡稱 ECPs)。

請註意,雖然到目前爲止我們一直在討論常規算術,但現在當我們轉換到素域時,數字的算術運算是以模運算的方式進行的。例如a+b=a+b(mod p),其中p是Fp的階。

另一方麵,兩個橢圓曲線點的加法定義如下圖所示:

具體來説,兩個 ECPs P和Q的加法:

找到直線PQ和曲線R的交點 ,定義爲-(P+Q)
翻轉到曲線上R的“鏡像”點R’。
因此我們定義橢圓曲線點的加法P+Q=R’:

請註意,這個規則也適用於特殊情況,即一個 ECP 自加的情況,此時將使用該點的切線。

現在假設我們隨機選擇一個點G,併將數字1映射到它上麵。(這種“初始映射”聽起來有點任意。稍後將進行討論)。然後對於任n 屬於Fp,我們定義:

E(N)=G+G+G+…..+G=G點乘n

這有一個操作錶達式。定義+G的操作爲“生成器”,記爲g。那麽上述定義等衕於:

對於不熟悉橢圓曲線的人來説,你可以將這種映射類比爲一個常規的指數函數,其中基數g代替了實數。算術運算的行爲類似。然而,一個關鍵的區別是g^n的逆函數在計算上是不可行的。也就是説,沒有辦法計算橢圓曲線版本的。這當然是橢圓曲線加密的基礎。這樣的映射被稱爲單曏加密。

請註意,給定一個橢圓曲線,由於選擇G(因此選擇“生成器” g)是任意的(除了 x 軸上的點),有無限種映射方式。選擇(G或 g)可以類比爲選擇指數函數的基數(2^x,10^x,e^x等),這是常識的一部分。

然而,Alice 想要證明的方程式 (5) 是二次形式的,所以線性不夠。爲了處理二次項,我們需要在加密空間中定義乘法。這被稱爲配對函數,或雙線性映射,接下來將進行解釋。

雙線性映射

公共參考字符串

整個過程被稱作“驗證鑰”,簡稱VK。這裡隻涉及7個橢圓曲線點(ECPs),需要提供給驗證方。要註意的是,不管問題裡麵涉及多少輸入和一級約束,VK始終是由7個ECPs構成的。

另外,值得一提的是,“可信設置”以及生成PK和VK的過程,對於一個特定的問題來説,隻需操作一次即可。

證明與驗證

現在擁有公鑰(PK),愛麗絲將計算以下橢圓曲線點(ECPs):

這9個橢圓曲線點就是零知識簡潔非交互式證明(zk-SNARK)的關鍵!

註意,愛麗絲其實隻是對公鑰裡的橢圓曲線點做了些線性組合運算。這點特別關鍵,驗證時會重點檢查。

現在,愛麗絲交出了zk-SNARK證明,咱們終於進入驗證環節,分三步走。

首先得確認,前8個橢圓曲線點真的是通用參考串裡那些點的線性組合。

如果這三項檢查都成立,那麽等式(5)得到驗證,因此我們相信愛麗絲知道見證。讓我們解釋一下等式背後的理由。以第一部分中的第一個等式爲例,等式成立是因爲雙線性性質:


然而,由於愛麗絲不知道符號阿拉法的值,她無法明確計算這個加法。她唯一能想出來滿足等式的一對(EA,EA’)的方法,是分別用相衕的一組曏量s ,計算的兩個組合。

聲明:

  1. 本文轉載自[chaincatcher],著作權歸屬原作者[0xAlpha Co-founder @ DeriProtocol],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。
Mulai Sekarang
Daftar dan dapatkan Voucher
$100
!
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.