對零知識證明的一些整理(未完待續)
1,同態隱藏(Homomorphic Hidings)
- 給定E(x),很難反推出x的值
- 若x != y, 則E(x) != E(y)
- 若已知 E(x) 與 E(y),則可計算出E(x+y)
舉例說明同態隱藏在零知識證明中的作用:
假設Alice知道 x 和 y的值使得 x+y=7,利用同態隱藏,Alice可以在不泄露x和y具體值的情況下像Bob證明她的確知道x和y的值,過程如下:
- 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
,或者 有時我們也會把mod寫在右邊,記爲
本文我們統一用第二種。
模p乘方(p爲質數,此處取5)
對於整數集合{1…p-1},對集合中任意元素求乘方後取模
x | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | 1 | 1 | 1 | |
2 | 4 | 3 | 1 | |
3 | 4 | 3 | 1 | |
4 | 1 | 4 | 1 |
我們把集合{1…p-1}與在集合上的求乘方後取模合稱爲 羣,集合元素有限的羣稱之爲有限羣。當p取質數時,羣會出現一個特徵-——循環羣,以上表爲例, 這行,完美生成了集合中的每一個元素,這種羣稱之爲循環羣,2稱之爲這個羣的生成元g。利用循環羣的特性,我們可以構造一個符合要求的E(x)
令E(x) =
我們檢驗**E(x)**是否滿足同態隱藏的三個條件:
- 給定E(x)的值,很難反推x。(當p取5,g取2時當然不難,當p,g很大時,反推非常困難)
- 由於循環羣的特性,x不同,E(x)也不同
- E(x+y) = = =
故上述E(x)能滿足同態隱藏的特性。
此處假設Alice要想Bob證明她擁有x+y=4這個問題的答案(例如x=3, y=1), 不想泄露xy的具體值。於是可以這麼幹:
- Alice將E(3) 的值3、E(1) 的值2發送給Bob
- Bob計算E(x+y)
- Bob計算E(4)的值, = 1,
- 經過比較,Bob確信Alice確實知道x+y=4的答案。此過程中,Bob並不知道x,y的具體值,達到了隱藏的目的。
2,多項式盲計算
接下來,我們把要證明的問題變複雜點,假設Alice知道多項式的係數,她要向Bob證明她有這樣一組係數{},同時不泄露各項係數。我們假設Alice手中的, ,
那麼問題來了,Alice如何證明自己呢?
我們先看這個問題比上面的x+y=4難在哪裏
- 前者是個等式,且右邊是個已知的常量
- 後者是個多項式
- 假如Bob取一個驗證點,例如令x=2, 發給Alice,Alice計算,然後將17發送給Bob,此時Bob並無從驗證17是否是正確的。另外Bob也不想直接把x=2發給Alice——他更想讓Alice在不知道x的取值的情況下,證明自己知道多項式的係數。
首先,Bob的想隱藏x=2這一點是容易實現的——再用一次同態隱藏即可:
於是,Bob僅需將與在x=2時的值發給Alice即可做到隱藏x=2的目的,同時又不影響Alice的證明。
Alice拿到上述兩個值,帶入計算
最大的問題在於,當Alice計算出結果發送給Bob之後,Bob該如何驗證呢?假如Bob知道,那驗證是比較簡單的
但是,Bob不知道P(x),他該怎麼去驗證呢…
這個問題分兩部分
zk-SNARKs最精彩的部分來了!!!!!