在上一節(jié)中,我們通過匹諾曹協(xié)議,可以做到驗證者無需了解證明者多項式具體參數(shù)的情況下,通過在特定域抽樣并隱藏抽樣數(shù)據(jù)的方式,驗證了證明者提供的證明,但是在這個過程中還存在兩個遺留問題,第一個就是驗證函數(shù)最后是H(s)*T(s),這個是一個乘法操作,我們之前的文章中闡述的都是加法的同態(tài)隱藏,并沒有給出乘法的同態(tài)隱藏證明。第二個問題就是這個協(xié)議需要證明者和驗證者多次交互才能做到驗證的目的,而我們希望做到少交互甚至無交互,畢竟我們這個算法的名稱就是無交互的零知識驗證協(xié)議。
問題一:同時支持乘法和加法同態(tài)隱藏的群。
公式1是我們上一節(jié)使用的驗證公式,驗證者需要乘法的同態(tài)隱藏屬性。
為了找到能夠同時支持乘法和加法的同態(tài)隱藏屬性的群,我們引入了橢圓曲線,在橢圓曲線上的點存在一些有趣的屬性,使得由這些點組成的群,能夠滿足我們特定的需求,對于點P(x,y)屬于曲線C,且x,y
屬于域Fp。在此曲線上我們可以找出一些特殊的點:1,O這個點用途有點類似于整數(shù)域的0;2,G這個點的用途類似1.他們的屬性定義通過公式3來定義。
公式4,5,6分別定義了新的群,他們有自己的特性,這些特性決定了我們可以利用他們實現(xiàn)加法和乘法的同態(tài)隱藏,我會單獨開一個系列講解橢圓曲線函數(shù)。在這里大家只要明白我們通過他可以解決上一節(jié)遺留的問題一,
需要重點解釋一下的是一個新的域:Fp^12。我們在講解這個擴展域之前,可以回顧一下高中學到的復數(shù),復數(shù)實際上是對實數(shù)的擴展,其中i^2+1
=
0是對新引入的復數(shù)單位的定義,復數(shù)域有很多特性,如果我們將一個復數(shù)的實數(shù)和復數(shù)部分的值限定在域Fp中,那么我會得到一個新的群。在公式5中,我們使用w這個單位作為新擴展的域的單位,他的定義與復數(shù)不同:w^12-18*w^6+82=0
問題二:非交互性:
在前幾節(jié)設計的協(xié)議中,我們用來驗證Alice的多項式時,Bob會選擇多項式上的點s以及線性倍數(shù)阿爾法,然后將隱藏后的s和阿爾法發(fā)送給Alice,這個過程是一種交互過程,新的協(xié)議中,Bob需要發(fā)送的隨機消息提前在系統(tǒng)生成,我們把它稱作CRS,這是第一步。
第二步,對于Alice這個證明著來說,他可以無需每次從Bob哪里獲取這個CRS,只要通過setup過程,就可以的到a=E1(P(s))和b=E2(阿爾法*P(s))。這個a,b結果是Alice必須發(fā)送出來的,這個a,b允許任何一個像Bob一樣的驗證者來證明其準確性。
第三步,Bob可以在無需提供阿爾法的情況下,通過setup階段的E2(阿爾法)和第二個階段Alice發(fā)出的a來計算E(阿爾法*x)。這樣做的好處就是Bob無需每次檢查前,都需要生成一個消息發(fā)送給Alice,然后再驗證Alice結果的正確性。
關于第一個階段的setup,如果隨機數(shù)s和阿爾法一旦泄露,那么整個系統(tǒng)的驗證邏輯就可以被偽造,因此這個隨機數(shù)的生成還有很多故事。據(jù)說有人為了生成隨機數(shù),從廢棄的核電站找到放射性物質,然后在空中測量放射物質的輻射值來生成隨機數(shù),有興趣的同學可以自行搜索一下。
關于zk-SNARKs的介紹就告一段落,其中最后的橢圓函數(shù)部分只講結論,并未給出證明,在此節(jié)之前的章節(jié),理論上根據(jù)基本的群論和線性代數(shù)的基本知識就可以理解。接下來我會單獨學習并講解橢圓函數(shù),并作為一個單獨的系列,并且結合Filecoin白皮書中對zk-SNARKs的使用,來解釋前面幾節(jié)中用到的數(shù)學知識。