ZKSwap團隊解讀零知識證明算法之Bulletproofs:Arithmetic Circuits

Bulleproofs 算法有兩個方面的應用,

一個是 Range proof:

第一講: 理解零知識證明算法之Bulletproofs –Range Proof 1

第二講: 理解零知識證明算法之Bulletproofs –Range Proof 2

第三講: 理解零知識證明算法之Bulletproofs –Range Proof 3

另一個是 general arithmetic circuits,本編文章就來主要分享 Bulletproofs 在后者上的應用,

Arithmetic Circuits

了解 ZK-SNARK 算法應該都知道算術環路的概念,下面一張圖展示了 zk-snark 算法中,算術環路的設計規則(以 V 神的 x3 + x + 5 = 37為例)。

Circuit 設計規則:

1.由乘法門和加法門組成,每個門固定兩個輸入一個輸出;

2.不標記通過加法門連接乘法門的線,如圖中綠線,僅起到連接作用;

3.同一條線直接或間接連接多個乘法門,僅表示為一條有效的線,為了方便理解,用紫色虛線表示其連接關系;

4.MulGate 處的取值為圖中紅色字體所示

5.黃色線條為有效連接線

6.橙色線條表示 MulGate 對應的一階約束

那Bulletproofs算法的算術環路的設計規則是什么樣的呢?我們看看下圖(仍以 V 神的x3 + x + 5 = 37為例)。

Circuit 設計規則:

1.由乘法門和加法門組成,每個門固定兩個輸入一個輸出;

2.不標記加法門

3.不標記有常量的乘法門

4.紅色字體表示乘法門的索引

5.黃色字體表示乘法門的輸入和輸出

6.橙色線條表示乘法門對應的一階約束

7.藍色線條表示相鄰乘法門間的一致性約束

因此,一個完整有效的算數電路應該滿足:

1.每個乘法門對應的的約束成立

2.乘法門之間的一致性約束成立

Zk-snark 的算術電路通過 R1CS 滿足了上述兩個條件。

1.每個 R1CS 表示一個乘法門的約束

2.相鄰乘法門的輸出是下一個乘法門的輸入,如圖中的 y,sym_1,sym_2

Bulletproofs 的算術環路以通過以下兩種方式滿足上述兩個條件:

1.每個乘法門對應的約束成立

2.上個乘法門的輸出等于下個乘法門的輸入,

看起來兩個算法的證明一個算術電路有效的思想是一樣,但是由于兩個電路的標注規則不同,就產生兩個不同的約束結果。

Zk-snark 算法以 valid wires 為基本要素,每個 wire 有左輸入,右輸入,和輸出三個屬性

Bulletproofs 算法以 valid Mulgate 為基本要素,每個 Mulgate 有左輸入,右輸入和輸出三個屬性

最后,附上一張對比圖:

總結 以上可以看出,對數算術環路的滿足性問題,不同的算法具有不同的電路描述方式, Zk-snark 算法由 Circuits 轉化到 QAP,最終生成的證據僅僅再幾十個字節大小;

Bulletproofs 的算法由 Circuits 轉化到 inner productor,生成的證明的大小和算術電路的乘法門的個數 n 有關 O(log(n*Q ),電路越大,證據越大,

附錄

1.Bulletproofs 論文:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8418611

2.BCG+ 講述了算術電路的另外一種描述形式 https://eprint.iacr.org/2017/1066.pdf

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧