zk-SNARKs

對零知識證明的一些整理(未完待續)

1,同態隱藏(Homomorphic Hidings)

  • 給定E(x),很難反推出x的值
  • 若x != y, 則E(x) != E(y)
  • 若已知 E(x)E(y),則可計算出E(x+y)

舉例說明同態隱藏在零知識證明中的作用:
假設Alice知道 xy的值使得 x+y=7,利用同態隱藏,Alice可以在不泄露xy具體值的情況下像Bob證明她的確知道xy的值,過程如下:

  • Alice將 E(x)E(y) 發送給Bob
  • Bob通過 E(x)E(y)計算出E(x+y),同時計算一下E(7)
  • Bob檢驗E(x+y)是否等於E(7)

上面的驗證過程保留了Alice的祕密,同時又能讓Bob信服,那麼問題是,什麼樣的E(x)才滿足我們的期望呢? E(x) = x^2 這種普通的加減乘除的函數肯定不行。。。。

取模運算mod
7mod4=37 mod4 = 3,或者 7mod4=37||_{mod4} = 3有時我們也會把mod寫在右邊,記爲 7=3mod47 = 3 (mod4)
本文我們統一用第二種。

模p乘方(p爲質數,此處取5)
對於整數集合{1…p-1},對集合中任意元素求乘方後取模

x 1 2 3 4
1xmod51^x∥ _{mod5} 1 1 1 1
2xmod52^x∥ _{mod5} 2 4 3 1
3xmod53^x∥ _{mod5} 3 4 3 1
4xmod54^x∥ _{mod5} 4 1 4 1

我們把集合{1…p-1}與在集合上的求乘方後取模合稱爲 羣ZpZ_p,集合元素有限的羣稱之爲有限羣。當p取質數時,羣ZpZ_p會出現一個特徵-——循環羣,以上表爲例,2xmod52^x∥ _{mod5} 這行,完美生成了集合中的每一個元素,這種羣稱之爲循環羣,2稱之爲這個羣的生成元g。利用循環羣的特性,我們可以構造一個符合要求的E(x)
E(x) = 2xmod52^x||_{mod5}
我們檢驗**E(x)**是否滿足同態隱藏的三個條件:

  1. 給定E(x)的值,很難反推x。(當p取5,g取2時當然不難,當p,g很大時,反推非常困難)
  2. 由於循環羣的特性,x不同,E(x)也不同
  3. E(x+y) = 2x+ymod52^{x+y}||_{mod5} = (2xmod52ymod5)mod5(2^x||_{mod5} * 2^y||_{mod5})||_{mod5} = E(x)E(y)mod5E(x)*E(y)||_{mod5}
    故上述E(x)能滿足同態隱藏的特性。

此處假設Alice要想Bob證明她擁有x+y=4這個問題的答案(例如x=3, y=1), 不想泄露xy的具體值。於是可以這麼幹:

  • Alice將E(3) 的值3、E(1) 的值2發送給Bob
  • Bob計算E(x+y)=32mod5=1=3*2||_{mod5}=1
  • Bob計算E(4)的值, = 1,
  • 經過比較,Bob確信Alice確實知道x+y=4的答案。此過程中,Bob並不知道x,y的具體值,達到了隱藏的目的。

2,多項式盲計算

接下來,我們把要證明的問題變複雜點,假設Alice知道多項式P(x)=a0+a1x+a2x2...adxdP(x)=a_0+a_1x+a_2x^2...a_dx^d的係數,她要向Bob證明她有這樣一組係數{a0,a1,...ada_0,a_1,...a_d},同時不泄露各項係數。我們假設Alice手中的P(x)=1+2x+3x2P(x)=1+2x+3x^2E(x)=2xmod5E(x)=2^x||_{mod5}, p=5p=5
那麼問題來了,Alice如何證明自己呢?
我們先看這個問題比上面的x+y=4難在哪裏

  • 前者是個等式,且右邊是個已知的常量
  • 後者是個多項式
  • 假如Bob取一個驗證點,例如令x=2, 發給Alice,Alice計算P(2)=1+4+12=17P(2)=1+4+12=17,然後將17發送給Bob,此時Bob並無從驗證17是否是正確的。另外Bob也不想直接把x=2發給Alice——他更想讓Alice在不知道x的取值的情況下,證明自己知道多項式的係數。

首先,Bob的想隱藏x=2這一點是容易實現的——再用一次同態隱藏即可:
E(a+bx+cx2)=2a+bx+cx2mod5=E(a)E(x)bE(x2)cmod5E(a+bx+cx^2)=2^{a+bx+cx^2}||_{mod5}=E(a)*E(x)^b*E(x^2)^c||_{mod5}
於是,Bob僅需將E(x)E(x)E(x2)E(x^2)在x=2時的值發給Alice即可做到隱藏x=2的目的,同時又不影響Alice的證明。
E(x)=22mod5=4E(x)=2^2||_{mod5}=4 E(x2)=24mod5=1E(x^2)=2^4||_{mod5}=1
Alice拿到上述兩個值,帶入計算E(P(x))=21+2x+3x2mod5=E(1)E(x)2E(x2)3mod5E(P(x))=2^{1+2x+3x^2}||_{mod5}=E(1)*E(x)^2*E(x^2)^3||_{mod5}

E(P(x))=2161mod5=2E(P(x))=2*16*1||_{mod5}=2
最大的問題在於,當Alice計算出結果發送給Bob之後,Bob該如何驗證呢?假如Bob知道P(x)=1+2x+3x2P(x)=1+2x+3x^2,那驗證是比較簡單的E(P(2))=E(17)=2E(P(2))=E(17)=2
但是,Bob不知道P(x),他該怎麼去驗證呢…

這個問題分兩部分
zk-SNARKs最精彩的部分來了!!!!!

3,係數知識假設(KCA)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章