簡介:本文翻譯自zcash官方博客,講解zcash中所使用的zk-SNARKs的原理第二部分,此處是原文鏈接。友情提示:本文偏技術(shù)化,適合對技術(shù)和數(shù)學(xué)非常感興趣的同學(xué)閱讀。
zkSNARK是zero-knowledge succint non-interactive arguments of knowledge的簡稱,意思是:簡潔的非交互的零知識證明
(本文授權(quán)BH好文好報群摘編、轉(zhuǎn)載以及相關(guān)轉(zhuǎn)授權(quán)推文行為)
正文
在本章中,我們將回憶一下中學(xué)課文中學(xué)到的多項式,并解釋一下“盲式計算”,以及如何用同態(tài)隱藏函數(shù)(之后將簡寫為HH
)來實現(xiàn)它。在之后的章節(jié)中,我們將會發(fā)現(xiàn)盲式計算是構(gòu)造SNARK的核心工具。
我們用\mathbb{F}_p來表示大小為p的域
,它代表,\mathbb{F}_p中的元素是{0, ..., p-1}
,其元素的加法和乘法都會執(zhí)行 mod p
,這在第一章有講過。
多項式和線性組合
定義一個d
次多項式P:
P(X) = a_0 + a_1*X + a_2 * X^2 + ... + a_d * X^d, a_0, ..., a_d \in \mathbb{F}_p
我們可以這樣在 s \in \mathbb{F}_p 點上計算 P,讓 s 代替 X,并計算總和:
P(s) = a_0 + a_1*s + a_2 * s^2 + ... + a_d * s^d。
由上面的式子可以看出,P(s) 實際上也是1, s, ..., s^d這些值的線性組合
,或者說成是加權(quán)和
,他們的權(quán)重依次是a_0, ..., a_d。
在前一章中,我們看到HH E
是這么來定義的: E(x) = g^x,g
是一個具有難離散對數(shù)問題的生成元
。另外,這個HH還支持加法
,也就是說,我們可以通過E(x)
和E(y)
計算出E(x+y)
。我們需要注意的是,它其實也支持線性組合,也就是說,給定a, b, E(x), E(y)
,我們可以計算出E(ax+by)
。這是因為:
E(ax+by) = g^{ax+by} = g^{ax} * g^{by} = (g^x)^a * (g^y)^b = E(x)^a * E(y)^b
多項式的盲式計算
假設(shè)Alice有一個d
次多項式P
,Bob有一個隨機的點s
, s \in \mathbb{F}_p。如果Bob想要得出E(P(s))
,那么他可以采用如下兩種辦法:
- Alice把
P
發(fā)送給Bob,然后由Bob自己計算出E(P(s))
- Bob發(fā)送
s
給Alice,她在計算出E(P(s))
之后把結(jié)果發(fā)給Bob
然后,在盲式計算中,我們想讓Bob在無法得知P
的情況下得知到E(P(s))
—— 這就否定了第一種辦法;但同時,更重要地,我們也不想讓Alice得知s
,這樣也否定了第二種辦法[1]。
不過,我們可以用HH進行盲式計算,具體可以這樣做:
- Bob把隱藏數(shù)E(1),E(s),...,E(S^d)發(fā)送給Alice
- Alice通過上面的隱藏數(shù)計算出
E(P(s))
,然后把結(jié)果發(fā)送給Bob(Alice之所以可以這么做,是因為E
支持線性組合,而P(s)
就是1, s, ..., s^d的線性組合)
你看,我們只發(fā)送隱藏數(shù)就可以了,Alice不需要得知s
[2],Bob也不需要得知P
。
為什么這很有用?
后面的文章,我們會深入到盲式計算中,看它在SNARKs中是怎么運用的。這個簡單的出發(fā)點是,驗證者Bob在不知道那個多項式的情況下,如何去檢驗另外一個人Alice是否知道它。我們通過Alice在一些隨機的點上進行盲式計算,如果她不知道那個隱藏多項式,那么她很可能會給出錯誤的結(jié)果。這,反過來,也依賴于Schwartz-Zippel定理:不同的多項式在大多數(shù)點上的值都是不同的。
早贊聲明:為方便早贊、避免亂贊,“BH好文好報群”為點贊者、寫作者牽線搭橋,實行“先審后贊、定時發(fā)表”的規(guī)則,也讓作品脫穎而出、速登熱門!加群微信:we01230123(天平)。