Exness外匯:技術幹貨 | 理解零知識證明算法之Bulletproofs:Range Proof I
發表於 2023-02-11 03:44 作者: 區塊鏈情報速遞pro
Exness外匯
前言
Bulletproofs,又一個有意思的零知識證明算法,相信讀者已經很熟悉它了。和zk-snark相比,它不需要可信設置;和zk-stark算法相比,它具有較小的proof size。根據論文,它有兩個方面的應用:1. 用於range proof;2. 用於一般算術電路的零知識證明。下面,讓我們先看一下Bulletproofs是如何高效的實現第一點。Range proof
1. 預備知識
aL:表示向量{a1,a2……an}
2n:表示向量{20,21…2n-1}
<a, b>:表示向量內積 ∑ ai*bi,結果是一個值
a o b:向量對應位相乘,{a1*b1……an*bn},結果是一個向量
2. 證明
Alice想要證明 v ⸦ [0, 2n-1]=>則,需要證明一個relation得成立,如下所示:
{(g、h ⸦ G,V,n;v,r ⸦ Zp):V = grhv ^ v ⸦ [0, 2n-1] }
public-x witness-w relation-R
即,對於公开信息x,Alice有隱私信息w,使得關系R成立。
令 aL爲金額v的在範圍[0, 2n-1]內的二進制形式,則aL = {a1,a2……an}⸦{0,1}n,且滿足<aL, 2n> = v。因此,證明者需要證明以下幾個等式相等:
V = grhv (1)
<aL, 2n> = v (2)
aL o aR = 0n (3)
aR = aL - 1n (4)
等式(1)確保了承諾V和金額v的綁定關系,等式(2)確保了v的範圍,等式(3)(4)確保了aL 元素只屬於{0,1}。等式(2)/(3)/(4)總共包含了2n+1個約束,其中公式(2)1個,公式(3)(4)各n個。接下來,爲了效率,我們需要把2n+1個約束轉換成1個約束。3. 2n+1個約束轉換成1個約束
=>預備:從Zp中任意選擇一個數y,則b = 0n是等式<b, yn> = 0成立的充分條件;因爲當b != 0n,等式成立的概率僅有n/p,p是有限域,遠大於n。(理解:如果b != 0n ,把等式看作求n階一次多項式的零點即可)因此,如果有<b, yn> = 0,那么驗證者愿意相信b != 0n 。
利用這個理論,我們把等式(2)/(3)/(4)做以下轉換:
1. 驗證者隨機選取一個數y發送給證明者;
2. 證明者要證明:
<aL, 2n> = v (5)
<aL , aR o yn> = 0 (6)
<aL - 1n- aR, yn> = 0 (7)
同理,等式(5)確保了v的範圍,等式(6)(7)確保了aL 元素只屬於{0,1}。此時2n+1個約束轉換成3個約束,接下來,還需要做進一步的處理:Exness外匯 1. 驗證者隨機選取一個數z發送給證明者:
2. 證明者利用z對公式(5)(6)(7)進行线性組合,得到如下公式:
z2 * <aL, 2n> + z * <aL - 1n- aR, yn> + <aL , aR o yn> = z2 * v (8)
至此,我們已經把2n+1個約束轉換成1個約束。下面我們對公式(8)做進一步的優化,把三個點積優化成1個點積4. 三個點積優化成1個點積
=> z2 * <aL, 2n> + z * <aL - 1n- aR, yn> + <aL , aR o yn> = z2 * v
=> <aL, z2 * 2n> + <aL, z * yn> - <z * 1n, yn> - <z * aR, yn> + <aL , aR o yn> = z2 * v
=> <aL , aR o yn + z * yn + z2 * 2n> - <z * 1n , yn> + <z * 1n, yn o aR> = z2 * v
=> <aL , aR o yn + z * 1n o yn + z2 * 2n> - <z * 1n, yn + yn o aR> = z2 * v
=> <aL , (aR + z * 1n) o yn + z2 * 2n> - <z * 1n, yn + yn o aR> = z2 * v
=> <aL , (aR + z * 1n) o yn + z2 * 2n> - <z * 1n, (aR + z * 1n) o yn + z2 * 2n -z * 1n * yn + yn - z2*2n> = z2 * v
=> <aL - z * 1n, (aR + z * 1n) o yn + z2 * 2n> - <z * 1n , -z * 1n * yn + yn - z2*2n> = z2 * v
=> <aL - z * 1n, (aR + z * 1n) o yn + z2 * 2n> = z2 * v + <z * 1n , -z * 1n * yn + yn - z2*2n>
=> <aL - z * 1n, (aR + z * 1n) o yn + z2 * 2n> = z2 * v + <z * 1n , (-z * 1n + 1n) * yn > - <z * 1n , z2*2n>
=> <aL - z * 1n, (aR + z * 1n) o yn + z2 * 2n> = z2 * v + (z – z2) * <1n, yn> - z3 * <1n, 2n> (9)
=> 令
L = aL - z * 1n
R = (aR + z * 1n) o yn + z2 * 2n
δ = (z – z2) * <1n, yn> - z3 * <1n, 2n>
5. 驗證:
1. 證明者把L/R/V發送給驗證者;2. 驗證者事先算好 δ
3. 驗證者根據L算出來aL,根據<aL, 2n> = v算出v
4. 驗證者根據L,R,v,δ驗證等式<L, R> = z2 * v +δ
因爲y,z都是驗證者提供,因此如果驗證者如果能驗證公式(9)成立,則相信等式(5)(6)(7)成立,則相信等式(2)(3)(4)成立,則相信v滿足關系v ⸦ [0, 2n-1]。
但是,可以看到上述過程,泄露了v的信息,因此需要一個零知識證明協議。
6. 一個零知識證明協議
由於L,R包含了v的相關信息,因此,我們需要添加兩個盲因子sL、sR來隱藏aL,aR。如公式(10)(11)所示:l(X) = (aL - z * 1n) + sL * X ) (10)
r(X) = (aR + z * 1n + sR * X) o yn + z2 * 2n (11)
此時,定義公式(12)t(X) = <l(X), r(X)> = t0 + t1*X + t2 * X2 (12)
可以看出系數t0是l(x)和r(x)常數項的乘積,即滿足:t0 = <L, R> = z2*v + δ
因此,問題由證明:<L, R> = z2*v + δ
轉化成了,在任意一點x,驗證者驗證多項式值l(x), r(x), t(x)滿足關系:<l(x), r(x)> = t(x)
多項式值l(x), r(x), t(x)由證明者提供,爲了保證l(x),r(x) well-formed,即:l(x) = (aL - z * 1n) + sL * x )
r(x) = (aR + z * 1n + sR * x) o yn + z2 * 2n
需要校驗:P = A * Sx * g(-z) *(h`)z*yn+z^2*2^n
= hαgaLhaR * (hρgsLhsR)x * g(-z) * (h`)z*y^n+z^2*2^n
= hαgaLhaR * hρxgsL*xhsR*x * g(-z) * (h`)z*y^n+z^2*2^n
= hα+ρx * gaL+ sL * x – z * 1^n * haR + sR * x * (h`)z*y^n+z^2*2^n
= hα+ρx * gaL+ sL * x – z * 1^n * (h`)y^n o (aR + sR * x) * (h`)z*y^n+z^2*2^n
Exness外匯 = hα+ρx * gaL+ sL * x – z * 1^n * (h`)y^n o (aR + sR * x) + z*y^n+z^2*2^n
= hα+ρx * gaL+ sL * x – z * 1^n * (h`)y^n o (aR + sR * x + z * 1^n) + z^2*2^n
=? hμgl(h`)r
=> 當且僅當l/r well-formed,等式成立
爲了保證t(x) well-fromed,即:
t = t0 +t1x + t2x2
需要校驗:=> gthτx =? Vz^2 * gδ*T1x *T2x^2
=> gthτx =? (hrgv)z^2 *gδ *(gt1)x*(hτ1)x*(gt2)x^2*(hτ2)x^2
=> gthτx =? hz^2*r + τ1*x + τ2*x^2 * gz^2*v + δ + t1*x + t2*x^2
=> gthτx =? hz^2*r + τ1*x + τ2*x^2 * gt0 + t1*x + t2*x^2
=> t = ? t0 + t1*x + t2*x2 && τx = ? z2*r + τ1*x + τ2*x2
=> 當且僅當t和τx welle-formed,等式成立
具體的協議流程圖如下圖所示:
總結
從上述流程可以看出,一次range proof,證明者需要發送總共{ l / r / t / τx / μ / T1 / T2/ A / S}個元素給驗證者,總共2n+3個Zp元素,4個G元素。下一篇文章將細講,Bulletproofs如何將交互復雜度降低到對數級O(log(n))附錄
1. Bulletproofs 論文:chrome-extension://cdonnmffkdaoajfknoeeecmchibpmkmg/assets/pdf/web/viewer.html?file=https%3A%2F%2Feprint.iacr.org%2F2017%2F1066.pdf標題:Exness外匯:技術幹貨 | 理解零知識證明算法之Bulletproofs:Range Proof I
地址:https://www.coinsdeep.com/article/10109.html
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。