本文翻譯自zcash官方博客,講解zcash中所使用的zk-SNARKs的原理第七部分,也是最后一部分,此處是原文鏈接。友情提示:本文偏技術化,適合對技術和數學非常感興趣的同學閱讀。
zkSNARK是zero-knowledge succint non-interactive arguments of knowledge的簡稱,意思是:簡潔的非交互的零知識證明
(本文授權BH好文好報群摘編、轉載以及相關轉授權推文行為)
在第六章中,我們見到了zk-SNARK一個皮諾曹協議的概述。我們目前還差兩個東西——一個支持加法和乘法的同態隱藏,這是驗證者校驗所必須的東西;以及一個從交互式協議向非交互式證明系統的轉換。
在本章中,我們將使用橢圓曲線來實現一個支持乘法的同態隱藏函數(HH),雖然這個HH有一定的限制,不過足夠滿足我們的要求。我們還將會看到這個受限的HH也完全可以把我們的交互式協議轉化為我們想要的非交互式系統。
我開始介紹橢圓曲線了,并解釋它們是怎么給出我們的HH的。
橢圓曲線及其配對
假設p是一個大于3的質數,并選擇某個u, v \in \mathbb{F}_p,滿足4u^3 + 27 v^2 \neq 0。我們看一下這個方程:
Y^2 = X^3 + u*X + v
一個橢圓曲線C就是滿足這樣一個方程的點(x, y)的集合。這種曲線有一種非常有趣的方法來構造群。群里的元素是在曲線上的點(x, y) \in \mathbb{F}_p^2。也就是這些點都滿足上面這個方程。另外還有一個特別的點\Omega也屬于這個群,這個純粹是技術上的需要,我們把它定義為"無限遠的一個點",它是這個群的零元。
現在的問題是,如何把兩個點P = (x_1, y_1)和Q = (x_2, y_2)相加得到第三個點?加法規則來源于一個抽象的概念,它被稱作曲線的"除數類群"。為了我們的目的,關于"除數類群"你只需要知道它給加法的定義增加了如下限制:任何線上的點相加都是0, 也就是\Omega。
我們來看看這個加法規則是怎么從這個限制衍生出來的。我們先來看一條垂直的線,它的方程是這樣的:X= c。假設這條線與曲線相交于一個P = (x_1, y_1)點。因為這個曲線的方程是這種形式的:Y^2 = f(X),所以如果(x_1, y_1)在曲線上,那么點Q := (x_1, -y_1)也在這條曲線上。另外,因為這個這是一條垂直線并且曲線方程中Y是二階的,那么我們可以確定,除這兩個點外,它們之間沒有其他的交點了。
因此,我們必定有P + Q = \Omega,也就是說 P = -Q;換言之,在這個群里,Q是P的逆元素。
我們再來看看如果點P和Q的橫坐標不同,也就是x_1 \neq x_2時,怎樣把這兩個點相加。我們經過P, Q畫一條線。
因為這個曲線方程中X是3次的,同時已經有一個非垂直的直線經過了其中的兩個點,那么它必然也會經過曲線中的第三個點,我們把它標記為R = (x, y)。除此三點以外,沒有其他交點了。
因此我們必然有P + Q + R = \Omega,也就是說P + Q = -R;我們知道,-R可以通過把R的縱坐標y取反得到-y。
因此,我們就得到了群的加法規則:給定點曲線上的P和Q,并經過它們作一條直線,那么把這條直線與曲線的第三個交點做個鏡像,即可得到它們的和。
這個群通常被稱作C(\mathbb{F}_p),因為它由在曲線C上面并且坐標值屬于\mathbb{F}_p的點構成;不過我們后面都將使用G_1代表它。為了簡單起見,假設G_1里元素的個數是一個質數r,并且不等于 。這種情況非常常見,Zcash現在用的曲線就是。在這種情況下,任何g \in G_1并且不是\Omega的元素都可以產生G_1。
能滿足r整除p^k -1的最小整數k,被稱為曲線的嵌入度。可以推測,當k不太小的時候,比如說,不小于6,這時G_1的離散對數問題就非常難解,也就是說,通過g和\alpha * g找到\alpha非常困難(Zcash當前使用的BN曲線中, k=12)。
\mathbb{F}_{p^k}的乘法群包含一個r階子群,我們記作G_T。我們看下曲線上那些坐標值在\mathbb{F}_{p^k}上但是不再{\mathbb{F}_p}上的點。在同樣的加法規則下,這些點連同\Omega也構成了一個群,記作C(\mathbb{F}_{p^k})。注意,C(\mathbb{F}_{p^k})完全包含G_1,不僅G_1,C(\mathbb{F}_{p^k})也包含一個r階的加法子群G_2(事實上,有r-1個r階加法子群)
給定生成器g \in G_1, h \in G_2,你會發現一個高效的map,稱為Tate簡化配對:接收G_1和G_2中的一對元素,生成G_T的一個元素。
就像這樣:
- Tate(g, h) = g, g是G_T的一個生成元,并且
- 給定一組元素a, b \in \mathbb{F}_r,我們就得到了Tate(a*g, b*h) = g^{ab}
定義Tate有點超過本系列的范圍,它依賴于代數幾何的概念。這里是Tate的概要定義:
對于a \in \mathbb{F}_p,多項式(X - a)^r在點a處為0, 并且沒有其他的點使得它為0。對于一個點P \in G_1,除數可以使我們證明存在一個從曲線到\mathbb{F}_p的函數f_p,同時,該函數在P點的值也為0,并且沒有其他的零點了。所以 Tate(P, Q)可以定義為:f_P(Q)^{(p^k - 1)/r}
可能這個定義和乘法同態和加法同態沒有太大關系,的確要證明Tate具有這些特性是比較復雜的。
定義E_1(x) := x*g, E_2(x) : = x*h, E(x) := x * g,我們得到了一個弱版本的HH,它支持加法和乘法: E_1, E_2, E都是支持加法的HH, 給定隱藏數E_1(x), E_2(y),我們可以計算出E(xy)。 換句話說,如果我們有x 和y的隱藏數,我們就可以計算出xy的隱藏數。不過,如果我們有x, y, z的隱藏數,我們無法得到xyz。
我們開始繼續前行,開始討論非交互式的證明系統。我們先從“什么是非交互式”開始。
公共引用串模式的非交互式證明
對于“非交互”最強烈和最直觀的感受可能是這樣的,為了證明某個聲明,證明者向所有人廣播一條消息,在此之前,沒有任何人有過任何形式的交流;然后任何收到這個消息的人都會相信證明者的聲明。在多數情況下,這可以認為是不可能的。
一個稍微寬松的非交互證明的概念是允許一個公共引用串(CRS)。在這個CRS模式中,在任何證明被構造以前,有一個安裝階段,這個階段中,一個串根據某種隨機過程構造出來,并且廣播給所有的當事人。這個串被稱作CRS,可以用于構造和檢驗證明。這里的前提是,這個構造CRS的隨機過程是任何人都不知道的——因為知道了這個隨機過程,就可以構造假證明了。
我們下面將解:在CRS模型下,我們如何把第四章里可驗證的盲式計算協議轉化為一個非交互式系統。第六章包含了一些類似的子協議,所以他們也可以用類似的方法轉化為 非交互式證明系統。
一個非交互式計算協議
這個非交互式的計算協議中,基本上包含了把Bob的第一條消息公布為CRS。回憶一下,這個協議的目的是為了獲取Alice的多項式P在隨機選擇的s \in F_r點上隱藏數E(P(s))。
安裝階段:隨機選擇\alpha \in \mathbb{F}_r^*, s \in \mathbb{F}_r,以及公布CRS:
(E_1(1), E_1(s), ..., E_1(s^d), E_2(\alpha), E_2(\alpha s), ..., E_2(\alpha s^d))。
證明:Alice通過使用CRS里的元素計算出a = E_1(P(s)) 和b = E_2(\alpha P(s)),事實上, E_1和E_2都支持線性組合。
驗證: 找到x, y \in \mathbb{F}_r,使它滿足a = E_1(x)和b = E_2(y)。Bob計算出E(\alpha x) = Tate(E_1(x), E_2(\alpha)) 以及 E(y) = Tate(E_1(1), E_2(y)), 然后檢查它們是否相等,如果相等,說明\alpha x = y
正如第四章說明的,Alice只能通過它知道的多項式P及其階次d,計算出P(s)的隱藏數a,她由此構造的a, b才能通過Bob的驗證。這里的主要區別是,Bob在驗證的時候不需要知道\alpha,因為他可以通過配對函數從E_1(x)和E_2(\alpha)計算出E(\alpha x)。因此,他不需要構造并發送他的第一個消息,這個消息可以簡單地固定在CRS中。
譯者注:zcash的這篇關于橢圓曲線講解的比較粗糙,有點云霧繚繞,V神有篇文章對橢圓曲線和Tate函數做了更深入一點的講解,下次我把V神的這篇文章也翻譯一下
早贊聲明:為方便早贊、避免亂贊,“BH好文好報群”為點贊者、寫作者牽線搭橋,實行“先審后贊、定時發表”的規則,也讓作品脫穎而出、速登熱門!加群微信:we01230123(天平)。